1. 程式人生 > >FLV檔案格式基礎

FLV檔案格式基礎

技術在於交流、溝通,轉載請註明出處並保持作品的完整性。

原文:https://blog.csdn.net/hiwubihe/article/details/82346691

[本系列相關文章]

FLV,F4V,MP4廣泛應用於各主流直播和點播平臺,能夠非常方便的流媒體和儲存處理。本篇記錄一下FLV檔案的格式學習,FLV相對MP4格式比較簡單。主要由檔案頭+三種類型的TAG組成。FLV支援的音視訊編解碼方式如下圖

FLV總體結構如下圖 

檔案頭

 
Field Data Type Default Details
Signature byte[3] “FLV” Always “FLV”
Version uint8 1 Only 0x01 is valid
Flags uint8 bitmask 0x05 Bitmask: 0x04 is audio, 0x01 is video (so 0x05 is audio+video)
Header Size uint32_be 9 Used to skip a newer expanded header

檔案主體

交替有前面tag長度和tag體組成,

TAG頭

AUDIODATA格式

 

 如果是MP3等其他資料,直接拷貝音訊資料,AAC格式如下

VIDEODATA資料如下

H264/AVC編碼時 AVCVIDEOPACKET

注意一下:

  1. flv檔案中Timestamp和TimestampExtended拼出來的是dts,相對於第一個TAG來說的毫秒數。
  2. CompositionTime 表示當前幀PTS對DTS的偏移值,單位毫秒即CTS=PTS-DTS。CTS永遠>0,因為一幀顯示時間總是在解碼時間之後。如
    幀型別 I B B P
    顯示序號 1 2 3 4
    解碼序號 1 3 4 2
    PTS 0 40ms 80ms 120ms
    DTS 0 20ms 50ms 10ms

    第一個B幀40ms需要顯示,所以40ms以前必須解碼好,而第一個B幀要解碼需要依賴P幀,所以在40ms以前P幀和第一個B幀都要解碼好。 

  3.  如果H264編碼中沒有B真,則PTS==DTS,所以CompositionTime CTS==0。

  4. AudioSpecificConfig參考ISO 14496-3,AVCDecoderConfigurationRecord參考ISO 14496-15。

  5. Data tags在本篇沒解析,基本由AMF1和AMF2組成,包括視訊解析度,位元率,幀率,時長,大小,取樣率,通道數常用資訊。