MediaExtractor&MediaMuxer API解析和封装 mp4 文件

一个音视频文件是由音频和视频组成的,我们可以通过MediaExtractor、MediaMuxer把音频或视频给单独抽取出来,抽取出来的音频和视频能单独播放

一、MediaExtractor API

MediaExtractor主要用于多媒体文件的音视频数据的分离。
该类主要用于音视频混合数据的分离,接口比较简单,首先要通过setDataSource(String path)函数设置数据源,数据源可以是本地文件地址,也可以使用HTTP协议的网络码流地址。
然后,可以通过下面的代码块,来获取码流的详细信息,如:MimeType,分辨率、编码格式、码率、帧率等等。

主要API介绍:

  • setDataSource(String path):即可以设置本地文件又可以设置网络文件
  • getTrackCount():得到源文件通道数
  • getTrackFormat(int index):获取指定(index)的通道格式
  • getSampleTime():返回当前的时间戳
  • readSampleData(ByteBuffer byteBuf, int offset):把指定通道中的数据按偏移量读取到ByteBuffer中;
  • advance():读取下一帧数据
  • release(): 读取结束后释放资源

MediaMuxer API

MediaMuxer的作用是生成音频或视频文件;还可以把音频与视频混合成一个音视频文件。

主要API介绍:

  • MediaMuxer(String path, int format):path:输出文件的名称 format:输出文件的格式;当前只支持MP4格式;
  • addTrack(MediaFormat format):添加通道;我们更多的是使用MediaCodec.getOutpurForma()或Extractor.getTrackFormat(int index)来获取MediaFormat;也可以自己创建;
  • start():开始合成文件
    writeSampleData(int trackIndex, ByteBuffer byteBuf, MediaCodec.BufferInfo bufferInfo):把ByteBuffer中的数据写入到在构造器设置的文件中;
  • stop():停止合成文件
  • release():释放资源

示例

使用MediaExtractor&MediaMuxer API提取input.mp4文件中的视频数据,生成除去音频数据之后的纯视频output.mp4文件。
源码地址:https://github.com/Xiaoben336/AnalysisAndPackageMP4.git

你可能感兴趣的:(MediaExtractor&MediaMuxer API解析和封装 mp4 文件)