FFMPEG之解碼MP3時報錯Header missing

        最近一個項目是做環形四麥智能音箱,使用的是思必馳的語音服務,在進行TTS轉換時,思必馳text轉sppech的音頻流是MP3編碼格式的,而我的設備端要播放的音頻是PCM格式,所以需要進行MP3轉PCM之後再進行播放。剛開始是基於Madplay工具實現了轉碼功能。雖然功能實現了,但是由於libmad是在回調函數output中給出轉碼後的數據,不方便在我代碼中進行邏輯控制,而且這個項目平臺SDK已經集成了FFMPEG庫,所以想到了換用FFMPEG來實現轉碼。但在使用過程中碰到如下問題:

        第一次MP3流轉換時可以正常播放,第二次轉換時,av_parser_parse2()接口返回的一幀數據長度不對,導致報錯:[mp3 @ 0x7f64000ae0] Header missing

現象是成功轉碼一條TEXT之後,下一條就開始報錯。猜想應該是第一條MP3數據轉換完成之後,沒有正常通知解碼器“數據結束”。

於是增加一次“數據後處理”,即在轉碼完成後,通過avcodec_send_packet發送一次空數據給解碼器:

增加這一步操作之後,就不再報Header missing的錯誤了,播放正常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章