Android MediaCodec编码的视频在底部有绿色条,色度变差

Android MediaCodec编码的视频在底部有绿色条,色度变差,android,encoding,opengl-es,android-mediacodec,grafika,Android,Encoding,Opengl Es,Android Mediacodec,Grafika,我从开始了一个项目,并对其进行了修改。我有一个框架,与原始框架没有太大区别,它可以从相机中捕获预览,并在同一时间以不同的分辨率将其连续编码为视频 用于编码的MediaCodec配置为使用COLOR_FormatSurface,以便我们能够使用GLES渲染到使用getInputSurface查询的曲面 媒体格式设置为MIME类型视频/avc 对于大多数手机来说,这种设置非常有效 但对于一些手机,编码后的视频的色度值略微倾斜,底部有一个绿色条 目前,编码器表面的分辨率为640x360。 要渲染到曲面

我从开始了一个项目,并对其进行了修改。我有一个框架,与原始框架没有太大区别,它可以从相机中捕获预览,并在同一时间以不同的分辨率将其连续编码为视频

用于编码的MediaCodec配置为使用COLOR_FormatSurface,以便我们能够使用GLES渲染到使用getInputSurface查询的曲面

媒体格式设置为MIME类型视频/avc

对于大多数手机来说,这种设置非常有效

但对于一些手机,编码后的视频的色度值略微倾斜,底部有一个绿色条

目前,编码器表面的分辨率为640x360。 要渲染到曲面的EGLConfig choosen支持32位RGBA格式

预览版在所有手机上都是完美的

因此,我假设编码器参数在应用程序端或操作系统框架端都有问题

它发生在Android 4.4上不确定,如果在5月5日重现


]我会自己回答这个问题,以防万一别人觉得有用

显然,这个问题只发生在一些精选的芯片组上,比如联发科的芯片组,它们不支持16种分辨率的非倍数。在我的例子中,它是640x360,高度是8的倍数。为了部分解决这一问题,我在应用程序代码中添加了一个检查,如果编码器是Omx.mtk,则使用宽度/高度作为下一个16的倍数重新配置编码器,在我的情况下,该倍数为640x368,最接近要求,即360p

对我来说,YouTube播放器在两侧添加了一个轻微的空白,这是我们使用这些编码器所能做到的最好的


如果您不依赖任何第三方API/播放器等

的话,这看起来确实像是一个颜色格式问题,从表面编码时不应该发生这种情况。你能尝试其他解决方案吗?我很好奇这些设备上的编解码器是否有这种分辨率的错误。您知道是否所有受影响的设备都有相同的视频编码器芯片吗?你通常可以通过查看logcat来判断-通常会有一些特定于硬件的杂音。通常,预览分辨率和编码分辨率是不同的。640x360也是编码分辨率吗?你在编码1080p吗?如果是这样,那么我认为您的问题是由于垂直对齐。编码器可以读取1088而不是1080。如果是这样的话,相机的输出应该类似地对齐。预览是720p。没关系。因为我正在使用OpenGLES将其渲染为纹理到编码器表面@法登已经指出了这个问题。看起来像是编解码器的问题。我现在使用一个高度为16的下一个倍数的曲面。@Ganesh:对不起,我想我没有正确解释这个问题。摄像头预览:720p,设备预览分辨率:设备分辨率,编码器分辨率:360p,问题是youtube livestreaming API只支持这些分辨率:我应该使用高度368而不是360吗?问题是纵横比被破坏了,youtube会在两边添加一些空白。你不是唯一一个有联发科问题的人,例如。您是否已检查MediaCodeInfo.CodeProfileLevel以确认该设备宣传支持1080p?许多设备有一个秘密的16倍的要求,但正确处理1080无论如何。