FLV文件格式(Z)(轉載)

剛才在看一些關于demux的東西,在處理flv格式的文件的時候,由于自己對flv文件的格式不了解,所以就比較云頭轉向,正好看到了一篇講述flv文件格式的文章,寫的比較明白,所以就轉過來了。O(∩_∩)O~
flv頭文件比較簡單,由9個字節組成.

0-3:前3個字節是文件格式標識(FLV 464C56).
4-4:第4個字節是版本(0x01)
5-5:第5個字節的前5個bit是保留的必須是0.
??? ???? 第5個字節的第6個bit音頻類型標志(TypeFlagsAudio)
??? ???? 第5個字節的第7個bit也是保留的必須是0
??? ???? 第5個字節的第8個bit視頻類型標志(TypeFlagsVideo)
6-9:第6-9的四個字節還是保留的.其數據為 00000009 .

文件內容是由4字節的0 開始,它標志著前一個tag的size(因為前一個tag為空,所以size為0).然后就是flv文件內容的第1個tag。tag類型為1個字節,有:8音頻;9視頻;18(0x12) 腳本數據;其它保留。每種tag有其特定類型。
1:如下圖為data tag


data tags被flash player中的NetStream調用.一個meta包的內容由兩個amf包組成.第一個(amf類型0x02)是基本上總是由2個字節帶字符串長度+ 字符串組成,第二個(amf類型0x08)是由一個數組組成,數組中的各個元素是由不同類型組成。(The SWF file format uses 8-bit, 16-bit, 32-bit, 64-bit, signed, and unsigned integer types. All integer values are stored in the SWF file by using?little-endian byte order.FLV files, unlike SWF files, store multibyte integers in big-endian byte order.)
data tags基本格式:


data tag數據組成(名字+數據):

上圖中的數據分析如下:
0x12 data tag的類型標志.
000152 data tag的長度
000000 時間戳
00 時間戳擴展
000000 流id

0x02 data object的類型標志
000A object name的長度
6F6E4D65746144617461 object name(onMetaData)
08 第二個amf. data array的類型標志
0000000E 數組的長度
000D object name的長度
617564696F6461746172617465 object name(audiodatarate)
00 double類型數據標志
404C354DDA204355 double類型的數據值

2:如下圖為?視頻tag
視頻 tags基本格式:


