FLV檔案格式官方規範詳解
——如果要學習一個新的知識點,官方手冊可能是最快的途徑。檢視網上其他人的總結也許入門更快,但是要準確,深入,完整,還是要看官方手冊。
以下內容來自對官方文件Video File Format Specification Version 10的分析總結。過程中藉助ffmpeg實際轉換了一個flv檔案用例研究。
一個FLV檔案,每種型別的tag都屬於一個流,也就是一個flv檔案最多隻有一個音訊流,一個視訊流,不存在多個獨立的音視訊流在一個檔案的情況。(mp4好像是可以的)
另外,FLV檔案格式所用的是大端序。
注:下面的資料type中,UI表示無符號整形,後面跟的數字表示其長度是多少位。比如UI8,表示無法整形,長度一個位元組。UI24是三個位元組。UB表示位域,UB5表示一個位元組的5位。可以參考c中的位域結構體。
FLV頭
Field | type | Comment |
簽名 | UI8 | ’F’(0X46) |
簽名 | UI8 | ‘L’(0X4C) |
簽名 | UI8 | ‘V’(0x56) |
版本 | UI8 | FLV的版本。0x01表示FLV 版本是1 |
保留欄位 | UB5 | 前五位必須是0 |
是否有音訊流 | UB1 | 音訊流是否存在標誌 |
保留欄位 | UB1 | 必須是0 |
是否有視訊流 | UB1 | 視訊流是否存在標誌 |
檔案頭大小 | UI32 | FLV版本1時填寫9,表明的是FLV頭的大小,為後期的FLV版本擴充套件使用。包括這四個位元組。 資料的起始位置就是從檔案開頭偏移這麼多的大小。 |
FLV檔案體
body部分由一個個Tag組成,每個Tag的下面有一塊4bytes的空間,用來記錄這個tag的長度,這個後置用於逆向讀取處理,他們的關係如下圖:
注意:頭下面四個自己就是PreviousTagSize,因為前一個沒有Tag,所以,值填寫0。
FLV tags 結構
Field | type | Comment |
TAG型別 | UI8 | 8: audio 9: video 18: script data——這裡是一些描述資訊。 all others: reserved其他所有值未使用。 |
資料大小 | UI24 | 資料區的大小,不包括包頭。包頭總大小是11個位元組。 |
時戳 | UI24 | 當前幀時戳,單位是毫秒。相對於FLV檔案的第一個TAG時戳。第一個tag的時戳總是0。——不是時戳增量,rtmp中是時戳增量。 |
時戳擴充套件欄位 | UI8 | 如果時戳大於0xFFFFFF,將會使用這個位元組。這個位元組是時戳的高8位,上面的三個位元組是低24位。 |
流ID | U24 | 總是0 |
資料區 | UI8[n] |
音訊資料
Field | type | Comment |
音訊格式 | UB4 | 0 = Linear PCM, platform endian 7 = G.711 A-law logarithmic PCM 8 = G.711 mu-law logarithmic PCM 9 = reserved 10 = AAC 14 = MP3 8-Khz 15 = Device-specific sound 7, 8, 14, and 15:內部保留使用。 flv是不支援g711a的,如果要用,可能要用線性音訊。 |
取樣率 | UB2 | For AAC: always 3 0 = 5.5-kHz 1 = 11-kHz 2 = 22-kHz 3 = 44-kHz |
取樣大小 | UB1 | 0 = snd8Bit 1 = snd16Bit |
聲道 | UB1 | 0=單聲道 1=立體聲,雙聲道。AAC永遠是1 |
聲音資料 | UI8[N] | 如果是PCM線性資料,儲存的時候每個16bit小端儲存,有符號。 如果音訊格式是AAC,則儲存的資料是AAC AUDIO DATA,否則為線性陣列。 |
AAC AUDIO DATA
視訊資料
Field | type | Comment |
幀型別 | UB4 | 1: keyframe (for AVC, a seekable frame)——h264的IDR,關鍵幀,可重入幀。 2: inter frame (for AVC, a non- seekable frame)——h264的普通幀 3: disposable inter frame (H.263 only) 5: video info/command frame |
編碼ID | UB4 | 使用哪種編碼型別: 1: JPEG (currently unused) 2: Sorenson H.263 4: On2 VP6 5: On2 VP6 with alpha channel 6: Screen video version 2 7: AVC |
視訊資料 | UI[N] | 如果是avc,則參考下面的介紹: AVCVIDEOPACKET |
相關推薦
FLV檔案格式官方規範詳解
——如果要學習一個新的知識點,官方手冊可能是最快的途徑。檢視網上其他人的總結也許入門更快,但是要準確,深入,完整,還是要看官方手冊。以下內容來自對官方文件Video File Format Specification Version 10的分析總結。過程中藉助ffmpeg實際轉換了一個flv檔案用例研究。一個
gml檔案格式解析程式詳解之原始檔
// Functions to read a network stored in a GML file into a NETWORK struct // // Mark Newman 11 AUG 06 // // To use this software, #inclu
FLV檔案格式詳解
具體格式可以參看 flv spec。 下面主要介紹上圖中的Tag裡面的欄位,每個Tag由兩部分組成:Tag Header和Tag Data。 1. Tag Header 名稱 長度 介紹 Tag型別 1 bytes 8:音訊 9:視訊 18:meta 其他:保
3dTiles 資料規範詳解[3] 內嵌在瓦片檔案中的兩大資料表
> 轉載請宣告出處:全網@秋意正寒 # 零、本篇前言 說實話,我很糾結是先介紹瓦片的二進位制資料檔案結構,還是先介紹這兩個重要的表。思前想後,我決定還是先介紹這兩個資料表。 因為這兩個表不先給讀者灌輸,那麼介紹到瓦片的二進位制資料檔案結構時,就滿嘴“晦澀難懂”啦。 ## 資料與模型 上文介紹到,瓦
3dTiles 資料規範詳解[4.1] b3dm瓦片二進位制資料檔案結構
> 原創。轉載請規範註明出處:https://www.cnblogs.com/onsummer/p/13252896.html > 我的git地址:[github.com/onsummer](https://github.com/onsummer) B3dm,Batched 3D Model,成批量的三維模
3dTiles 資料規範詳解[4.2] i3dm瓦片二進位制資料檔案結構
i3dm,即 `Instanced 3D Model`,例項三維模型的意思。 諸如樹木、路燈、路邊的垃圾桶、長椅等具有明顯 **重複** 特徵的資料。這類資料用得較少(笑,現在都喜歡搞BIM、傾斜攝影、精模、白模等) > 我的git地址:[github.com/onsummer](https://gith
wav文件格式分析與詳解
操作 量化 可用 存在 進制 不同 都是 單純 _for WAV文件是在PC機平臺上很常見的、最經典的多媒體音頻文件,最早於1991年8月出現在Windows 3.1操作系統上,文件擴展名為WAV,是WaveFom的簡寫,也稱為波形文件,可直接存儲聲音波形,還原的波形曲線十
JavaScript模塊化規範詳解
messages 避免 script strong 識別 foo node.js mod rom JavaScript模塊化規範詳解 目錄 為什麽要模塊化 模塊化的好處 頁面引入加載script存在的問題 模塊化規範 CommonJS Node.js中實現 瀏覽器端實
數據庫規範詳解
ipv4 舉例 eat sta 改變 image 字母 lin use 一、數據庫的庫名、表名、字段名命名規範: 1、駝峰表示法:即參考java中命名變量名的規範來命名,也就是如果只有一個單詞時,全部小寫;多個單詞時,第一個單詞全小寫,後面的所有單詞都是首字母大寫。舉
軟體版本命名規範詳解
1. 軟體版本階段說明 Base版: 此版本表示該軟體僅僅是一個假頁面連結,通常包括所有的功能和頁面佈局,但是頁面中的功能都沒有做完整的實現,只是做為整體網站的一個基礎架構。 Alpha版: 此版本表示該軟體在此階段主要是以實現軟體功能為主,通常只在
struts2 配置檔案中各個項詳解
<action name= "Login_* " method= "{1} " class= "mailreader2.Login "> 中Login_*帶*是什麼意思?method= "{1} "帶{}這個是什麼意
FastDFS的配置、部署與API使用解讀(8)FastDFS多種檔案上傳介面詳解
《Poechant的FastDFS的配置、部署與API使用教程》 FastDFS的配置、部署與API使用解讀——(1)入門使用教程 FastDFS的配置、部署與API使用解讀——(2)Java API:根據InputStream、檔名、檔案長度上傳檔案 FastDFS的配置、部署與API
Hibernate ---核心配置檔案(Hibernate.cfg.xml)詳解
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD
FLV檔案格式基礎
技術在於交流、溝通,轉載請註明出處並保持作品的完整性。 原文:https://blog.csdn.net/hiwubihe/article/details/82346691 [本系列相關文章] H264和音訊流打包成PS流 (MPEG2-PS) PS流解複用成H264和
Mybatis的mapper檔案中trim標籤詳解
0、背景 parameterType引數型別student是別名,裡面的欄位有id,name,age,sex被封裝成bean物件,跟資料庫中student表中欄位一一對應,以下案例只為一個SQL語句。(初入SSM坑,請多多指教) update student set name='
根檔案系統及Busybox詳解之一
轉自 https://blog.csdn.net/chenlong12580/article/details/8761108 目錄 1.根檔案系統簡介...2 2.Busybox簡介...2 2.1Busybox簡介...2 2.2Busybox目錄結
Linux Samba服務主配檔案smb.conf中文詳解
從網上找到描述比較詳細的smb.conf中文解釋: 服務名:smb 配置目錄:/etc/sabma/ 主配置檔案:/etc/sabma/smb.conf #============================== Global Settings ==========
Nginx配置檔案nginx.conf中文詳解
#定義Nginx執行的使用者和使用者組 user www www; #nginx程序數,建議設定為等於CPU總核心數。 worker_processes 8; #全域性錯誤日誌定義型別,[ debug | info | notice | warn
OpenLayers官方示例詳解二:Drag-and-Drop Image Vector
目錄 四、總結 一、示例概述 本示例實現了從資料夾中拖拉檔案到瀏覽器從而載入地理資料的功能,地理資料是以圖片的形式展示在瀏覽器。 二、程式碼詳解 2.1、建立DragAndDrop控制元件並新增到地圖 var
python configparser配置檔案解析器使用詳解
configparser簡介 python2下該模組名為ConfigParser,到3才改為configparser,可以看官方ConfigParser模組的說明 ConfigParse 官方文件 python3中configparser模組的使用,confi