MediaCodec编码视频底部有绿色条,色度搞定

时间:2015-09-18 08:36:44

标签: android encoding opengl-es mediacodec grafika

我从Grafika启动了一个项目并对其进行了修改。我有一个框架(与原版没有太大不同),它从Camera抓取预览,并在不同分辨率下同时将其连续编码为视频。

MediaCodec(用于编码)配置为使用COLOR_FormatSurface,以便我们能够使用GLES使用getInputSurface()渲染到Surface。

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

对于大多数手机而言,此设置效果非常好。

但对于少数手机,编码视频的色度值略有偏斜,底部有绿色条。

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

所有手机中的预览都是完美的

所以我假设应用程序端或OS框架端的编码器参数有问题。

它发生在Android 4.4上。 - 不确定,如果它可以在5。*。

上重现

![Green bar image] 2

1 个答案:

答案 0 :(得分:3)

我会自己回答这个问题,以防其他人发现它有用。

显然,这个问题只发生在少数选定的芯片组上,例如MediaTek个芯片组,它们不支持非多个16 分辨率。在我的情况下,它是640x360(其中高度是8的倍数)。为了部分解决这个问题,我在App代码中添加了一个检查,如果编码器是 Omx.mtk ,那么将宽度/高度重新配置为next multiple of 16,这就是在我的情况下640x368(最接近要求,即360p)。

对我来说,YouTube播放器会在任何一侧添加一个轻微的消隐,这是我们可以用这些编码器做的最好的。

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