Rud*_*lis 5 live-video webm vp9
我正在通过libvpx使用VP9对实时流进行编码,并希望将其流式传输到HTML5播放器.我已经阅读了Matroska规范和W3C WebM字节流格式,并检查了libvpx中vpxenc工具生成的几个WebM文件.一切似乎都很好,但是我找不到关于如何在W3C规范中描述的媒体段内打包编码视频帧的任何严格规则或指南.
据我所知,我必须发出包含内部有块元素的簇的媒体段.根据我的理解,我可以为编码器获得的每个帧使用一个简单的块元素,因为它有一个时间戳.但是如何组织集群?对我来说,使用单个简单的块条目为每个帧发出单个集群以减少缓冲和延迟是有意义的.这种方法是否被认为是正常的,或者这样做有什么缺点,我应该缓冲一段时间间隔,然后发出一个包含多个简单块元素的集群,覆盖缓冲时间段?
UPDATE
所以我实现了所描述的方法(用单个简单的块条目发射集群),视频似乎滞后很多,所以可能这不是可行的方法.
所以我终于成功地混合了实时流。
看来我描述的初始方法(具有单个SimpleBlock 的单个集群)实际上是这样工作的,但它有几个缺点:
关键帧应该放置在簇的开头
我最初的假设之一是集群不能有“未知”的大小,但实际上 Chrome、VLC 和 ffplay 对此很满意,因此不需要缓冲完整的 GOP 来确定大小和簇可以即时发射。
另一个重要的方面是SimpleBlock元素中的时间戳是有符号的 16 位整数,因此您基本上可以在其中编码从集群时间码到 32767 的偏移量。因此,如果您使用默认时间刻度(其中 1 个刻度为 1 毫秒),则这意味着集群不能长于 32 秒。如果 GOP 大小很大,则在决定是否发出新集群时也必须考虑此标准。
最后,这里是一个直播流的链接(“Big Buck Bunny”预告片,但以直播格式),它似乎适用于所有玩家,并且是根据上面的描述生成的。
希望这些信息对任何人都有帮助。