我试图了解SDP中所需的参数是什么,能够从RTP数据包中解码H264.
这与这个问题有关,因为答案仅适用于少数情况.
例
我使用以下命令从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章中针对profile-level-id状态命名为SIP Video Profile Best Practices:
型材级-ID
虽然在RFC 6184中指定为可选(与所有参数一样),但'profile-level-id'参数是编解码器设置的基础,并且还需要指定任何其他参数.因此,所有实现都应在其SDP中包含此参数,并在接收时应解释它.如果未包含,则默认值为420010,如RFC 6184中所指定.
对于sprop-parameter-sets,同一文档声明了以下内容:
sprop参数集
H.264允许在带内和带外发送序列和图像信息.SIP视频实现应该在带内发信号通知该信息,符合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
.
问题
请解释两个参数之间的含义和差异
根据上述问题的答案,解释问题中出现的对比
nakib.. 7
意义和主要区别:
正如您在定义中所看到的profile-level-id
,它具有默认值,因此可以在信令协商中省略.此参数中包含的字符串是十六进制格式,它有3个字节,通知解码器有关配置文件,约束和将用于发送数据的级别.此设置定义了几个参数,如比特率,分辨率,数据包类型......
该参数sprop-parameter-sets
可被视为解码您将要发送的数据的密钥.它包含一些将用于编码数据的字节,因此您可以与接收器共享它,以便它可以解码视频数据包.它也可以从信令中省略,但它们对于解码器是必需的,因此它们也可以在带内发送.因此,如果在sdp中省略它们,则需要在数据包中发送它们.接收器只能在接收到该信息后解码数据.
问题1:
如前所述,profile-level-id
可以省略,它仍然有效,因为420010
将使用默认值.唯一的区别是设置会有所不同,可能会影响视频质量.例如,默认情况下,42引用约束基线配置文件(CBP),SDP中初始值中的64引用高配置文件(HiP).
sprop-parameter-sets
由于vlc不支持在带内发送数据,因此视频在丢失时无法正常工作,正如我上面所解释的那样,它是强制性的.
问题2:
许多SIP实现都支持发送sprop-parameter-sets
带内,这就是您正在捕获的内容.检查Wireshark中的h264数据包,您将在某些数据包中看到此值的描述.
意义和主要区别:
正如您在定义中所看到的profile-level-id
,它具有默认值,因此可以在信令协商中省略.此参数中包含的字符串是十六进制格式,它有3个字节,通知解码器有关配置文件,约束和将用于发送数据的级别.此设置定义了几个参数,如比特率,分辨率,数据包类型......
该参数sprop-parameter-sets
可被视为解码您将要发送的数据的密钥.它包含一些将用于编码数据的字节,因此您可以与接收器共享它,以便它可以解码视频数据包.它也可以从信令中省略,但它们对于解码器是必需的,因此它们也可以在带内发送.因此,如果在sdp中省略它们,则需要在数据包中发送它们.接收器只能在接收到该信息后解码数据.
问题1:
如前所述,profile-level-id
可以省略,它仍然有效,因为420010
将使用默认值.唯一的区别是设置会有所不同,可能会影响视频质量.例如,默认情况下,42引用约束基线配置文件(CBP),SDP中初始值中的64引用高配置文件(HiP).
sprop-parameter-sets
由于vlc不支持在带内发送数据,因此视频在丢失时无法正常工作,正如我上面所解释的那样,它是强制性的.
问题2:
许多SIP实现都支持发送sprop-parameter-sets
带内,这就是您正在捕获的内容.检查Wireshark中的h264数据包,您将在某些数据包中看到此值的描述.