Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MediaMuxer android上更改分辨率_Android_Media_Android Mediacodec_Video Encoding_Mediamuxer - Fatal编程技术网

如何在MediaMuxer android上更改分辨率

如何在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

我目前正在使用MediaCodec和MediaMuxer进行视频录制,因为我需要录像机帧使用t多个位置

当前行为:媒体编解码器配置为720x1280分辨率,并且从媒体编解码器添加了媒体多路复用器视频曲目,因此视频输出也包含相同的分辨率720x1280

创建媒体格式

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。