【发布时间】:2016-01-22 19:43:47
【问题描述】:
我从Grafika 开始了一个项目并对其进行了修改。我有一个框架(与原始框架没有太大区别),它从Camera 捕获预览,并同时以不同的分辨率将其连续编码为视频。
MediaCodec(用于编码)配置为使用 COLOR_FormatSurface,以便我们能够使用 GLES 渲染到使用 getInputSurface() 查询的 Surface。
媒体格式设置为 MIME Type video/avc
对于大多数手机来说,这种设置非常有效。
但对于一些手机,编码后的视频的色度值略微倾斜,底部有一个绿色条。
目前编码器表面的分辨率为 640x360。 选择渲染到表面的 EGLConfig 支持 32 位 RGBA 格式。
预览完美适用于所有手机。
所以我假设在应用程序端或操作系统框架端的编码器参数有问题。
这发生在 Android 4.4 上。 - 不确定,是否可以在 5.* 上重现。
]2
【问题讨论】:
-
这看起来像是颜色格式问题,从 Surface 编码时不应该发生这种情况。您可以尝试其他分辨率吗?我很好奇这些设备上的编解码器在该分辨率下是否存在错误。您知道是否所有受影响的设备都具有相同的视频编码器芯片? (你通常可以通过查看 logcat 来判断——通常会有一些特定于硬件的喋喋不休。)
-
通常预览分辨率和编码分辨率不同。
640x360也是编码分辨率吗?你在编码1080p吗?如果是这样,那么我认为您的问题是由于垂直对齐。编码器可能正在读取 1088 而不是 1080。如果是这样,相机输出应该类似地对齐。 -
预览为 720p。没关系。因为我将它作为纹理(使用 OpenGLES)渲染到编码器表面。 @fadden 已经指出了这个问题。看起来像编解码器问题。我现在使用高度为 16 的下一个倍数的 Surface。
-
@Ganesh:对不起,我想我没有正确解释这个问题。相机预览:720p,设备预览分辨率:设备分辨率,编码器分辨率:360p,问题是 youtube 直播 API 仅支持这些分辨率:Livestreaming supported resolutions 我应该只使用高度 368 而不是 360?问题是宽高比被破坏了,youtube 会在两边添加一些空白。
-
您不是唯一遇到联发科问题的人(例如stackoverflow.com/questions/34891420)。您是否检查了 MediaCodecInfo.CodecProfileLevel 以确认设备宣传支持 1080p?许多设备都有一个“秘密”的 16 倍数要求,但无论如何都能正确处理 1080。
标签: android encoding opengl-es android-mediacodec grafika