我正在尝试将实时视频从我的 android 手机流式传输到我 PC 上的桌面 RTSP 服务器。流媒体视频可以在其他设备上播放。我使用的是 H.264 视频编码器,因此服务器返回的 SDP(作为 DESCRIBE 请求的回复)应包含 profile-level-idsprop-parameter-sets 字段。

Spydroid 项目展示了如何通过解析(从 avcC 块)从记录到 SD 卡的虚拟文件中提取这些信息。但我不能那样做。在 Spydroid 中,媒体记录器和 RTSP 服务器在同一设备上,因此服务器始终可以在流式传输之前记录与记录器相同配置的测试文件。但是我将视频作为 RTP 流直接从电话传输到远程服务器。

所以我的问题是:

  • 如何将这些值提供给维护协议(protocol)的服务器?
  • 有没有办法从RTP流中找出这两个字段?

  • 编辑:

    我正在使用 android 手机生成流,但服务器可以从任何来源接收 RTP 流。那么,有没有什么通用的方法来获取这些值?

    最佳答案

    您可以从序列参数集 NAL 单元中提取 profile-level-id(如果实际上参数集甚至在流中发送),它是 NAL header 之后的前 3 个字节。即来自具有级别 3.0 的基线配置文件流的 SPS NAL 单元的前四个字节将如下所示:
    67 42 00 1E
    忽略第一个字节,这只是表明它是一个 SPS NAL 单元(0x67 & 0x1F == 0x7 SPS 是 NAL 类型 7,PPS 是 NAL 类型 8)。其他 3 个字节为您提供配置文件、约束标志和级别(实际上,它只是第 3 个字节中的级别乘以 10)。
    sprop-parameter-sets 是 Base64 编码的 Sequence Parameter Sets 和 Picture Parameter Sets,用逗号隔开。所以只需 Base64 编码 SPS 和 PPS NAL 单元(Nal 类型 7 和 NAL 类型 8)并用逗号分隔,你应该很高兴。

    10-07 21:24