当前位置 : 主页 > 手机开发 > android >

Android开发 MediaExtractor详解

来源:互联网 收集:自由互联 发布时间:2021-06-11
前言 MediaExtractor字母意思是多媒体提取器,它在Android的音视频开发里主要负责提取视频或者音频中的信息和数据流. 可以与 MediaCodec 配合创建自己的视频播放器或者音频播放器. 获取轨道

前言

  MediaExtractor字母意思是多媒体提取器,它在Android的音视频开发里主要负责提取视频或者音频中的信息和数据流. 可以与MediaCodec配合创建自己的视频播放器或者音频播放器.

 

获取轨道

  在一个多媒体视频里,可以包含多个数据流.我们需要先获取需要的数据轨道编号,再来后续的操作.如下代码展示了获取轨道的方法.

private void trackDemo(){
        mFile = new File(getExternalCacheDir(),"demo.mp4");
        if (!mFile.exists()){
            Log.e(TAG, "mp4文件不存在");
            return;
        }
        MediaExtractor extractor = new MediaExtractor();//实例一个MediaExtractor
        try {
            extractor.setDataSource(mFile.getAbsolutePath());//设置添加MP4文件路径
        } catch (IOException e) {
            e.printStackTrace();
        }
        int count = extractor.getTrackCount();//获取轨道数量
        Log.e(TAG, "轨道数量 = "+count);
        for (int i = 0; i < count; i++){
            MediaFormat mediaFormat = extractor.getTrackFormat(0);
            Log.e(TAG, i+"编号通道格式 = "+mediaFormat.getString(MediaFormat.KEY_MIME));
        }

    }

上面的代码已经注释的很清楚了.注意! 实际项目里建议将这些操作放到线程中.

结果:

2019-08-19 16:49:18.514 17742-17742/demo.yt.com.demo E/测试Demo: count = 2
2019-08-19 16:49:18.515 17742-17742/demo.yt.com.demo E/测试Demo: 0编号通道格式 = video/avc
2019-08-19 16:49:18.515 17742-17742/demo.yt.com.demo E/测试Demo: 1编号通道格式 = video/avc

提取视频数据信息

从MediaFormat里获取数据信息

在上面的获取轨道的代码里我们,可以看到使用MediaFormat可以获取当前轨道的编码格式.除了获取编码格式我们还能获取到很多其他信息,这里我们将会一一列出:

 

提取数据流

网友评论