gpt4 book ai didi

webm - 应如何在实时 WebM 流中打包帧?

转载 作者:行者123 更新时间:2023-12-04 19:55:00 32 4
gpt4 key购买 nike

我正在通过 libvpx 使用 VP9 编码实时流,并希望将其流式传输到 HTML5 播放器。我已阅读 Matroska specificationW3C WebM Byte Stream Format并检查了来自 libvpx 的 vpxenc 工具生成的几个 WebM 文件。一切看起来都很好,但是我找不到关于如何在 W3C 规范中描述的媒体段中打包编码视频帧的任何严格规则或指南。

据我所知,我必须发出包含块元素簇的媒体片段。据我所知,我可以为从编码器获得的每一帧使用一个简单的块元素,因为它有一个时间戳。但是如何组织集群?对我来说,使用单个简单的块条目为每个帧发出单个集群以减少缓冲和滞后是有意义的。这种方法是否被认为是正常的,或者这样做是否有任何缺点,我应该缓冲一段时间,然后发出一个包含多个简单块元素的集群,覆盖缓冲的时间段?

更新

所以我实现了所描述的方法(发射带有单个简单块条目的集群)并且视频似乎滞后很多,所以大概这不是要走的路。

最佳答案

所以我终于设法多路复用 ar 工作直播。

似乎我描述的初始方法(具有单个集群和单个 SimpleBlock )实际上是这样工作的,但它有几个缺点:

  • 这有点违反 recommendations在官方WebM页面

  • Key frames SHOULD be placed at the beginning of clusters


  • 如果使用 curl 或其他方式将实时流存储在本地文件中,它会中断可能的查找。根据我的理解,一个集群应该由一个完整的 GOP 组成。

  • 我最初的假设之一是集群不能有“未知”的大小,但在实践中似乎 Chrome、VLC 和 ffplay 对此感到满意,因此不需要缓冲完整的 GOP 来确定大小和集群可以即时发射。

    另一个重要方面是 SimpleBlock 中的时间戳元素是有符号的 16 位整数,因此您基本上可以在其中编码从集群时间码到 32767 的偏移量。因此,如果您使用 1 滴答为 1 毫秒的默认时间刻度,这意味着集群不能超过 32 秒。如果 GOP 大小很大,则在决定是否发出新集群时也必须考虑此标准。

    最后, here是一个直播流(“Big Buck Bunny”预告片,但采用实时格式)的链接,它似乎适用于所有玩家,并按照上述描述生成。

    希望这些信息可以帮助任何人。

    关于webm - 应如何在实时 WebM 流中打包帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382307/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com