前言 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可以获取当前轨道的编码格式.除了获取编码格式我们还能获取到很多其他信息,这里我们将会一一列出: