簡體   English   中英

C/C++:流式 MP3

[英]C/C++: Streaming MP3

在 C++ 程序中,我獲得了多個 PCM 數據塊,目前我正在使用libmp3lame將這些數據編碼為 MP3 文件。 PCM 塊一個接一個地產生。 但是,我不想等到 PCM 數據流完成,而是希望盡早將數據編碼為多個 MP3 塊,以便客戶端可以播放或將這些片段附加在一起。

據我了解,MP3 文件由幀組成,文件可以沿幀拆分並單獨發布。 此外,不需要提前提供長度信息,因此該格式適合流式傳輸。 但是,當我使用libmp3lame從部分數據生成 MP3 文件時,該產品在連接在一起后無法被音頻播放器解釋。 我停用了位存儲庫,因此,我希望幀是獨立的。

基於這篇文章,我編寫了一個 Python 腳本,用於從 MP3 文件中提取和列出幀。 我通過首先收集整個 PCM 數據然后應用libmp3lame生成了一個帶有libmp3lame的 MP3 文件。 然后,我從這個文件中取出前 n 幀並將它們放入另一個文件中。 但結果也將無法播放。

如何僅編碼音頻的塊,哪個庫適合於此以及塊的最小大小是多少?

我檢查了lame的源代碼,文件lame_main.c幫助我找到了解決方案。 該文件實現了蹩腳的命令行實用程序,該實用程序還可以對多個 wav 文件進行編碼,因此它們可以無間隙地附加到單個 mp3 文件中。

我的錯誤是每次調用我的encode函數時都初始化 lame,因此,為每個新段初始化 lame。 這會導致輸出 mp3 出現短暫中斷。 相反,將 lame 初始化一次並將其重新用於后續調用已經解決了問題。 此外,我還打電話lame_init_bitstream在開始encode和使用lame_set_nocap_currentindexlame_set_nogap_total適當。 現在,輸出片段可以無縫組合。

暫無
暫無

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

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