視頻tags的數據:
/*----------------------------

幀類型 4bit
1: 關鍵幀keyframe(視頻中的關鍵幀,數據存儲的是整個畫面完整的數據,可以提取它來生成圖片)
2: 中間幀inter frame(關鍵幀之間的狀態,不完整的畫面數據,需要依靠前面幀的數據生成)
3: 可任意使用的中間幀disposable inter frame(H.263 only)

視頻編碼id 4bit
2: Sorenson H.263(mencoder轉換所使用的視頻編碼)
3: Screen video
4: On2 VP6
5: On2 VP6 with alpha channel
6: Screen video version 2

視頻數據?
If CodecID = 2
H263VIDEOPACKET
If CodecID = 3
SCREENVIDEOPACKET
If CodecID = 4
VP6FLVVIDEOPACKET
If CodecID = 5
VP6FLVALPHAVIDEOPAC
KET
If CodecID = 6
SCREENV2VIDEOPACKET

3:如下圖為音頻tag
音頻tags基本格式:
/*---------------------------
tag數據大小 3個字節的音頻數據大小?
tag時間戳 3個字節tag數據應用的時間(毫秒)
tag時間戳擴展 1個字節的時間戳擴展,讓時間戳變成4字節,本字節作為時間戳的高位.
streamID 3個字節的類id,總是0
//-----------------------------------------------------------------------------------------------------------
音頻tags的數據:
音頻格式的數據的組成如下:
音頻格式 4bit 0是未壓縮的,1是ADPCM,2是mp3,5是Nellymoser 8kHz,6是Nellymoser.
音頻率 2bit 0 = 5.5 kHz
?? 1 = 11 kHz
?? 2 = 22 kHz
?? 3 = 44 kHz
音頻大小 1bit 0 = snd8Bit
?? 1 = snd16Bit
音頻類型 1bit 0 = sndMono
?? 1 = sndStereo
音頻數據 1個字節的音頻數據大小,不同的音頻數據格式

Nellymoser 8kHz 是一個特殊的類型—8kHz取樣率在其它格式中不被支持.當音頻的格式是Nellymoser 8kHz mono的時候,聲音率和聲音類型被忽略了. 對于其它的 Nellymoser取樣率,音頻格式和音頻率照常.
參考資料:
flv文件格式解讀:www.roading.net/blog/post_102.html
flv相關資源:blog.csdn.net/everlastinging/archive/2007/12/15/1939117.aspx
SWF and FLV File Format Specification License Agreement(flv格式文檔下載):www.adobe.com/licensing/developer/fileformat/license/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455318.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql-5.7中的innodb_buffer_pool_prefetching(read-ahead)詳解

一、innodb的read-ahead是什么: 所謂的read-ahead就是innodb根據你現在訪問的數據,推測出你接下來可能要訪問的數據,并把它們(可能要訪問的數據)讀入 內存。 二、read-ahead是怎么做到的: 1、總的來說read-ahead利用的是程序的局部…

python compare excel_python簡單操作excle的方法

Python操作Excle文件:使用xlwt庫將數據寫入Excel表格,使用xlrd 庫從Excel讀取數據。從excle讀取數據存入數據庫1、導入模塊:import xlrd2、打開excle文件:data xlrd.open_workbook(excel.xls)3、獲取表、行/列值、行/列數、單元值…

collections系列

class Counter(dict):  Counter類繼承dict類、繼承了dict的所有功能計數器: 例:import collections obj collections.Counter(sdkasdioasdjoasjdoasd) print(obj)得:Counter({s: 5, d: 5, a: 4, o: 3, j: 2, k: 1, i: 1}) 拿到前幾位&…

Python中的虛擬環境-virtualenv

更低層次: virtualenv virtualenv 是一個創建隔絕的Python環境的 工具。virtualenv創建一個包含所有必要的可執行文件的文件夾,用來使用Python工程所需的包。 它可以獨立使用,代替Pipenv。 通過pip安裝virtualenv: $ pip install virtual…

mp4文件格式解析(一)

原文地址:mp4文件格式解析(一)作者:可下人間目前MP4的概念被炒得很火,也很亂。最開始MP4指的是音頻(MP3的升級版),即MPEG-2 AAC標準。隨后MP4概念被轉移到視頻上,對應的是…

shiro身份驗證測試

2019獨角獸企業重金招聘Python工程師標準>>> 一、登錄驗證 1、首先在shiro.ini里準備一些用戶身份/憑據,后面這里會使用數據庫代替,如: [users] [main] #realm jdbcRealmcom.learnging.system.shiro.ShiroRealm securityManager…

shell if多個條件判斷_萌新關于Excel VBA中IF條件判斷語句的一點心得體會

作者:金人瑞 《Excel VBA175例無理論純實戰教程》學員最近正在學習鄭廣學老師的VBA 175例教程,這是一篇新手向的文章,也是一個新手的總結,高手可以批評文章中的不足之處,也可以無視,VBA中的IF判斷, 判斷一般起到控制作…

Django筆記01-基礎:一個完美主義的web框架

淺談Web框架 一,什么是框架? 軟件框架就是為實現或完成某種軟件開發時,提供了一些基礎的軟件產品, 框架的功能類似于基礎設施,提供并實現最為基礎的軟件架構和體系 通常情況下我們依據框架來實現更為復雜的業務程序開發 一個字,框架就是程序的骨架 二,框架的優缺點 可重…

mysql存儲引擎的一點學習心得總結

首先我們應該了解mysql中的一個重要特性——插件式存儲引擎,從名字就能夠看出在mysql中,用戶能夠依據自己的需求隨意的選擇存儲引擎。實際上也是這樣。即使在同一個數據庫中。不同的表也能夠使用不同的存儲引擎。Mysql中支持的存儲引擎有非常多種&#x…

常見音視頻格式(轉載)

Contents 1 MPEG 系列 1.1 MPEG-1 1.2 MPEG-2 1.3 MPEG-4 1.4 MPEG-4 AVC 1.5 MPEG Audio Layer 1/2 1.6 MPEG Audio Layer 3 1.7 MPEG-2 AAC 1.8 MPEG-4 AAC 1.9 MPEG-4 aacPlus 1.10 MPEG-4 VQF 1.11 mp3PRO 1.12 MP3 Surround 2 DVD系列 2.1 Dolby Digital AC3 2.2 Dolby D…

編程語言難度排名_谷歌排名第一的編程語言,小學生拿來做答題,分分鐘鐘搞定高難度算法!...

點擊上方藍色文字關注我們吧谷歌排名第一的編程語言時什么?毫無疑問:肯定是 Python。 也難怪,作為大數據時代和人工智能時代的必備語言,Python 的優點太多了,語言簡潔、易學、開發效率高、可移植性強...... 另外&#…

poj 2484 A Funny Game

題目:http://poj.org/problem?id2484 一,題意: n個硬幣圍成一個圈,Alice與Bob輪流從圈中取硬幣。每次能夠取一枚或者連續的兩枚。 硬幣取走后留下的空位不用填補,空位相隔的兩個硬幣視為不相鄰。Alice第一個開始取。 …

58到家MySQL軍規升級版

一、基礎規范 表存儲引擎必須使用InnoDB 表字符集默認使用utf8,必要時候使用utf8mb4 解讀: (1)通用,無亂碼風險,漢字3字節,英文1字節 (2)utf8mb4是utf8的超集&#…

jsp 中包含 一個路徑為變量的文件

<head><base href"<%basePath%>"><% String fileroot"MyJsp.jsp"; %> </head><body><jsp:include page"<%fileroot %>" ></jsp:include></body>

FFMPEG中H.264的算法文檔--整理自ffmpeg論壇等

xchg_mb_border() 交換 MB 邊界的像素。閱讀代碼可知&#xff0c;交換雙方為邊界緩存 (left_border,top_borders) 與重建圖象中的相應數據。其中 xchg 參數是否為 1 決定&#xff0c;在從邊界緩存賦值到重建圖象的同時&#xff0c;是否保存重建圖象的數據到邊界緩存。 此函數僅…

python局部靜態變量_全局變量、局部變量和靜態變量

全局變量和局部變量在寫代碼時需要區分清楚&#xff0c;不然會出大問題。不同語言定義不同范圍的變量的寫法有很大的區別。那么靜態變量是在什么場景下用到呢&#xff1f;我們來假設這樣一個場景&#xff1a;在函數內部定義的變量&#xff0c;當程序執行到它的定義處時&#xf…

【轉載】fullpage.js學習

參考網址&#xff1a;http://www.dowebok.com/77.html 上面有詳細介紹及案例展示&#xff0c;很不錯哦&#xff0c;可以先去看看demo 一、簡介 fullPage.js 是一個基于jQuery的插件&#xff0c;它能夠很方便、很輕松的制作出全屏網站&#xff0c;主要功能有&#xff1a; 1.支持…

Deepin 下安裝 LAMP

ubuntu/deepin linux 下使用 apt-get 安裝所需套的軟件 LAMP 1. 安裝 apacache2 apt-get install apache2 配置文件&#xff1a;/etc/apache2/apache2.conf service apache2 start service apache2 stop service apache2 restart 2. 安裝 mysql sudo apt-get install my…

webpack打包測試_webpack入門筆記(一)

webpack 是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。當 webpack 處理應用程序時&#xff0c;它會遞歸地構建一個依賴關系圖(dependency graph)&#xff0c;其中包含應用程序需要的每個模塊&#xff0c;然后將所有這些模塊打包成一個或多個 bundle。webp…

[js高手之路] 跟GhostWu一起封裝一個字符串工具庫-擴展字符串位置方法(4)

本文&#xff0c;我們接著之前的框架繼續擴展&#xff0c;這次擴展了一共有5個與字符串位置相關的方法 between( left, right ) 返回兩個字符串之間的內容&#xff0c; 如果第二個參數沒有傳遞&#xff0c;返回的是找到的第一個參數 之后 到 字符串結尾的所有字符串 如果第二個…