<返回更多

Android音视频开发之MediaMuxer

2022-09-22  今日头条  音视频开发老舅
加入收藏

Android中,简单的说可以使用MediaMuxer来封装编码后的视频流和音频流到mp4容器中,MediaMuxer从api18开始提供,可以封装编码后的视频流和音频流到视频文件中。

目前MediaMuxer支持的文件输出格式包括MP4,webm和3gp:

格式

函数

构造函数

构造函数

构造函数

说明

MediaMuxer(String path, int format)

path:用于存放合成的文件的路径,不能为null;format:输出的文件的格式,OutputFormat中的常量标识。

MediaMuxer(FileDescriptor fd, int format)

Constructor.

方法

返回值

方法名

说明

int

addTrack(MediaFormat format)

添加的格式

void

release()

主动释放资源

void

setLocation(float latitude, float longitude)

Set and store the geodata (latitude and longitude) in the output file.

void

setOrientationHint(int degrees)

Sets the orientation hint for output video playback.

void

start()

Starts the muxer.

void

stop()

S暂停

void

writeSampleData(int trackIndex, ByteBuffer byteBuf, MediaCodec.BufferInfo bufferInfo)

Writes an encoded sample into the muxer.

 

使用过程介绍:

1.生成MediaMuxer对象
通过new MediaMuxer(String path, int format)指定视频文件输出路径和文件格式:

MediaMuxer mMediaMuxer = new MediaMuxer(mOutputVideoPath,
MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);

2.addTrack
addTrack(MediaFormat format),添加媒体通道,传入MediaFormat对象,通常从MediaExtractor或者MediaCodec中获取,也可以自己创建,后面会有文章说明。
addTrack会返回trackindex,这个index后面会用到。

//开始编码 就会调用一次
MediaFormat outputFormat = mMediaCodec.getOutputFormat();
//配置封装器
// 增加一路指定格式的媒体流 视频
index = mMediaMuxer.addTrack(outputFormat);

3.调用start函数

MediaMuxer.start();

4.写入数据
调用
MediaMuxer.writeSampleData()向mp4文件中写入数据了。每次只能添加一帧视频数据或者单个Sample的音频数据,需要BufferInfo对象作为参数。
BufferInfo.size 必须填入数据的大小
BufferInfo.flags 需要给出是否为同步帧/关键帧

BufferInfo.presentationTimeUs 必须给出正确的时间戳,注意单位是 us,第二次getSampleTime()和首次getSampleTime()的时间差。

//输出缓冲区
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
//MediaCodec下节课介绍
int status = mMediaCodec.dequeueOutputBuffer(bufferInfo, 10_000);
//index是addTrack(outputFormat)返回的
mMediaMuxer.writeSampleData(index, outputBuffer, bufferInfo);

5.释放关闭资源
结束写入后关闭以及释放资源:

MediaMuxer.stop();
MediaMuxer.release();

总结:

MediaMuxer基本使用我们学完了,主要是结合MediaCodec一起来使用,后面我们会在来学习MediaCodec来一起使用,来完成编码录制功能。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>