1. 程式人生 > >FLV檔案格式官方規範詳解

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
1 = ADPCM
2 = MP3
3 = Linear PCM, little endian
4 = Nellymoser 16-kHz mono
5 = Nellymoser 8-kHz mono
6 = Nellymoser

7 = G.711 A-law logarithmic PCM

8 = G.711 mu-law logarithmic PCM 9 = reserved

10 = AAC
11 = Speex

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)
4: generated keyframe (reserved for server use only)

5: video info/command frame

編碼ID

UB4

使用哪種編碼型別:

1: JPEG (currently unused) 2: Sorenson H.263
3: Screen video

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