我正在编写一个Android应用程序,我计划将多个图像编码为可在任何浏览器上重放的实时h.264视频流。我正在使用MediaCodec API进行编码,然后按照此处http://bigflake.com/mediacodec/的示例将MediaMuxer写入文件。
我所困扰的是如何告诉编码器/复用器对其进行编码以便可以逐步播放。仅从示例中进行编码/ muxer.stop()/ encoder / muxer.release()调用时,视频文件才会获得正确的元标题等。
由于
答案 0 :(得分:0)
我猜你正在考虑每个帧的显示时间。
您需要为MediaMuxer和框架提供正确的“ MediaCodec.BufferInfo ”,相应地设置“ presentationTimeUs ”。
例如,有3个帧,每个帧在视频中显示1秒钟:
sec 0---------1---------2-----------
frame1 frame2 frame3
int[] timestampSec = {0, 1, 2};
for (int i = 0; i < 3; i++) {
muxer.writeSampleData(trackId,
frame[i],
timeStampSec[i] * 1000000);
}
关于MediaMuxer的初始化和结束:
addTrack:当您调用 MediaCodec.dequeueOutputBuffer()时,如果您获得 index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED ,请将格式发送到MediaMuxer以初始化新曲目对于这种格式(在这种情况下是“vidio / avc”)。
mediamuxer.start()
按上面的方式启动框架
mediamuxer.stop(),release()