video - webm (vp9) 视频流的 header 结构是什么样的?

标签 video video-streaming decoding webm vp9

IVF stream 相比其中包含 32 字节编解码器 header 和 12 字节帧 header ,webm (vp9) 流 header 是什么样的?

是否有一个 header 结构定义可以在我的代码中使用来解析流?

请纠正我 - 但根据在线阅读,我猜 VP9 没有编解码器 header ,并且同时具有未压缩和压缩的帧 header 。 uncomp header 还会有 comp header 和帧数据的大小吗?

但我不知道如何获取它。

基本上我想要实现的是

  • 一次循环一帧的 webm vp9 流
  • 查找 header 的大小并将压缩数据发送到解码器
  • 将指针前进当前帧大小

为了做到这一点,我需要知道 header 和压缩帧的大小。

最佳答案

WebM 与 Matroska 相同,只是允许使用的编解码器列表更窄。

Matroska 是 EBML 的架构规范文件。

也就是说,如果要解析WebM,就需要解析EBML。然后,您需要找到 Matroska 所需的元素。幸运的是,这是 very well documented .

您首先要检查 Tracks 元素 (0x1654AE6B) 以获取有关编解码器的信息,您需要将其中继到解码器。

Cluster 元素 (0x1F43B675) 将在 WebM/Matroska 流中一遍又一遍地重复,并包含数据 block 。

我强烈建议查看EBML Viewer 。它是一个古老的 Java 应用程序,但可以完成研究 WebM 和 Matroska 文件的工作。请注意,它不适用于流式文件,因为它们具有不确定的 Segment 元素大小。

当然,熟悉你的十六进制编辑器。一旦您开始识别元素类型,这也不算太糟糕!

EBML Viewer

关于video - webm (vp9) 视频流的 header 结构是什么样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77097083/

相关文章:

linux - 将视频编解码器集成到 gstreamer 或 vlc 中

javascript - 视频播放暂停按钮动画

ios - mp4伪流媒体实现服务端&iOS端

android - 为视频流实现 float View

android - 如何以 MPEG-2 TS 输出和 ACC 音频编码格式录制视频

encoding - 不使用 "+/="(加号或等于)字符的 base64 编码?

python - 使用 PyAV 创建的视频长度

javascript - 紫藤背景视频

encoding - 如何在服务器端发送和接收 WebSocket 消息?

iphone - FFmpeg 解码 H264 视频太慢