gpt4 book ai didi

android - 当我需要使用 MediaCodec 输出视频时,如何知道 Android 设备上相机的 YUV 颜色格式?

转载 作者:行者123 更新时间:2023-11-30 00:59:11 35 4
gpt4 key购买 nike

当我尝试使用 android MediaCodec 输出 h.264 视频时遇到问题。我从 onPreviewFrame 获取帧数据,然后将其提供给 MediaCodec,并使用 OpenGL 在 GLSurfaceView 上绘制帧。它在某些设备和操作系统版本上正常工作,例如 5.0 系统的三星 s5,5.1 系统的三星 note4 和一些 android 4.4 设备。

但是当我尝试在其他设备上运行这个应用程序时,例如 Samsung s6 with android 6.0 , Samsung note5 with android 6.0 and a 5.0 device, there's something wrong.Image I draw on GLSurfaceViewis correct and normal, but i got wrong视频似乎没有颜色或颜色错误。

我试图找到答案,我终于意识到这可能是由 MediaCodec 接受的颜色格式的差异引起的。在我的程序中,我假设 mediaCodec 可以接受 YUV420SP,所以我转换 nv21 i420SemiPlanar 并将其提供给 MediaCodec .我猜mediaCodec的颜色格式是解决问题的关键,但这是真的吗?为什么不同设备和操作系统版本上的 mediaCodec 会有如此大的差异?

有人遇到同样的问题吗?

我该怎么做才能避免这个问题?

最佳答案

首先,我对这个平台有点失望,因为它仍然有用而且很酷。我不知道为什么我的问题得到-2分。我展示了我的研究和我对这个问题的了解,你们怎么能认为它不清楚而且没有用呢?

我找到MediaCodec在输出视频文件时掉色的原因。

我们在初始化相机时设置的 NV21 格式的 Android 相机输出帧。但不同设备(或不同版本的 android 系统?)上的 MediaCodec 可能支持不同的颜色格式。所以如果我们只使用静态颜色格式参数来初始化MediaCodec,MediaCodec会崩溃。

至于漏色的问题,是我的失误,我循环MediaCodec的MediaCodecInfo.CodecCapabilities来抓取支持的颜色格式,用第一个识别到的颜色格式初始化mediaCodec,不会崩溃,但它可能与我们准备提供给 MediaCodec 的帧的颜色格式不匹配。

Android camera可能只支持NV21,所以无论你拿到预览帧后想做什么,都必须设计一个匹配NV21格式的程序。

现在没有错了。我希望我的愚蠢错误可以帮助任何人遇到同样的问题。

关于android - 当我需要使用 MediaCodec 输出视频时,如何知道 Android 设备上相机的 YUV 颜色格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697017/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com