<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    嵌入式 H264―MP4格式及在MP4文件中提取H264的SPS、PPS及碼流

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    一、MP4格式基本概念

    MP4格式對應標準MPEG-4標準(ISO/IEC14496)

     


    二、MP4封裝格式核心概念

    1  MP4封裝格式對應標準為 ISO/IEC 14496-12(信息技術 視聽對象編碼的第12部分: ISO 基本媒體文件格式/Information technology Coding of audio-visual objects Part 12: ISO base media file format)

     附-- 標準免費下載: Freely Available Standards    http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html

     

    2  MP4封裝格式是基于QuickTime容器格式定義,媒體描述與媒體數據分開,目前被廣泛應用于封裝h.264視頻和ACC音頻,是高清視頻/HDV的代表。


     

    3  MP4文件中所有數據都封裝在box中(對應QuickTime中的atom),即MP4文件是由若干個box組成,每個box有長度和類型,每個box中還可以包含另外的子box(稱container box)。

     一個MP4文件首先會有且只有一個“ftyp”類型的box,作為MP4格式的標志并包含關于文件的一些信息;之后會有且只有一個“moov”類型的box(Movie Box),它是一種container box,子box包含了媒體的metadata信息;MP4文件的媒體數據包含在“mdat”類型的box(Midia Data Box)中,該類型的box也是container box,可以有多個,也可以沒有(當媒體數據全部引用其他文件時),媒體數據的結構由metadata進行描述。


     

    4  MP4中box存儲方式為大端模式。一般,標準的box開頭會有四個字節的box size。


     

    5 幾個名詞 

    track

    表示一些sample的集合,對于媒體數據來說,track表示一個視頻或音頻序列。

    hint track

    特殊的track,并不包含媒體數據,包含的是一些將其他數據track打包成流媒體的指示信息。

    sample

    對于非hint   track來說,video sample即為一幀視頻,或一組連續視頻幀,audio sample即為一段連續的壓縮音頻,它們統稱sample。

    對于hint   track,sample定義一個或多個流媒體包的格式。

    sample table

    指明sampe時序和物理布局的表。

    chunk

    一個track的幾個sample組成的單元。

     


    三、MP4封裝格式結構圖

    1 實例樣本

    來源于Android MediaRecoder視頻錄制,平臺為華為T8300和TCL968,mp4info查看如下

    RFID設備管理軟件

    EsEYE查看如下:

    RFID設備管理軟件

    winhex分析如下:

    RFID設備管理軟件

     

    2 box結構圖

    RFID設備管理軟件

    接下來對h264編碼中有用的幾個進行闡述,其它不再描述。

    3 ftypfile type box

    如下圖所示,開始的四字節00 00 00 00 18表示該boxsize24字節(含頭),然后66 74 79 70ftypBOX TYPE,其它是一些格式兼容等相關信息。

    RFID設備管理軟件

    4  mdat

    如下圖所示,BOX YPE為6D 64 61 74 ,緊接著的00 00 09 39表示sliece長度

    RFID設備管理軟件

    5 avcC

    如下圖所示,紅色為BOX TYPE

    RFID設備管理軟件

     


    四、MP4文件中h264 SPSPPS獲取

    1  【參考依據】ISO/IEC 14496-15 (下載

    2  【綜述】在H264中,SPS和PPS存在于NALU header中,而在MP4文件中,SPS和PPS存在于AVCDecoderConfigurationRecord, 首先要定位avcC.

    3  【定義】

    ①參數集:一組很少改變的,為大量VCL NALU 提供解碼信息的數據。

       序列參數集SPS作用于一系列連續的編碼圖像,而圖像參數集PPS作用于編碼視頻序列中一個或多個獨立的圖像。

       如果解碼器沒能正確接收到這兩個參數集,那么其他NALU 也是無法解碼的。因此它們一般在發送其它 NALU 之前發送,并且使用不同的信道或者更加可靠的傳輸協議(如TCP)進行傳輸,也可以重復傳輸。

    ②關于AVCDecoderConfigurationRecord結構定義為  

    RFID設備管理軟件

    4  【實例分析】 數據如上avcC圖所示,現在對數據進行詳細分析

    RFID設備管理軟件

    所以,提取的SPSPPS分別為67 42 00 1E A6 81 41 F968 CE 38 80

     


    五、MP4文件中的H264 data /NALU slice

    1  【參考】H264官方文檔(下載) + 畢書—新一代視頻壓縮編碼標準(下載

    2  【綜述】

    ① MP4格式文件中,H264 slice并不是以00 00 00 01來作分割,而是存儲在mdat box中。

    ②  H264基本碼流由一些列的NALU組成。原始的NALU單元組成:[start code] + [NALU header] + [NALU payload]

     

    start   code

    1字節

    00 00 01  00 00 00 01

    需要添加的

    NALU header

    1字節

    如下3

    通過mdat定位

     

    ③  H264基本碼流結構分兩層:視頻編碼層VCL和網絡適配層NAL,這樣使信號處理和網路傳輸分離

     

    VCL

    負責高效視頻內容表示

    NAL

    以網絡所要求的恰當方式對數據進行打包和發送

     

    3  【定義】 NALU header

    +---------------+

    |0|1|2|3|4|5|6|7|

    +-+-+-+-+-+-+-+-+

    |F|NRI| Type |

    +---------------+

    RFID設備管理軟件

    特別的,當值為78分別為SPSPPS

    畢書(下載)(P191)上的定義為:

    RFID設備管理軟件

     

    4  【實例分析】數據分析,數據如上圖mdat所示

    6D 64 61 74

    mdat   BOX TYPE

    00 00   09 39

    silce長度,2361

     

    接下來的65就是NALU header,可以由65&0x1F來求的后五個bit,從而得知此sliceI frame

    注意,mdatsilce之間有可能存在若干占位符,我在TCL手機測試時就出現了連續的00的占位符,這樣后面用H264硬編碼時會比較麻煩一點。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全