【问题标题】:How to multiplex Vorbis and Theora streams using libogg如何使用 libogg 复用 Vorbis 和 Theora 流
【发布时间】:2011-04-05 20:25:23
【问题描述】:

我目前正在编写一个简单的 Theora 视频编码器,它使用 libogg、libvorbis 和 libtheora。目前,我可以将帧提交给 Theora 编码器,将 PCM 样本提交给 Vorbis 编码器,将生成的数据包传递给 Ogg 流(一个用于 Theora,一个用于 Vorbis)并输出页面。

当程序启动时,它首先从 Theora 编码器刷新标头,然后从 Vorbis 编码器刷新到输出文件(显然,两个流都有唯一的序列号)。然后,我从两个流中将交错的页面写入文件。

当只写视频或只写音频时,我可以在 mplayer 中播放输出就好了,但是当我尝试同时写两者时,我得到以下信息:

Ogg 解复用器错误:我们遇到了未知流

我猜我做错了多路复用。我已经阅读了 Xiph.org 上多路复用流的文档,但我看不出我的不同之处。除了通过开源编码器的源代码(我在理解上有些困难)之外,我似乎找不到任何示例代码。谁能解释如何使用 libogg 正确地多路复用流?我正在尝试使用 Ubuntu 存储库中的库在 Ubuntu 10.04 上的 C 中执行此操作。

非常感谢!

汤姆

【问题讨论】:

    标签: c video audio ogg-theora multiplexing


    【解决方案1】:

    好的,对于正在阅读本文的任何人,我已经在某种程度上解决了它。

    您不应该刷新每个流中的所有标头数据包 - 只是第一个(设置)数据包,默认情况下 Vorbis 和 Theora 会获取自己的页面。将其他标头数据包放入各自的流中,但在所有流中的设置页面都写入文件之前不要刷新。

    完成此操作后,请尝试使流尽可能保持同步(当它们离得太远时,mplayer 会为我提供一些错误)。在 24fps 视频和 44.1 KHz 音频下,1 帧应跨越 1837.5 个音频样本(对于 PCM 音频,这是 7,350 字节)。

    如果其他人有任何提示/信息,很高兴听到 - 我以前从未对音频/视频做过任何事情!

    谢谢! 汤姆

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 2019-04-04
      • 2016-02-25
      • 2014-08-28
      • 2011-08-08
      • 2019-11-23
      相关资源
      最近更新 更多