zoukankan      html  css  js  c++  java
  • 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属性来创建一个安全编解码器。

    微信扫一扫,关注玖零日记,获取更多相关资讯源码 -- 虽无面朝大海,依旧春暖花开

  • 相关阅读:
    《舌尖上的中国》精彩故事
    5年前的笔试题目
    遍历物理模型中的所有表,将表名、表代码、字段名、字段代码全部由小写改成大写
    MongoDB下载文件 百度盘共享
    认识MEAN开发框架[转]
    智能油田
    排课相关参数设置
    spring获取所有被装配类工具
    oracle常用sql集锦
    关于使用easyUI遇到过的一些坑
  • 原文地址:https://www.cnblogs.com/roger-yu/p/5660721.html
Copyright © 2011-2022 走看看