2013-05-10 22 views
1

我有一個基於ffplay的音頻流。它使用ffmpeg 0.11效果很好,但是當我使用ffmpeg 1.0或最新的1.2版本時,音頻似乎被解碼或者奇怪地播放。FFmpeg 1.0 <導致音頻播放問題

從本質上講,它聽起來像花栗鼠與MP3流和aac流,我聽到噸的靜態勉強聽到實際的流,實際的流聽起來很慢。

任何想法可能導致這些類型的問題ffmpeg可能的變化?

發佈了類似問題here但沒有關於發生了什麼的實際答案。據說this code重現相同的問題。

更新1:
我做了從ffplay一步步複製和仍然沒有運氣! :/通道和採樣率看起來是正確的,所以必須有一些內部的東西返回一個奇怪的解碼格式?

+0

它可能是一些api的變化,不是嗎?我猜你使用過這些庫。 0.11和1.0或1.2不能保證彼此兼容,而且很可能不是。也許你應該再次檢查ffplay源,以瞭解使用內部函數的細節。 – av501 2013-05-11 19:35:06

+0

是的,我看了一下ffplay並沒有看到太多變化。我在0.11和1.0之間發佈了ffplay。在那裏發生了一些變化,但我沒有發現打開和使用解碼器有什麼不同。我必須再看一次...... – Jona 2013-05-12 13:12:31

回答

1

pCodecCtx-> request_sample_fmt = AV_SAMPLE_FMT_S16 不會改變行爲!我沒有找到比使用swr_convert將音頻採樣從AV_SAMPLE_FMT_FLT轉換爲AV_SAMPLE_FMT_S16更好的解決方案。

+0

我給你的答案,因爲它正是我最終做的。一開始我很幸運,我的答案奏效,但後來我意識到,用其他格式,問題依然存在。答案是將解碼器返回的PCM數據轉換爲一個Android PCM播放器接受的數據。 – Jona 2013-11-09 00:11:13

1

找到了一個修復...所以最初聽起來像是東西與解碼的原始PCM數據和我的PCM播放器不匹配。我深入瞭解瞭解碼器返回的內容和潛在的差異。事實證明,默認的解碼格式已經從AV_SAMPLE_FMT_S16更改爲AV_SAMPLE_FMT_S16P。解決方法是在打開解碼器之前指定pCodecCtx->request_sample_fmt = AV_SAMPLE_FMT_S16;

有沒有反饋,如果這是一個壞主意?我擔心是否可能存在其他格式和潛在性能問題...