我想單獨捕獲音頻數據和視頻數據,並進行編碼/混流成.mp4檔案。對於音頻錄製和視頻編碼都是耗時的工作,我爲他們打開了兩個AsyncTasks。如何從一個的AsyncTask將數據發送到另一個的AsyncTask?[視頻系統]
這是問題所在,我需要錄音任務的數據發送到視頻編碼任務。但是我沒有找到關於AsynTasks之間溝通的東西。
誰能給我一個提示?謝謝!
我想單獨捕獲音頻數據和視頻數據,並進行編碼/混流成.mp4檔案。對於音頻錄製和視頻編碼都是耗時的工作,我爲他們打開了兩個AsyncTasks。如何從一個的AsyncTask將數據發送到另一個的AsyncTask?[視頻系統]
這是問題所在,我需要錄音任務的數據發送到視頻編碼任務。但是我沒有找到關於AsynTasks之間溝通的東西。
誰能給我一個提示?謝謝!
MediaCodec API已經是異步,你在一個方法提交輸入數據和檢查數據準備在另一個
不知道異步任務之間的任何定義的通信機制。但其中一個Async任務可以將需要傳遞給一個公共對象的數據寫入其中,另一個AsyncTask可以定期輪詢它。
您可以在第一的AsyncTask的onPostExecute(結果)推出第二的AsyncTask
謝謝! @ user2689294我檢查了它,它似乎應該工作,因爲它可以返回數據到主線程。但數據是按框架刷新的,你有什麼想法如何解決這個問題? –
謝謝!但是,似乎如果我想編碼視頻和音頻,我需要爲MediaCodec創建兩個實例。他們怎麼可能是異步? –
音頻編碼是在CPU上完成的(我不知道任何帶有hw音頻編碼器的設備),視頻編碼是在GPU上完成的,所以即使在這裏他們也沒有競爭。此外,所有現代芯片都有多個內核,因此它們可以並行執行多個作業。異步意味着您將任務提交給編解碼器,並且所有作業都在內部線程中完成,因此您的調用不會被阻止,並且您可以在應用中執行其他一些工作,您只需在內部作業完成時從編解碼器獲得結果=例如幀編碼和編解碼器返回有效的結果dequeueOutputBuffer – Marlon
謝謝。所以在這種情況下,我可以使用MediaCodec來編碼音頻。然後我向MediaMuxer提供音頻和視頻,只要我提供它們異步,結果就會很好。對? –