Android MediaCodec 的實例化方法


*由於作者水平限制,文中難免有錯誤和不恰當之處,望批評指正。

*轉載請注明出處:http://www.cnblogs.com/roger-yu/

MediaCodec的實例化方法主要有兩種:

1、使用方法createByCodecName(String)----根據特定的MediaFormat創建

  這種方法使用的前提是你必須知道要實例化的codec的確切的名字。這種方法使用時,通常會利用MediaCodecList類來獲取相關的codec name信息。

  例子:在對一個file進行解碼時,首先你可以調用MediaExtractor.getTrackFormat方法獲得期望的Format,如有需要可以調用MediaFormat.setFeatureEnabled方法添加新特性;然后調用MediaCodecList.findDecoderForFormat方法得到可以處理指定media format的codec的name;最后根據得到的codec name並調用createByCodecName(String)方法實例化需要的MediaCodec。

  注意:在Android5.0系統上,使用MediaCodecList.findDecoder/EncoderForFormat方法時,參數MediaFormat中不能包含有frame rate的特性。可以使用format.setString(MediaFormat.KEY_FRAME_RATE, null)清除已存在的frame rate特性。

2、使用方法createDecoderByType(String)/createEncoderByType(String)---根據指定的MIME type創建

  根據指定的MIME type來創建codec。

  注意:使用這種方法創建的codec有可能不能處理期望media format的數據,所有最好使用第一種方法。

 

下面給出一個例子,當我們想創建一個 video decoder 時,可以采用如下方式實例化 MediaCodec:

 

 1 MediaCodec decoder = null;
 2 MediaExtractor extractor = new MediaExtractor();
 3 extractor.setDataSource(...);
 4 int numTracks = extractor.getTrackCount();
 5 for (int i = 0; i < numTracks; ++i) {
 6     MediaFormat format = extractor.getTrackFormat(i);
 7     String mime = format.getString(MediaFormat.KEY_MIME);
 8     if (mime.startsWith("video/")) {
 9         
10         // method-1
11         format.setFeatureEnabled(...); // Inject any specific features
12         MediaCodecList codecList = new MediaCodecList(MediaCodecList.ALL_CODECS);
13         String decoderName = codecList.findDecoderForFormat(format);
14         decoder = MediaCodec.createByCodecName(decoderName);
15         ...
16         
17         // method-2
18         decoder = MediaCodec.createDecoderByType(mime);
19         ...
20     }
21 }
View Code

 

 

創建安全的解碼器(Creating secure decoders)

  在Android 4.4(KITKAT_WATCH)及之前版本,安全的編解碼器沒有被列在MediaCodecList中,但是仍然可以在系統中使用。安全編解碼器只能夠通過名字進行實例化,其名字是在常規編解碼器的名字后附加.secure標識(所有安全編解碼器的名字都必須以.secure結尾),調用createByCodecName(String)方法創建安全編解碼器時,如果系統中不存在指定名字的編解碼器就會拋出IOException異常。

  從Android 5.0(LOLLIPOP)及之后版本,你可以在media format中使用FEATURE_SecurePlayback屬性來創建一個安全編解碼器。

 

 

微信掃一掃,關注玖零日記,獲取更多相關資訊源碼 -- 雖無面朝大海,依舊春暖花開

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM