天天看點

分析使用mediarecord采集的實時流格式

分析使用mediarecord采集的實時流格式

​​編者:李國帥​​

時間:2013-7-13

背景原因:

對使用android自身的錄像接口采集的實時流進行遠端播放,需要寫一個專門的播放程式對流進行适當處理才能進行播放。

差異說明:

采集mediarecord實時流傳輸時,和3gp或者mp4檔案格式不同,因為實時流中每一幀的第一個4位元組是該幀大小,而檔案格式裸流的第一個4位元組是标記000010BX等,是以不能混淆。

流分析:

以3gp格式

如果以3gp格式錄制,編碼格式如果是mp4v,

0x 00000018 66747970 69736F6D00000000 69736F6D33677034 檔案頭0x18位元組

0x 0008737B 6D646174 檔案頭後面是媒體标記(mdat大小-包含大小和标記,"mdat")

0x 000001B6 10631996 CFACCFB6FF36DBFC 後面是mp4v幀分隔符000001B6,以及真正的視訊資料,這個地方實際上是不符合mp4格式BOX标準的。

0x DB6FB9B6 DFE6DF7F 9F6DFE6DB7F9B6DF

在這個檔案中,媒體幀的大小是從moov單元中分析出來的,是以在mdat單元中沒有給出大小。

再後面就是moov單元了,放在檔案最後。

以h264格式

如果編碼格式是h264,也就是avc1,那麼媒體是

00000018 667479703367703400000000 69736F6D33677034 檔案頭 ftyp box

00067DF5 6D646174  mdat

3C1CA8A5B89DE9C7  音頻頭,說明音頻幀沒有指明大小----------我們的測試中暫時不考慮音頻

00000480 65B8407FFFF0BC50001070F7 視訊幀前面的00000480指的是不包含長度的視訊幀的資料大小。

補充說明:

從網絡擷取流的時候,可能3gp或者mp4的moov單元丢失或者沒有傳遞,僅僅傳遞了資料,這時候如何播放呢?

繼續閱讀