### 前言
在`Android`开发过程中,我们偶尔会遇到需要从一个`mp4`视频文件中提取出`mp3`音频用于单独播放的需求。这里我封装了一个工具类——`SplitMediaFile`。此类可用于从一个`有声mp4视频文件`中提取出`无声mp4视频文件`和`mp3音频`文件。下面就来学习下它的使用吧
今天涉及内容:
1. 视频分离基础
2. 用户权限
3. SplitMediaFile方法简介
4. SplitMediaFile 在 Activity 中的使用
5. 效果图和项目结构图
来波生成的文件图
![](/contentImages/image/20210315/HZALKwZapJfABO7IQ7s.png)
#### 一. 视频分离基础
##### 1.1 MediaExtractor
`MediaExtractor`可用于分离视频文件的音轨和视频轨道。用`selectTrack`方法选中 `视频/音频` 轨道,然后用`readSampleData`读出数据,就可以得到一个没有声音的视频或者一个音频。
##### 1.2 MediaFormat
`MediaFormat`封装了`Media data`的描述信息,通过描述信息可以分辨`Meida data` 是一个音频还是视频。描述信息是一个键值对,可以通过`MediaFormat`的`getXX`函数获取。
通过`String mime = mediaFormat.getString(MediaFormat.KEY_MIME);`可以获得视频中分离出的轨道类型,其中常见的`mime`类型多媒体格式如下(以audio开头的是音频,以video开头的是视频):
```
“video/x-vnd.on2.vp8” - VP8 video (i.e. video in .webm)
“video/x-vnd.on2.vp9” - VP9 video (i.e. video in .webm)
“video/avc” - H.264/AVC video
“video/mp4v-es” - MPEG4 video
“video/3gpp” - H.263 video
“audio/3gpp” - AMR narrowband audio
“audio/amr-wb” - AMR wideband audio
“audio/mpeg” - MPEG1/2 audio layer