2013-10-23 75 views
2

我想寫使用MediaDecoder類的視頻播放器,我碰到它擋住了我的發展問題,MediaCodec和輸出格式

這裏是一個代碼段

extractor = new MediaExtractor(); 
extractor.setDataSource(filename); 

MediaFormat format = extractor.getTrackFormat(i); 
extractor.selectTrack(0); 

MediaCodec decoder = MediaCodec.createDecoderByType(mime); 
decoder.configure(format, null, null, 0); 

decoder.start(); 

ByteBuffer[] inputBuffers = decoder.getInputBuffers(); 
ByteBuffer[] outputBuffers = decoder.getOutputBuffers(); 

Log.d(TAG, " "+decoder.getOutputFormat()); 

問題是輸出格式打印每個設備的變化使其無法打印到Open GL紋理。

有沒有辦法強制解碼器輸出總是相同的格式? 如果否,是否有人知道任何可用於進行轉換的庫?

非常感謝任何見解

回答

4

無法設置解碼器的輸出格式。事實上,你甚至可能不應該檢查它,直到你從dequeueOutputBuffer()收到更新的MediaFormat - 在返回第一個數據塊之前,你會得到一個MediaCodec.INFO_OUTPUT_FORMAT_CHANGED結果。

如果您想從OpenGL ES訪問解碼幀,您應該從SurfaceTexture創建一個Surface,並將其傳遞給解碼器configure()調用。它更高效,並且不需要你知道關於數據格式的任何信息。

例如,請參閱DecodeEditEncodeTest.java CTS test,並特別注意OutputSurface類以及它如何在checkVideoFile()中使用。