sprop-parameter-sets或profile-level-id是解码H264所需的SDP参数?

时间:2013-12-17 12:42:58

标签: video sip h.264 vlc sdp

我正在尝试了解SDP中能够从RTP数据包中解码H264所需的参数。

这与this question有关,因为答案仅适用于少数情况。

示例

我使用以下命令从VLC流式传输。

vlc -vvv sample_video/big_buck_bunny_480p_h264.mov --sout '#transcode{vcodec=h264,vb=700,fps=20,scale=0.25,acodec=none}:rtp{dst=10.5.110.117,port=5004,ttl=1}'

这会将视频转码为:

  • 比特率:700kbps
  • 帧速率:每秒20次
  • 分辨率:原始
  • 的25%

接收器使用以下SDP文件正确接受并解释流(删除第一行,它只是一个名称)。

//test.sdp
c=IN IP4 10.5.110.117
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=640014;sprop-parameter-sets=Z2QAFKzZQ0R+f/zBfMMAQAAAAwBAAAAKI8UKZYA=,aOvssiw=;

要运行的命令:vlc test.sdp

第7.2页中的可用文档here,名为 SIP视频配置文件最佳做法,用于配置文件级别ID状态:

  

个人资料级别ID

     

虽然在RFC 6184中指定为可选(与所有参数一样),但是   'profile-level-id'参数是编解码器设置的基础,   并且还需要指定任何其他参数。于是   所有实现都应在其SDP中包含此参数,并且   应该在接收时解释它。如果不包含,则默认   值为420010,如RFC 6184中所述。

同一文档陈述了以下 sprop-parameter-sets

  

sprop-parameter-sets

     

H.264允许在带内发送序列和图片信息,   和带外。 SIP视频实现应该发出信号   带内信息,符合H.323和H.323中普遍使用的模型   绝大多数现有的SIP视频实现,以及   因此不应包括此参数。

问题1

即使删除profile-level-id,视频也会在接收器上正确解释。

//test.sdp
c=IN IP4 10.5.110.117
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 sprop-parameter-sets=Z2QAFKzZQ0R+f/zBfMMAQAAAAwBAAAAKI8UKZYA=,aOvssiw=;

没有sprop-parameter-sets

问题2

我一直在线路化不同的RTCP,SIP和SAP,而且SDP 通常 包含sprop-parameter-sets

问题

  • 请解释两个参数之间的含义和差异
  • 根据上述问题的答案,解释问题中出现的对比

1 个答案:

答案 0 :(得分:7)

含义和主要差异:

正如您在profile-level-id的定义中所看到的,它具有默认值,因此可以在信令协商中省略。此参数中包含的字符串位于hexadecimal format and it has 3 bytes中,用于通知解码器有关profile,约束以及将用于发送数据的level。此设置定义了几个参数,如比特率,分辨率,数据包类型......

参数sprop-parameter-sets可被视为解码您要发送的数据的密钥。它包含一些将用于编码数据的字节,因此您可以与接收器共享它,以便它可以解码视频数据包。它也可以从信令中省略,但它们对于解码器是必需的,因此它们也可以在带内发送。因此,如果在sdp中省略它们,则需要在数据包中发送它们。接收方只能在收到此信息后对数据进行解码。

问题1:

如前所述,profile-level-id可以省略,但它仍然有效,因为将使用默认的420010。唯一的区别是设置会有所不同,可能会影响视频质量。例如,默认值为42,引用约束基线配置文件(CBP),SDP初始值中的64引用High Profile(HiP)。

sprop-parameter-sets丢失时视频无效,可能是因为vlc不支持在带内发送该数据,正如我上面所解释的那样,它是强制性的。

问题2:

许多SIP实现支持在带内发送sprop-parameter-sets,这就是您正在捕获的内容。检查Wireshark中的h264数据包,您将在某些数据包中看到此值的描述。