我使用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:错误的位置(限制367):8545在
java.nio.Buffer.positionImpl(Buffer.java:351)
PS:这些错误发生在音频编码器上。
答案 0 :(得分:0)
我意识到另一个线程正在改变bufferInfo值,这导致了这些问题。
确保在调用writeSampleData方法生成bufferInfo变量/值的副本之前,bufferInfo的值不会更改。