MediaCodec 编码的视频底部有绿条,色度搞砸了

Sah*_*jaj 4 encoding android opengl-es grafika android-mediacodec

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

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

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

对于大多数手机,此设置非常有效。

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

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

预览是完美的所有手机。

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

它发生在 Android 4.4 上。- 不确定,是否可以在 5.* 上重现。

![绿条图像] 2

Sah*_*jaj 5

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

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

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

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