介绍 android上视频操作,主要有OpenGL、FFmpeg、以及4.1之后的MediaCodec,MediaCodec是Android上一个用来直接访问设备的媒体编解码器的接口,因为有硬件加速的效果,所以使用起来无论是效率,还是耗时,都会比FFmpeg好很多,今天了着重谈谈MediaCodec的使用。
与MediaCodec相关,经常配合一起使用的媒体处理类主要有: MediaExtractor用于音视频分路,和MediaMuxer正好是反过程。MediaFormat用于描述多媒体数据的格式。MediaRecorder用于录像+压缩编码,生成编码好的文件如mp4, 3gpp,视频主要是用于录制Camera preview。MediaPlayer用于播放压缩编码后的音视频文件。AudioRecord用于录制PCM数据。AudioTrack用于播放PCM数据
音视频分离 视频的分离和合成主要是用MediaExtractor和MediaMuxer这两个类,来处理视频中的视频信道和音频信道的拆分和组合。
逻辑大概如下:
1.初始化对象,设置源文件 var extractor = MediaExtractor() extractor.setDataSource(videoPath.absolutePath)
2.获取要追踪的TrackIndex 信道track index //获得信道数 val trackCount = extractor.trackCount var videoTrack = -1 var audioTrack = -1 for (i in 0 until trackCount) { val trackFormat = extractor.getTrackFormat(i) val format = trackFormat.getString(MediaFormat.KEY_MIME) //视频信道 if (format.startsWith("video/")) { videoTrack = i } if (format.startsWith("audio/")) { audioTrack = i } } 打开MediaFormat可以看到所有支持的mime