可以从RTP流中提取profile-level-id和sprop-parameter-sets?

时间:2012-09-09 11:13:14

标签: video-streaming h.264 rtsp rtp

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

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

所以我的问题是:

  1. 如何将这些值提供给维护协议的服务器?
  2. 有没有办法从RTP流中找出这两个字段?
  3. 修改

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

1 个答案:

答案 0 :(得分:7)

您可以从序列参数集NAL单元中提取profile-level-id(实际上,如果参数集甚至在流中发送),它是NAL头之后的前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编码的序列参数集和图片参数集,以逗号分隔。因此,只需Base64对SPS和PPS NAL单元(Nal类型7和NAL类型8)进行编码,并用逗号分隔,你就应该好了。