2010-08-30 116 views
3

我目前正在寫一個簡單的Theora視頻編碼器,它使用libogg,libvorbis和libtheora復Vorbis和Theora格式流。目前,我可以提交幀的編碼器Theora格式,以及PCM樣品的Vorbis編碼器,通過所產生的數據包的Ogg流(一個用於Theora格式和一個用於Vorbis格式),並得到了頁面。如何使用libogg

程序啓動時,它首先刷新從Theora格式編碼器頭,然後從Vorbis編碼器輸出文件(顯然,兩個流具有唯一的序列號)。然後,我將交錯頁面從兩個流寫入文件。

當寫只是視頻,或只是聲音,我能播放在mplayer的輸出就好了,但是當我試圖寫這兩個,我得到如下:

奧格分路器的錯誤:我們遇見未知的流

我猜我做的是錯的複用。我已經閱讀了Xiph.org上的多路複用流的文檔,並且我看不到我有什麼不同。我似乎無法找到任何的示例代碼這樣做的,短的,通過一個開源編碼器的源(這是我遇到一些麻煩了解)去。任何人都可以解釋如何使用libogg正確地複用流?我正在嘗試在Ubuntu 10.04的C上使用Ubuntu存儲庫中的庫進行此操作。

非常感謝提前!

湯姆

回答

3

好了,任何人誰在讀這篇文章,我有在一定程度上解決了這個問題。

你不應該刷新所有從每個流的頭包 - 只是第一個(設置)數據包,這對於Vorbis和Theora格式默認情況下都有自己的頁面。將其他頭文件包放入它們各自的流中,但不要刷新,直到所有流的設置頁面都寫入文件。

一旦你做到了這一點,儘量保持儘可能緊密同步時間儘可能流(mplayer的給了一些錯誤,我當他們得到太遠了)。在24fps的視頻和44.1 KHz的音頻,1幀應該跨越1837.5音頻樣本(具有PCM音頻,這是7350個字節)。

如果任何人有任何提示/信息,這將是很好聽 - 我從來沒有與音頻/視頻做任何事情之前!

謝謝! 湯姆