我从Grafika启动了一个项目并对其进行了修改。我有一个框架(与原版没有太大不同),它从Camera
抓取预览,并在不同分辨率下同时将其连续编码为视频。
MediaCodec
(用于编码)配置为使用COLOR_FormatSurface
,以便我们能够使用GLES使用getInputSurface()
渲染到Surface。
媒体格式设置为MIME类型video/avc
对于大多数手机而言,此设置效果非常好。
但对于少数手机,编码视频的色度值略有偏斜,底部有绿色条。
目前编码器表面的分辨率为640x360。 EGLConfig选择渲染到表面支持32位RGBA格式。
所有手机中的预览都是完美的。
所以我假设应用程序端或OS框架端的编码器参数有问题。
它发生在Android 4.4上。 - 不确定,如果它可以在5。*。
上重现] 2
答案 0 :(得分:3)
我会自己回答这个问题,以防其他人发现它有用。
显然,这个问题只发生在少数选定的芯片组上,例如MediaTek
个芯片组,它们不支持非多个16 分辨率。在我的情况下,它是640x360(其中高度是8的倍数)。为了部分解决这个问题,我在App代码中添加了一个检查,如果编码器是 Omx.mtk ,那么将宽度/高度重新配置为next multiple of 16
,这就是在我的情况下640x368(最接近要求,即360p)。
对我来说,YouTube播放器会在任何一侧添加一个轻微的消隐,这是我们可以用这些编码器做的最好的。
如果您不依赖任何第三方API /播放器等