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

Posted

技术标签:

【中文标题】sprop-parameter-sets 或 profile-level-id 是解码 H264 所需的 SDP 参数吗?【英文标题】:Is sprop-parameter-sets or profile-level-id the SDP parameter required to decode H264? 【发布时间】:2014-01-05 05:37:15 【问题描述】:

我试图了解 SDP 中需要什么参数才能从 RTP 数据包中解码 H264。

这与this question 相关,因为该答案仅在少数情况下有效。

示例

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

vlc -vvv sample_video/big_buck_bunny_480p_h264.mov --sout '#transcodevcodec=h264,vb=700,fps=20,scale=0.25,acodec=none:rtpdst=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

问题

请解释一下这两个参数的含义和区别 根据上述问题的答案,解释问题中出现的对比

【问题讨论】:

【参考方案1】:

含义和主要区别:

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

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

问题一:

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

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

问题 2:

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

【讨论】:

以上是关于sprop-parameter-sets 或 profile-level-id 是解码 H264 所需的 SDP 参数吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何解码 H264 SDP 中的 sprop 参数集?

pr2018对电脑配置要求

使用 EntryID、StoreID 和/或 PR_ENTRYID 打开 Outlook 邮件项目

Github或Gitlab等申请PR或MR(pull request & merge request)的时候如果不能自动合并代码发生冲突了要怎么办

Pr:常用音频效果

Pr:响应式设计