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

Android 使用MediaCodec编码时,屏幕的三分之二为绿色,android,ios,video,android-mediacodec,Android,Ios,Video,Android Mediacodec,我正在做一个需要在Android上使用OpenGL处理视频的项目。我决定使用MediaCodec,并在微软的帮助下使其正常工作。结果非常好,我让它接收视频,提取轨迹,解码视频轨迹,用OpenGL编辑,然后编码成视频文件 问题是,结果视频可以在Android上播放得很好,但在iOS上,三分之二的屏幕是绿色的 我试图用来自的建议来解决问题,并尝试编码器的不同格式,但问题仍然是一样的 有人能告诉我导致这个问题的原因和解决方法吗 这是编码器的配置 MediaCodec mediaCodec = Med

我正在做一个需要在Android上使用OpenGL处理视频的项目。我决定使用MediaCodec,并在微软的帮助下使其正常工作。结果非常好,我让它接收视频,提取轨迹,解码视频轨迹,用OpenGL编辑,然后编码成视频文件

问题是,结果视频可以在Android上播放得很好,但在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日更新:我在配置编码器和解码器时尝试了不同的分辨率和方向,以检查视频的方向是否存在问题,但输出视频刚刚旋转,绿色问题仍然存在。
我还尝试了编码器的“视频/mp4v es”,结果视频可以在Mac上观看,但iPhone甚至无法播放。

我刚刚解决了这个问题。原因是MediaMuxer,它将h264原始流封装在某种iOS无法理解的容器中。因此,我不再使用MediaMuxer,而是将编码器中的原始h264流写入一个文件,并使用它将其多路复用到mp4文件中。

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

我不确定出了什么问题,但您可以在Grafika(,demo at)中找到一个GLES过滤视频的工作示例。您是使用MediaMuxer将其保存为.mp4格式,还是尝试在iOS上播放原始H.264流?谢谢您的建议,我来看看Grafika。现在我正在使用MediaMuxer将文件保存为.mp4。它可以在任何设备上播放,但除了我的android,其他设备上的问题仍然是一样的。我想知道我在视频方向上是否有任何错误,因为输出视频的工作部分与所需的输出分辨率具有相同的比率,但是在水平方向。12月25日更新:我在配置编码器和解码器时尝试了不同的分辨率和方向,以检查视频的方向是否有问题,但输出视频刚刚旋转,绿色问题仍然存在。我还尝试了编码器的“视频/mp4v es”,结果视频可以在Mac上观看,但iPhone甚至不能播放。@fadden你有什么建议吗?我面临着同样的问题。我使用适用于Android API 18和更新版本的MediaCodec。一些设备上的Android编码视频,例如:华硕,。。。无法在ios、wp中播放。我还尝试了MediaMuxer和mp4parser。但它不起作用。使用MediaCodec和mp4parser的电报也有同样的问题。你能告诉我更多关于你的MediaCodec配置的细节吗?我想我的问题在于MediaCodec。ThanksI遵循电报的开放源代码。这是源代码。你的代码有什么不同吗?@Huydoungtu:我的配置是基于。一切几乎都是一样的,但我没有使用音频和视频编码器的输出为MediaMuxer提供信息,而是使用它们输出到两个独立的文件中,一个用于音频,一个用于视频,然后使用mp4parser@HuyDuongTu:但请注意音频流,音频编码器的原始输出不能用于以后的muxing,在将其写入输出文件之前,您应该对其进行一点修改