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

时间:2015-12-16 03:29:39

标签: android ios video mediacodec

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

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

我尝试使用hereherehere的建议来解决,为编码器尝试不同的格式,但问题仍然相同。

有人可以告诉我导致此问题的原因以及解决方法吗?

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甚至无法播放。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我现在知道答案:它与fps范围有关。我改变了我的相机参数和媒体编解码器上的fps速率,突然它起作用了!