0
我正試圖編寫一個簡單的視頻編碼器,在「表面輸入」模式下使用Android平臺的MediaCodec
類。無法在「表面輸入」模式下使用Android平臺的MediaCodec類
這些是我的追蹤對象的步驟(支承碼遺漏爲簡潔起見):
mediaCodec = MediaCodec::CreateByType(looper, "video/avc", true);
mediaCodec->configure(config, NULL, NULL, CONFIGURE_FLAG_ENCODE);
mediaCodec->createInputSurface(&inputSurface);
mediaCodec->start();
在此之後,我試圖出列從所創建的輸入表面的緩衝液(其是一個IGraphiBufferProducer
界面對象),但它不能與NO_INIT
錯誤:
inputSurface->dequeueBuffer(&slot, &fence, w, h, format, 0);
在ADB日誌中的錯誤信息是:
BufferQueueProducer: [GraphicBufferSource] dequeueBuffer: BufferQueue has no connected producer
任何想法爲什麼緩衝區隊列沒有連接的生產者?我假設MediaCodec
類將處理創建緩衝隊列以及生產者和消費者到隊列的連接。
我正在使用Android API級別26(7.1.2)。我正在使用平臺級庫,因爲我的用例需要訪問GraphicBuffer
對象。
在此先感謝!
編輯:總體思路是:
- 輸入表面&出列緩衝區填充。
- 將已填充的緩衝區排隊回到輸入表面(這可能會觸發表面屬於 to)的媒體編解碼器(視頻編碼器)實例。
- 從媒體編解碼器實例出列輸出緩衝區(包含原始H.264比特流數據),並將其寫入文件。
- 將輸出緩衝區釋放回媒體編解碼器實例。