2014-02-25 55 views

回答

1

MediaCodec API已經是異步,你在一個方法提交輸入數據和檢查數據準備在另一個

+0

謝謝!但是,似乎如果我想編碼視頻和音頻,我需要爲MediaCodec創建兩個實例。他們怎麼可能是異步? –

+1

音頻編碼是在CPU上完成的(我不知道任何帶有hw音頻編碼器的設備),視頻編碼是在GPU上完成的,所以即使在這裏他們也沒有競爭。此外,所有現代芯片都有多個內核,因此它們可以並行執行多個作業。異步意味着您將任務提交給編解碼器,並且所有作業都在內部線程中完成,因此您的調用不會被阻止,並且您可以在應用中執行其他一些工作,您只需在內部作業完成時從編解碼器獲得結果=例如幀編碼和編解碼器返回有效的結果dequeueOutputBuffer – Marlon

+0

謝謝。所以在這種情況下,我可以使用MediaCodec來編碼音頻。然後我向MediaMuxer提供音頻和視頻,只要我提供它們異步,結果就會很好。對? –

0

不知道異步任務之間的任何定義的通信機制。但其中一個Async任務可以將需要傳遞給一個公共對象的數據寫入其中,另一個AsyncTask可以定期輪詢它。

0

您可以在第一的AsyncTask的onPostExecute(結果)推出第二的AsyncTask

+0

謝謝! @ user2689294我檢查了它,它似乎應該工作,因爲它可以返回數據到主線程。但數據是按框架刷新的,你有什麼想法如何解決這個問題? –

相關問題