Android-将位图编码为AVC(H.264)MP4在某些设备上生成黑白视频(编解码器OMX.MTK.VIDEO.ENCODER.AVC)

时间:2019-11-14 23:17:05

标签: android video h.264 mediacodec mediamuxer

我正在尝试从mimap类型为“ video / avc”的位图数组中生成MP4视频。 我正在使用MediaMuxer和MediaCodec。

在某些设备上,它可以完美运行(例如:Nexus 5x,Android 8.1,编解码器OMX.qcom.video.encoder.avc)。 在其他设备(例如:Motorola E4,Android 7.1,编解码器OMX.MTK.VIDEO.ENCODER.AVC)和我尝试过的所有模拟器(Android 7-8-9,编解码器OMX.google.h264.encoder)上,产生的MP4是黑白的。

我已经检查了编解码器支持的颜色格式,它们很好:COLOR_FormatYUV420Flexible,COLOR_FormatYUV420Planar,COLOR_FormatYUV420SemiPlanar,COLOR_FormatSurface

我还检查了从ARGB到YUV的转换,方法是将YUV帧保存在设备本地存储中为JPEG(使用YuvImage.compressToJpeg)并手动检查。他们看起来应该像他们应该的一样。

我尝试更改U和V的顺序。本地存储中的图像会更改颜色(例如,橙色变为蓝色),但是生成的视频仍然是黑白的。

我尝试将编解码器级别设置为AVCLevel5,没有任何变化。

MediaFormat配置:

MediaFormat mediaFormat = MediaFormat.createVideoFormat(MIME_TYPE, mWidth, mHeight);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, I_FRAME_INTERVAL);
mediaFormat.setInteger(MediaFormat.KEY_LEVEL, MediaCodecInfo.CodecProfileLevel.AVCLevel5);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

有什么我想念的吗?在这些设备上生成黑白视频的原因(和解决方案)是什么?

0 个答案:

没有答案