2016-02-10 22 views
1

我有一個使用MediaCodec和MediaExtractor的工作解決方案,但6mb MP3的解碼需要15秒+ 15秒的AAC編碼。總共> 30秒。我需要非常快的東西< 10秒。任何人都知道更快捷的解什麼是解碼MP3文件然後在Android上編碼爲AAC的最快方式?

編輯

我的瓶頸是來自Mediacodec本身。他們提供的字節緩衝區太小。當設置MediaFormat到AAC時,InputBytebuffers一次只有4096個字節對我來說太慢了。它適用於流式傳輸,但不適用於文件到文件。

我切換到一個C語言解碼器,在3秒內解碼,而不是15秒。但編碼器仍需要15秒。任何人都有一個C庫AAC編碼器,也可以添加ADTS頭文件?

回答

1

這聽起來像你先解碼完整文件,然後編碼它。如果你同時做這些,也就是說,當你有足夠的解碼器輸出數據爲編碼器提供一個完整的輸入幀並傳入時,它可能會更快。這可以幫助我們實現一些並行性,但我懷疑它有助於獲得你想要的加速。

+0

我這樣做,但我的瓶頸是從Mediacodec本身。他們提供的字節緩衝區太小。一次只有4096個字節對我來說太慢了。我切換到一個C解碼器,在3秒內解碼,而不是15秒。但編碼器仍需要15秒。任何人都有一個C庫aac編碼器? –

+0

這聽起來有點像您正在同步使用MediaCodec API - 在傳遞一個4096字節的緩衝區作爲輸入之後,您是否在傳遞下一個輸入緩衝區之前等待一個輸出緩衝區?您需要儘可能提供儘可能多的輸入緩衝區,並且只會消耗輸出緩衝區,以便從MediaCodec獲得適當的性能 - 請參閱http://stackoverflow.com/a/34940871/3115956以獲取更長的解釋。 – mstorsjo

+0

這是我的編碼器http://pastebin.com/uvCwKjGi的邏輯。當我在ACC中將MediaFormat設置爲Encoder時。我這樣做'inputBuffers = encoder.getInputBuffers();'(因爲我需要API 16)我只有4個輸入緩衝區可用容量爲4096字節。 –

相關問題