2014-02-18 146 views
0

我正在編寫一個Android應用程序,我計劃將幾個圖像編碼爲可在任何瀏覽器上重播的實時h.264視頻流。我使用MediaCodec API進行編碼,然後使用MediaMuxer將其寫入文件,如http://bigflake.com/mediacodec/中的示例所示。在Android上實時編碼H.264流

我堅持的是如何告訴編碼器/複用器編碼它,以便它可以逐步播放。從例子中,只有當編碼器/ muxer.stop()/編碼器/ muxer.release()調用時,那麼視頻文件得到正確元頭,等等。

感謝

+0

你需要移動從MPEG4的元信息文件結尾到開始請參閱http://mithunme.wordpress.com/2009/11/04/streaming-mp4-via-http/ – skyde

+0

MediaMuxer類真的想將.mp4文件寫入磁盤。它不適合流式傳輸。如果您之後正在將編輯後的視頻源從您的應用直播到主機瀏覽器,則需要整理網絡視頻流協議。但我不相信我完全理解你的追求。 – fadden

回答

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:當你index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED當您撥打MediaCodec.dequeueOutputBuffer()時,將格式發送到MediaMuxer以初始化此格式的新曲目(它是「vidio/avc 「 在這種情況下)。

  2. mediamuxer.start()

  3. 開始把幀如上

  4. mediamuxer.stop(),釋放()