android – 使用MediaCodec编码时,三分之二的屏幕为绿色

我正在开发一个需要在
Android上使用OpenGL处理​​视频的项目.我决定使用MediaCodec,我设法让它在
ExtractDecodeEditEncodeMuxTest的帮助下工作.结果非常好,我有它接收视频,提取曲目,解码视频轨道,使用OpenGL编辑,并编码为视频文件.

问题是结果视频可以在Android上播放,但是当涉及iOS时,三分之二的屏幕是绿色的.

我尝试用here,herehere的建议来解决,为编码器试验不同的格式,但问题仍然是一样的.

有人可以告诉我导致这个问题的原因以及如何解决这个问题吗?

This is the video when it’s played on iOS

这是编码器的配置

MediaCodec mediaCodec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 540, 960);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 2000000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, CodecCapabilities.COLOR_FormatSurface);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

更新
我想知道我是否在视频方向上有任何错误,因为输出视频的工作部分与所需的输出分辨率具有相同的比例,但是在水平方向上.输入是垂直记录的,所需的输出也是如此.
以下是解码器配置的代码:

inputFormat.setInteger(MediaFormat.KEY_WIDTH, 540);
inputFormat.setInteger(MediaFormat.KEY_HEIGHT, 960);
inputFormat.setInteger("rotation-degrees", 90);

String mime = inputFormat.getString(MediaFormat.KEY_MIME);
MediaCodec decoder = MediaCodec.createDecoderByType(mime);
decoder.configure(inputFormat, surface, null, 0);

12月25日更新:在配置编码器和解码器时,我尝试了不同的分辨率和方向,以检查视频的方向是否有问题,但输出视频刚刚旋转,绿色问题仍然存在.
我还为编码器尝试了“video / mp4v-es”,结果视频可以在Mac上观看,但iPhone甚至无法播放.

最佳答案 我刚解决了.原因是MediaMuxer,它将h264原始流包装在iOS无法理解的某种容器中.因此,我不是使用MediaMuxer,而是将原始h264流从编码器写入文件,并使用
mp4parser将其复制到mp4文件中.

点赞