如何在MediaMuxer android上更改分辨率
我目前正在使用MediaCodec和MediaMuxer进行视频录制,因为我需要录像机帧使用t多个位置 当前行为:媒体编解码器配置为720x1280分辨率,并且从媒体编解码器添加了媒体多路复用器视频曲目,因此视频输出也包含相同的分辨率720x1280 创建媒体格式如何在MediaMuxer android上更改分辨率,android,media,android-mediacodec,video-encoding,mediamuxer,Android,Media,Android Mediacodec,Video Encoding,Mediamuxer,我目前正在使用MediaCodec和MediaMuxer进行视频录制,因为我需要录像机帧使用t多个位置 当前行为:媒体编解码器配置为720x1280分辨率,并且从媒体编解码器添加了媒体多路复用器视频曲目,因此视频输出也包含相同的分辨率720x1280 创建媒体格式 MediaFormat mVideoFormat = MediaFormat.createVideoFormat(VIDEO_MIME_TYPE, 720, 1280); mVideoFormat.setInteger(Med
MediaFormat mVideoFormat = MediaFormat.createVideoFormat(VIDEO_MIME_TYPE, 720, 1280);
mVideoFormat.setInteger(MediaFormat.KEY_BIT_RATE, 1024*1024);
mVideoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
mVideoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 3);
mVideoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
mMediaCodec = MediaCodec.createByCodecName(videoCodecInfo.getName());
mMediaCodec.setVideoScalingMode(MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mMediaCodec.configure(mVideoFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mInputSurface = mMediaCodec.createInputSurface();
从媒体格式创建编解码器
MediaFormat mVideoFormat = MediaFormat.createVideoFormat(VIDEO_MIME_TYPE, 720, 1280);
mVideoFormat.setInteger(MediaFormat.KEY_BIT_RATE, 1024*1024);
mVideoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
mVideoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 3);
mVideoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
mMediaCodec = MediaCodec.createByCodecName(videoCodecInfo.getName());
mMediaCodec.setVideoScalingMode(MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mMediaCodec.configure(mVideoFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mInputSurface = mMediaCodec.createInputSurface();
以及从
if (outputBufferIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
MediaFormat mediaFormat = mMediaCodec.getOutputFormat();
mTrackIndex = mMediaMuxer.addVideoTrack(mediaFormat);
mMediaMuxer.start();
}
期望输出我始终希望媒体编解码器在720x1280上运行,但我希望媒体多路复用器以不同的分辨率(如720x1280或低于720x1280的任何其他分辨率)写入视频
我想实现的总体目标是,我可以将MediaCodec配置为尽可能高的分辨率,并且在运行时我可以以不同的分辨率并行创建多个视频。请参阅:@MorrisonChang链接上建议的代码在录制完成后执行,我想在将帧直接写入muxer时执行,不希望它在录制后完成,而是需要在录制时在运行时完成。我想你误解了MediaMuxer的实际操作,它是Muxing,而且只有Muxing。看看莫里森昌提到的SO帖子中法登的答案。您想要做的只是使用多个MediaCodec实例来实现。你从Morrisonchange得到的帖子是一个很好的起点,只要将文件中的输入替换为其他来源的输入,你就可以开始了。但是,如果您计划只针对较新的设备,请查看如何异步使用MediaCodec。请参阅:@MorrisonChang链接上建议的代码在录制完成后执行此操作,我希望在将帧直接写入muxer时执行此操作,不希望在录制完成后执行此操作,我想你误解了MediaMuxer实际上在做什么,它是Muxing,而且只有Muxing。看看莫里森昌提到的SO帖子中法登的答案。您想要做的只是使用多个MediaCodec实例来实现。你从Morrisonchange得到的帖子是一个很好的起点,只要将文件中的输入替换为其他来源的输入,你就可以开始了。但是,如果您计划只针对较新的设备,请查看如何异步使用MediaCodec。