日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FLV格式分析

發布時間:2024/4/11 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FLV格式分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FLV格式分析


目錄

  • FVL概述
  • 框架解析圖
  • FLV Header
  • FLV Body
  • GitHub源碼地址:flv-parser
    Flv解復用代碼解析:Flv解復用代碼解析


    1. FVL概述

  • FLV(Flash Video)是Adobe公司推出的?種流媒體格式,由于其封裝后的?視頻?件體積?、封裝簡單等特點,?常適合于互聯?上使?。?前主流的視頻?站基本都?持FLV。采?FLV格式封裝的?件后綴為.flv。
  • FLV封裝格式是由?個?件頭(file header)和 ?件體(file Body)組成。
  • FLV body由?對對的(Previous Tag Size字段 + tag)組成。Previous Tag Size字段排列在Tag之前,占?4個字節。Previous Tag Size記錄了前??個Tag的??,?于逆向讀取處理。FLV header后的第?個Pervious Tag Size的值為0。
  • Tag?般可以分為3種類型:腳本(幀)數據類型、?頻數據類型、視頻數據類型。FLV數據以?端序進?存儲,在解析時需要注意。
  • ?個標準FLV?件結構如下圖:
  • FLV?件的詳細內容結構如下圖:

  • 2. 框架解析圖


    3. FLV Header

  • 注:在下?的數據type中,UI表示?符號整形,后?跟的數字表示其?度是多少位。?如UI8,表示?符號整形,?度?個字節。UI24是三個字節,UI[8*n]表示多個字節。UB表示位域,UB5表示?個字節的5位??梢詤⒖糲中的位域結構體。
  • FLV頭占9個字節,?來標識?件為FLV類型,以及后續存儲的?視頻流。?個FLV?件,每種類型的tag都屬于?個流,也就是?個flv?件最多只有?個?頻流,?個視頻流,不存在多個獨?的?視頻流在?個?件的情況。
  • 1. FLV頭的結構如下:


    4. FLV Body

  • FLV Header之后,就是FLV File Body。FLV File Body是由?連串的back-pointers + tags構成。Back-pointer表示Previous Tag Size(前?個tag的字節數據?度),占4個字節。
  • 1. FLV Tag

  • 每?個Tag也是由兩部分組成:tag header和tag data。Tag Header?存放的是當前tag的類型、數據區(tag data)的?度等信息。
  • 1. tag header
  • tag header?般占11個字節的內存空間。FLV tag結構如下:
  • 注意:
  • flv?件中Timestamp和TimestampExtended拼出來的是dts。也就是解碼時間。Timestamp和TimestampExtended拼出來dts單位為ms。(如果不存在B幀,當然dts等于pts)
  • CompositionTime 表示PTS相對于DTS的偏移值, 在每個視頻tag的第14~16字節 。顯示時間(pts) = 解碼時間(tag的第5~8字節) +CompositionTime。
  • CompositionTime的單位也是ms
  • Script data腳本數據就是描述視頻或?頻的信息的數據,如寬度、?度、時間等等,?個?件中通常只有?個元數據,?頻tag和視頻tag就是?視頻信息了,采樣、聲道、頻率,編碼等信息。
  • 2. Script Tag Data結構(腳本類型、幀類型)
  • 該類型Tag?被稱為MetaData Tag,存放?些關于FLV視頻和?頻的元信息,?如:duration、width、height等。通常該類型Tag會作為FLV?件的第?個tag,并且只有?個,跟在File Header后。該類型Tag Data的結構如下所示:
  • 第?個AMF包: 第1個字節表示AMF包類型,?般總是0x02,表示字符串。第2-3個字節為UI16類型值,標識字符串的?度,?般總是0x000A(“onMetaData”?度)。后?字節為具體的字符串,?般總為“onMetaData”(6F,6E,4D,65,74,61,44,61,74,61)。
  • 第?個AMF包: 第1個字節表示AMF包類型,?般總是0x08,表示數組。第2-5個字節為UI32類型值,表示數組元素的個數。后?即為各數組元素的封裝,數組元素為元素名稱和值組成的對。常?的數組元素如下表所示。
  • 3. Audio Tag Data結構(?頻類型)
  • ?頻Tag Data區域開始的:
  • 第?個字節包含了?頻數據的參數信息,
  • 第?個字節開始為?頻流數據。
  • (這兩個字節屬于tag的data部分,不是header部分)
  • 第?個字節為?頻的信息(仔細看spec發現對于AAC??,?較有?的字段是SoundFormat),格式如下:
  • 第?個字節開始為?頻數據(需要判斷該數據是真正的?頻數據,還是?頻config信息)

  • 如果是AAC數據,如果他是AAC RAW, tag data[3] 開始才是真正的AAC frame data。
  • 4. Video Tag Data結構(視頻類型)
  • 視頻Tag Data開始的:
  • 第?個字節包含視頻數據的參數信息。
  • 第?個字節開始為視頻流數據。
  • 第?個字節包含視頻信息,格式如下:
  • 第?個字節開始為視頻數據

  • CompositionTime 單位毫秒
  • CompositionTime 每個視頻tag(整個tag)的第14~16字節(如果是tag data偏移[3]~[5],[0],[1][2:AVCPackettype] )(表示PTS相對于DTS的偏移值 )。
  • CompositionTime 單位為ms : 顯示時間 = 解碼時間(tag的第5~8字節,位置索引[4]~[7])+ CompositionTime

  • 總結

    以上是生活随笔為你收集整理的FLV格式分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。