【发布时间】:2014-01-06 19:45:02
【问题描述】:
我正在编码来自相机预览的NV21 帧。由于某种原因,在其他设备上运行良好的架构在 Sony Xperia Z1 和 Android 4.3 上运行不正确。它发回质量不正确(低)的编码帧。
MediaCodec 的格式是COLOR_FormatYUV420SemiPlanar,即NV12(我通过交换U 和V 分量将NV21 转换为NV12)。 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
任何建议将不胜感激。
【问题讨论】:
-
Xperia Z1 编码器似乎有一些特殊行为,例如stackoverflow.com/questions/20475332 。不过,对于 1280x720,您可能需要超过 1Mbps 的速度——在 30fps 时,每帧 4KB,而 Xperia ZR 的输出是 10 倍。所以有可能 ZR 坏了,Z1 正在做你告诉它的事情。提高比特率会改善问题吗?
-
谢谢,fadden,您的评论和 mstorsjo 的回答为我指明了正确的方向。
标签: android android-mediacodec