Android MediaCodec录屏时如何获取实时的文件大小
时间: 2023-12-10 15:39:18 浏览: 125
在使用 MediaCodec 进行录屏时,可以通过 MediaMuxer 将编码后的数据封装成 MP4 文件。在写入数据的过程中,MediaMuxer 会实时更新文件大小信息,因此可以通过 MediaMuxer 的 getTrackBytesWritten(int trackIndex) 方法获取实时的文件大小。
具体可以通过如下代码进行实现:
```
MediaMuxer muxer = new MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
int trackIndex = muxer.addTrack(mediaFormat);
muxer.start();
while (!isStop) {
int inputBufferIndex = mediaCodec.dequeueInputBuffer(TIMEOUT_US);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
int sampleSize = extractor.readSampleData(inputBuffer, 0);
if (sampleSize < 0) {
mediaCodec.queueInputBuffer(inputBufferIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
isStop = true;
} else {
long presentationTimeUs = extractor.getSampleTime();
mediaCodec.queueInputBuffer(inputBufferIndex, 0, sampleSize, presentationTimeUs, 0);
extractor.advance();
}
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, TIMEOUT_US);
while (outputBufferIndex >= 0) {
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
muxer.writeSampleData(trackIndex, outputBuffer, bufferInfo);
outputBuffer.clear();
mediaCodec.releaseOutputBuffer(outputBufferIndex, false);
outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, TIMEOUT_US);
long fileSize = muxer.getTrackBytesWritten(trackIndex);
// 实时获取文件大小
}
}
```
在 while 循环中,每次写入数据后都会通过 MediaMuxer 的 getTrackBytesWritten 方法获取实时的文件大小。
阅读全文