MediaCodec.BufferInfo.size确切含义疑问:解码后数值异常原因?
MediaCodec BufferInfo.size字段的准确含义
你观察到的现象是正常的,这个字段的实际含义需要结合解码模式来看:
- 当使用Surface模式解码时:解码后的视频帧会直接被发送到指定的Surface进行渲染,不会写入MediaCodec的输出ByteBuffer缓冲区。此时输出缓冲区里没有实际的像素数据,
size字段的值只是缓冲区中残留的极小标记数据长度(比如你遇到的1、8),完全不代表解码后帧的数据量。 - 当使用ByteBuffer模式解码时:解码后的帧像素数据会被写入输出ByteBuffer,这时
size字段才会对应实际的帧数据字节数,数值大小和视频分辨率、像素格式直接相关(比如1080P YUV420格式的帧,size大概是2949120字节)。
官方文档的描述“缓冲区中的数据字节数”是准确的,但它没有区分两种解码模式的差异——只有当缓冲区中存在实际的帧像素数据时,这个值才和你预期的帧数据量匹配;如果帧数据被直接输出到Surface,缓冲区为空或仅有标记数据,size就会是极小值。
内容的提问来源于stack exchange,提问作者Hong
相关产品推荐
相关产品推荐

