【发布时间】:2014-01-05 05:37:15
【问题描述】:
我试图了解 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
here 提供的文档,在第 7.2 章中名为 SIP 视频配置文件最佳实践,用于配置文件级别 ID 状态:
个人资料级别 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。
问题
- 请解释一下这两个参数的含义和区别
- 根据上述问题的答案,解释问题中出现的对比
【问题讨论】: