2013-10-31 141 views
5

我製作了一個使用MediaCodec庫的視頻播放器,並且我想添加播放列表功能。我嘗試過兩個MediaCodec實例,以便在兩個連續的視頻之間進行更平滑的過渡,但是這在某些設備(我嘗試過使用氰基的S4)時似乎很危險,但它在S4中與TouchWiz完全一樣代碼在Media Codec聲明中崩潰。這是代碼片段:多個MediaCodec實例

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

MediaFormat format = extractor.getTrackFormat(0); 
String mime = format.getString(MediaFormat.KEY_MIME); 

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

MediaExtractor extractor2 = new MediaExtractor(); 
extractor2.setDataSource(path2); 

MediaFormat format2 = extractor2.getTrackFormat(0); 
String mime2 = format.getString(MediaFormat.KEY_MIME); 

extractor2.selectTrack(0); 
MediaCodec decoder2 = MediaCodec.createDecoderByType(mime2); 
decoder2.configure(format2, null, null, 0); 

,我在S4的TouchWiz得到了異常

E/ACodec(17651): configureCodec multi window instance fail appPid : 17651 
E/ACodec(17651): [OMX.qcom.video.decoder.avc] configureCodec returning error -38 
E/MediaCodec(17651): Codec reported an error. (omx error 0x80001001, internalError -38) 

任何人都可以點我如何正確地做一些這方面的指引?也許不同的線程?我真的很想在不同的視頻之間平滑過渡,但我至少需要它在某些設備上始終如一地工作。

非常感謝

回答

0

您使用的是相同的提取實例FORMAT2: MediaFormat FORMAT2 = >>提取< < .getTrackFormat(0);

您是否能夠同時運行多個MediaExtractor?

+0

該死的,是一個錯字,我編輯,但錯誤依然存在,我確實把它縮小到只有使用android相機拍攝的視頻。 – roimatola

+0

我有類似的問題。你解決了嗎? – pstoppani

+0

@roimatola我很好奇你是否曾經爲此找到過解決方案? –

4

根據我的經驗,當沒有足夠的資源時會出現您的問題,以便創建相同編碼解碼器的兩個實例。舉例來說,當我嘗試配置兩個1080p,h264解碼器並行,但擁有一個720p和一個1080p或兩個720p解碼器時,我在S3上運行得很好。你可以做什麼,雖然沒有解決方案是完美的:

  • 最明顯的一個,在這些情況下,等待第一個編解碼器來完成,然後才配置的第二個。

  • 在解碼器列表中搜索同一文件的替代解碼器。這可能會在某些設備上工作,但別人沒有或只是找到一個SW解碼器可能無法解碼的實時(如S3的情況下)