簡體   English   中英

如何使用libogg復用Vorbis和Theora流

[英]How to multiplex Vorbis and Theora streams using libogg

我目前正在編寫一個簡單的Theora視頻編碼器,它使用libogg,libvorbis和libtheora。 目前,我可以向Theora編碼器提交幀,並將PCM樣本提交給Vorbis編碼器,將生成的數據包傳遞給Ogg流(一個用於Theora,一個用於Vorbis)並獲取頁面。

程序啟動時,它首先從Theora編碼器刷新標頭,然后從Vorbis編碼器刷新到輸出文件(顯然,兩個流都有唯一的序列號)。 然后,我從兩個流中將交錯頁面寫入文件。

當只寫視頻或音頻時,我能夠很好地回放mplayer中的輸出,但是當我嘗試寫兩個時,我得到以下內容:

Ogg demuxer錯誤:我們遇到了一個未知的流

我猜我正在做多路復用錯誤。 我已經閱讀了Xiph.org上的多路復用流文檔,我看不出我的不同之處。 我似乎無法找到任何示例代碼來做這件事,而不是通過開源編碼器的來源(我有一些麻煩的理解)。 是否有人能夠解釋如何使用libogg正確地多路復用流? 我正在使用Ubuntu存儲庫中的庫在Ubuntu 10.04上的C中嘗試這樣做。

提前謝謝了!

湯姆

好吧,對於正在讀這篇文章的人來說,我在某種程度上解決了這個問題。

您不應該清除每個流中的所有標頭數據包 - 只是第一個(設置)數據包,Vorbis和Theora默認情況下會獲取自己的頁面。 將其他標頭數據包放入各自的流中,但在所有流的設置頁面都寫入文件之前不要刷新。

一旦你完成了這個,試着保持流盡可能緊密同步(當他們太遠時,mplayer給我一些錯誤)。 在24fps視頻和44.1KHz音頻時,1幀應跨越1837.5個音頻樣本(使用PCM音頻,這是7,350字節)。

如果其他人有任何提示/信息,那么聽聽會很好 - 我以前從未做過音頻/視頻的任何事情!

謝謝! 湯姆

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM