gpt4 book ai didi

c - 如何使用 libogg 多路复用 Vorbis 和 Theora 流

转载 作者:太空狗 更新时间:2023-10-29 15:33:53 25 4
gpt4 key购买 nike

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

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

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

Ogg 分离器错误:我们遇到了一个未知流

我猜我做错了多路复用。我已经通读了 Xiph.org 上关于多路复用流的文档,但看不出有什么不同。我似乎无法找到任何示例代码来执行此操作,除非通过开源编码器的源代码(我在理解时遇到了一些麻烦)。谁能解释如何使用 libogg 正确地多路复用流?我正在尝试在 Ubuntu 10.04 上使用 Ubuntu 存储库中的库在 C 中执行此操作。

非常感谢!

汤姆

最佳答案

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

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

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

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

谢谢!汤姆

关于c - 如何使用 libogg 多路复用 Vorbis 和 Theora 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3602101/

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