我目前正在编写一个简单的 Theora 视频编码器,它使用 libogg、libvorbis 和 libtheora。目前,我可以将帧提交给 Theora 编码器,将 PCM 样本提交给 Vorbis 编码器,将生成的数据包传递给 Ogg 流(一个用于 Theora,一个用于 Vorbis)并输出页面。
当程序启动时,它首先从 Theora 编码器刷新标头,然后从 Vorbis 编码器刷新到输出文件(显然,两个流都有唯一的序列号)。然后,我将两个流中的交错页面写入文件。
当只写视频或只写音频时,我可以很好地在 mplayer 中播放输出,但是当我尝试同时写两者时,我得到以下信息:
Ogg demuxer 错误:我们遇到了未知的流
我猜我做错了多路复用。我已经阅读了 Xiph.org 上多路复用流的文档,但我看不出我的不同之处。我似乎找不到任何示例代码来执行此操作,除非通过开源编码器的源代码(我很难理解)。谁能解释如何使用 libogg 正确地多路复用流?我正在尝试使用 Ubuntu 存储库中的库在 Ubuntu 10.04 上的 C 中执行此操作。
提前谢谢了!
汤姆