在Android上实时编码H.264流

时间:2014-02-18 19:24:28

标签: android encoding h.264 mediacodec

我正在编写一个Android应用程序,我计划将多个图像编码为可在任何浏览器上重放的实时h.264视频流。我正在使用MediaCodec API进行编码,然后按照此处http://bigflake.com/mediacodec/的示例将MediaMuxer写入文件。

我所困扰的是如何告诉编码器/复用器对其进行编码以便可以逐步播放。仅从示例中进行编码/ muxer.stop()/ encoder / muxer.release()调用时,视频文件才会获得正确的元标题等。

由于

1 个答案:

答案 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的初始化和结束:

  1. addTrack:当您调用 MediaCodec.dequeueOutputBuffer()时,如果您获得 index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED ,请将格式发送到MediaMuxer以初始化新曲目对于这种格式(在这种情况下是“vidio / avc”)。

  2. mediamuxer.start()

  3. 按上面的方式启动框架

  4. mediamuxer.stop(),release()