MediaCodec:调整 ByteBuffer 值以匹配 BufferInfo(不需要?)

MediaCodec: adjust the ByteBuffer values to match BufferInfo (not needed?)

我正在使用 MediaCodec 录制 .MP4 视频(图像和音频)。

看了很多源码,之前有注释设置ByteBuffer的位置和限制

// adjust the ByteBuffer values to match BufferInfo (not needed?)
encodedData.position(bufferInfo.offset);
encodedData.limit(bufferInfo.offset + bufferInfo.size);

示例:https://bigflake.com/mediacodec/CameraToMpegTest.java.txt

毕竟,这些台词真的有必要吗?

我一直在问自己这个问题,因为我遇到了一些问题,例如以下例外情况:

IllegalArgumentException: Bad limit (capacity 8192): 9303 at
java.nio.Buffer.limit(Buffer.java:298)

IllegalArgumentException: Bad position (limit 367): 8545 at
java.nio.Buffer.positionImpl(Buffer.java:351)

PS: 这些错误发生在音频编码器上。

我意识到另一个线程正在更改 bufferInfo 值,它导致了这些问题。

在调用 writeSampleData 方法复制 bufferInfo 之前确保 bufferInfo 的值不会改变 variable/values。