gpt4 book ai didi

android - 在 Xperia Z1 上使用 MediaCodec 编码相机预览帧时视频质量不一致

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:33 24 4
gpt4 key购买 nike

我正在对来自相机预览的 NV21 帧进行编码。由于某种原因,在其他设备上运行良好的模式在 Sony Xperia Z1Android 4.3 上运行不正确。它发回质量不正确(低)的编码帧。

MediaCodec 的格式是 COLOR_FormatYUV420SemiPlanar 也就是 NV12 (我把 NV21 转换成 NV12 通过交换 U 和 V 分量)。 MediaCodec 发回给我的输出缓冲区大小非常小,与分辨率 (1280x720) 和比特率 (1000000) 不符我正在使用。前几帧质量不错,但随后明显下降:

int encoderStatus = mMediaCodec.dequeueOutputBuffer(mBufferInfo, TIMEOUT_USEC);
// a few encoderStatus checks skipped
ByteBuffer encodedData = outputBuffers[encoderStatus];
Log.i(Constants.TAG, "Buffer size " + mBufferInfo.size);

这给了我 Xperia Z1 上的以下日志:

Buffer size 26
Buffer size 52172
Buffer size 23650
Buffer size 14394
Buffer size 3591
Buffer size 1849
Buffer size 3908

...

Buffer size 1043
Buffer size 248
Buffer size 836
Buffer size 518
Buffer size 1112

来自 Sony Xperia ZR 的示例日志,它可以正常工作:

Buffer size 21
Buffer size 51048
Buffer size 21063
Buffer size 24228
Buffer size 28040
...
Buffer size 44959
Buffer size 44972
Buffer size 44957
Buffer size 45004
Buffer size 44999
Buffer size 44957

如有任何建议,我们将不胜感激。

最佳答案

您确定以正确的单位(微秒)传递时间戳 - 并且它设置了合理的帧率吗?

  • 一些编码器可能会忽略时间戳,只根据帧速率为每帧设置固定的比特率预算。

  • 其他人可能会尝试根据时间戳来计算允许他们在每帧中使用多少位。

如果给出了时间戳,例如相反,以毫秒为单位,这可能会导致编码器将编码帧的大小减小到零。

关于android - 在 Xperia Z1 上使用 MediaCodec 编码相机预览帧时视频质量不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20661391/

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