gpt4 book ai didi

Android CameraX 如何旋转输出视频

转载 作者:行者123 更新时间:2023-12-04 09:41:53 41 4
gpt4 key购买 nike

我使用以下版本的 CameraX 依赖项:

implementation "androidx.camera:camera-camera2:1.0.0-beta04"
implementation "androidx.camera:camera-view:1.0.0-alpha11"
implementation "androidx.camera:camera-extensions:1.0.0-alpha11"
implementation "androidx.camera:camera-lifecycle:1.0.0-beta04"

并尝试使用 android MediaCodec 将来自相机的输出视频编码为 H264并将其解码并在 SurfaceView 上显示结果视频,除了 SurfaceView 上的视频在纵向模式下逆时针旋转 90 度并且在横向模式下没有旋转外,一切正常。

我从相机捕获视频的代码如下所示:
private lateinit var yData: ByteArray  //
private lateinit var uData: ByteArray // store YUV data from camera
private lateinit var vData: ByteArray //

imageAnalysis = ImageAnalysis.Builder().setBackpressureStrategy ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST).build()
imageAnalysis.setAnalyzer(executor, ImageAnalysis.Analyzer { imageProxy ->
if (imageProxy.image == null || imageProxy.planes.size < 3) return@Analyzer

for (i in 0 until 3) {
val plane = imageProxy.image!!.planes[i]
val bytes = ByteArray(plane.buffer.remaining())
plane.buffer.get(bytes)
when(i) {
0 -> yData = bytes
1 -> uData = bytes
2 -> vData = bytes
}
}
imageProxy.close()

// send yData, uData, vData to encoder ...
})

为了解决我尝试使用的问题: imageAnalysis.targetRotation = Surface.ROTATION_0和其他值,但它根本不起作用 - 解码后的视频仍在旋转。

我还尝试使用 this 旋转从相机获得的 YUV 数据回答,这次我成功地旋转了我的视频,但是视频的颜色突然变暗了,我不知道为什么......但是如果我不旋转我的视频,颜色是完美的。

所以我的问题是:如何正确旋转我的视频而不会出现颜色失真?我需要旋转 SurfaceView 的方式不适合我。我再说一遍 - 我首先从相机获取并编码为 H264 的解码视频的问题,而不是来自相机的预览,来自相机的预览工作正常。

my source video without use of any ways that I mentioned above这里是我的源视频,没有使用我上面提到的任何方式。

my video when I use rotation of it's YUV data这里是我使用 YUV 数据旋转时的视频。

最佳答案

最后我找到了一个解决方案 - 我做了一个 android library ,基于 Google 的 libyuv用于从 android Camera2 或 CameraX api 轻松快速地缩放、旋转和镜像帧的库。

关于Android CameraX 如何旋转输出视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62296046/

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