*由于作者水平限制,文中难免有错误和不恰当之处,望批评指正。

*转载请注明出处:http://www.cnblogs.com/roger-yu/

 

 

=====================================================================================================

Android MediaCodec系列文章:

(一)Android多媒体--MediaCodec 中文API文档

(二)Android MediaCodec 的实例化方法

(三)Android MediaCodec 状态(States)转换分析

(四)Android MediaCodec的数据处理方式分析

=====================================================================================================

 

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:

 

Android 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

相关文章:

  • 2022-12-23
  • 2021-10-21
  • 2021-08-22
  • 2022-12-23
  • 2022-12-23
  • 2021-08-06
  • 2022-12-23
  • 2021-07-15
猜你喜欢
  • 2021-12-26
  • 2022-12-23
  • 2021-04-02
  • 2022-02-27
  • 2021-11-24
  • 2021-11-20
相关资源
相似解决方案