- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解 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}'
这会将视频转码为:
接收方正确接受并解释具有以下 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 章中针对 profile-level-id 状态命名为 SIP Video Profile Best Practices:
profile-level-id
While specified as optional (as are all parameters) in RFC 6184, the 'profile-level-id' parameter is fundamental to the setup of the codec, and is also required for any further parameters to be specified. Hence all implementations should include this parameter in their SDPs, and should interpret it when receiving it. If not included, the default value is 420010, as specified in RFC 6184.
同一文档对 sprop-parameter-sets 的陈述如下:
sprop-parameter-sets
H.264 allows sequence and picture information to be sent both in-band, and out-of-band. SIP video implementations should signal this information in-band, conforming to the model prevalent in H.323 and in the overwhelming majority of existing SIP video implementations, and hence this parameter should not be included.
问题一
即使删除了 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
.
问题
最佳答案
含义和主要区别:
正如您在 profile-level-id
的定义中所见,它有一个默认值,因此在信令协商中可以省略。该参数包含的字符串在hexadecimal format and it has 3 bytes中通知解码器有关 profile 的信息,约束和 level将用于发送数据。此设置定义了几个参数,如比特率、分辨率、数据包类型......
参数 sprop-parameter-sets
可以被视为解码您将要发送的数据的关键。它包含一些将用于编码数据的字节,因此您与接收器共享它以便它可以解码视频数据包。它也可以从信令中省略,但它们对于解码器是强制性的,因此它们也可以带内发送。因此,如果您在 sdp 中省略它们,则需要在数据包中发送它们。接收方只能在收到此信息后才能对数据进行解码。
问题 1:
如前所述,profile-level-id
可以省略,但它仍然有效,因为将使用默认的 420010
。唯一的区别是设置会有所不同,并且可能会影响视频质量。例如,默认值中的 42 是指 Constrained Baseline Profile (CBP),而 SDP 初始值中的 64 是指 High Profile (HiP)。
当缺少 sprop-parameter-sets
时,视频不工作可能是因为 vlc 不支持带内发送该数据,正如我上面所解释的,这是强制性的。
问题 2:
许多 SIP 实现都支持在带内发送 sprop-parameter-sets
,这就是您要捕获的内容。在Wireshark中查看h264数据包,你会在一些数据包中看到这个值的描述。
关于video - 解码H264所需的SDP参数是sprop-parameter-sets还是profile-level-id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20634476/
我是业余时间的 Java 开发者,我只是想知道 level.tick() 和 Level.tick(level) ('Level' 是类的名称,'level' 是该类的对象) 我知道,由于 java
在 asp.net MVC 中的 Level Views Level 或 Model level 中验证更明智 以及有关 MVC 中验证的良好教程的链接? 最佳答案 验证应始终在可能的情况下在客户端和
当使用随机数生成器时,为了使新值具有更大的随机性,这是更好的使用方式: 有没有一种每次都实例化一个新的 RNG 实例然后返回一个值的方法? 在类级别有一个 RNG 实例,它在构造函数中实例化一次,并且
我在理解“单一责任原则”时遇到问题。应该在类级别或方法级别应用SRP。 可以说我有学生类,我需要创建学生,更新学生和删除学生。 如果我创建一个具有用于这三个操作的方法的服务类,则会违反SRP原则。 最
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这个问题与语言无关。枚举级别之间有什么区别。在应用程序中,我看到许多 INFO 消息对我来说似乎是 DEBUG 信息,反之亦然。 最佳答案 对此有多种不同的解释。我个人的看法是: 信息 - 与申请状态
似乎最好只为顶级函数创建一次 FunPtr,而不是在需要时创建一个新的函数(同一函数)并处理其释放。 除了 foreign import ccall "wrapper" 之外,我是否忽略了获取 Fun
我正在经历以下 link了解在依赖倒置原则的背景下高级和低级模块的含义。 根据那里给出的解释,以下代码片段是一个好的/合适的示例吗? public class HighLevel { priv
我很好奇在 Java 应用程序中执行 URL 重写的最佳方法是什么。假设您有一个名为 test_app 的应用程序,我将其部署在 tomcat 上。 通过 URL 重写,我的意思是我不想通过 host
我试图找到最有效的方法来检查给定的字符串是否为回文。 首先,我尝试了蛮力,其运行时间为 O(N)。然后我通过只进行 n/2 次比较而不是 n 次来稍微优化代码。 代码如下: def palindrom
我有一个包含一些随机自然数的表格,例如: number ------- 2 3 1 我想从这个表中检索一个集合,其中每一行都将包含与值显示的次数一样多的次数,例如上面它将是: number -----
我一直在了解测试驱动开发的优势,并尝试使用 pytest 开发我的第一个 TDD 应用程序和 setuptools 开发 选项。到目前为止进展顺利。我有一个问题:我的 test_* 模块中应该将要测试
我想将特定记录器名称、特定级别或更高级别(比如 INFO 及以上)的消息记录到特定的日志处理程序,比如文件处理程序,同时仍然获取所有日志消息到控制台。 Python 是 2.7 版。 到目前为止我尝试
DOM Level 0 事件与 DOM Level 2 事件有什么区别?我问是因为有人告诉我 Firefox 和 IE 以不同的顺序调用它们,而我以前从未听过这些术语。 最佳答案 DOM Level
其实我对token不是很了解..当我阅读 googleresearch/bert model 时,我看到了这些词。 # In the demo, we are doing a simple class
假设我们在站点中有一个页面,它显示了数据库中的一些记录。 我们需要显示按某列排序的记录。 哪种方法可以提供更好的性能:检索从数据库中排序的数据或在网格上应用排序? 谢谢 最佳答案 这取决于您要显示的数
其实我对token不是很了解..当我阅读 googleresearch/bert model 时,我看到了这些词。 # In the demo, we are doing a simple class
我有以下 CSS 下拉菜单标记: FieldOne LevelOne FieldTwo LevelOne FieldThree LevelOne
这个问题已经有答案了: What is the difference between DOM Level 0 events vs DOM Level 2 events? (2 个回答) 已关闭 9 年
如何通过搜索数组(第 2 级)中的重复值来删除一行数组(第 1 级)? $array = array( 0 => array('name' => 'haha1', 'dateline' => '
我是一名优秀的程序员,十分优秀!