《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > MP4共享FLV數據研究與實現
MP4共享FLV數據研究與實現
來源:微型機與應用2014年第3期
李興華,楊天奇
(暨南大學 計算機應用技術系,廣東 廣州 510632)
摘要: MP4共享FLV數據的研究旨在以極小存儲空間高效方便地實現MP4文件與FLV文件的數據共享,滿足主流移動平臺的在線視頻播放。通過研究發現,只需要利用FLV文件1%左右的存儲空間,就可以支持移動設備觀看FLV視頻內容。MP4共享FLV數據具有很高的理論價值和現實意義。
Abstract:
Key words :

摘  要: MP4共享FLV數據的研究旨在以極小存儲空間高效方便地實現MP4文件與FLV文件的數據共享,滿足主流移動平臺的在線視頻播放。通過研究發現,只需要利用FLV文件1%左右的存儲空間,就可以支持移動設備觀看FLV視頻內容。MP4共享FLV數據具有很高的理論價值和現實意義。
關鍵詞: 視頻網站;MP4;FLV;移動設備;數據共享

 進入Web 2.0時代后,國外的Youtube,國內的優酷、土豆網等視頻分享網站快速發展,FLV因為占用的存儲空間小、加載速度快,已經成為各主流視頻網站存儲視頻的主要格式。隨著移動互聯網的發展,越來越多的人喜歡在移動設備上觀看在線視頻,而MP4格式[1]則是IOS、Android等主流移動智能操作系統原生支持的視頻格式。將FLV視頻轉化為MP4視頻,是視頻網站為支持這些移動設備在線觀看的傳統方法。這種方法的缺點是對于每個FLV視頻需要轉化出一個大小相當的MP4文件,占用服務器巨大的存儲空間[2-3],同時需要耗費較多的轉化時間。現在越來越多的公司采用HTTP Live Streaming(HLS)[4]將流媒體切分為若干Transport Stream(TS)片段,然后通過一個擴展的m3u8播放列表文件將這些TS片段集中起來供客戶端播放器接收。其優點是用戶切換進度更快,臨時文件小;缺點是生成和分發比較復雜,生成高清視頻TS片段時服務器負載較高。MP4格式共享FLV格式數據的優勢是它能以極小存儲空間高效方便地滿足主流移動平臺的在線視頻播放。
1 相關技術
1.1 FLV視頻格式簡介

 Flash Video(FLV)[5]流媒體格式是隨著Flash MX的推出而發展而來的視頻格式。FLV文件占用的存儲空間非常小。FLV還有解碼效率高和視頻清晰等優點。因此,主要的在線視頻網站均使用FLV格式文件存儲視頻,為用戶提供優質的在線視頻服務。
 FLV是一種全新的流媒體視頻格式,它利用了網頁中廣泛使用的Flash Player平臺,將FLV視頻整合到Flash動畫中。只要訪問者能夠正常觀看Flash動畫,就能觀看FLV格式視頻,而無需再額外安裝其他視頻插件。因此,FLV格式的使用給視頻的傳播帶來了極大便利。
 FLV是一個二進制文件,文件符合流式傳輸的特點,由文件頭(FLV Header)和文件體(FLV Body)組成。FLV文件結構圖如圖1所示。文件頭定義了Flash文檔的版本、是否壓縮、文件大小、場景大小、幀率和總幀數[6]。文件體由大量的標簽(Tag)組成,文件體的最后是一個結束標簽。Tag又可以分成Audio和Video和Script 3類,分別代表音頻流、視頻流和腳本流。每一個Tag都包括一個標簽頭(Header)和一個數據體(Body)。

 通過解析FLV格式而得到的Tag內容里的音視頻數據就是MP4文件格式所需要共享的FLV文件格式的內容。
由于主流移動平臺對Flash Player支持不夠,存儲為FLV格式的視頻不能有效滿足移動平臺觀看,而MP4格式卻是可以得到廣泛支持的視頻格式,因此將這些FLV視頻轉化成MP4格式是視頻網站的傳統做法。
1.2 MP4視頻格式簡介
 MP4[7],全稱MPEG-4 Part 14[8],是一種使用MPEG-4的多媒體電腦檔案格式,后綴名為.mp4。
 MP4視頻文件封裝格式是基于QuickTime[8]容器格式定義的。MP4文件格式是一個十分開放的容器,幾乎可以用來描述所有的媒體結構,MP4文件中的媒體描述與媒體數據是分開的,并且媒體數據的組織也很自由,不一定要按照時間順序排列。
 MP4文件格式是以面向對象的架構來描述文件的,對象被稱為box。MP4文件中的所有數據都裝在box中,也就是說,MP4文件由若干個box組成。每個box的結構都由大小、類型和內容組成。一個box還可以包含別的box,這種分層結構以及box的自身結構使得box的插入和刪除十分方便。
 同時,MP4也支持流媒體[9]。MP4目前被廣泛用于封裝H.264[10]視頻和Advanced Audio Coding(AAC)音頻,是高清視頻的代表。
 通過對FLV和MP4的介紹可知,如果能將FLV轉化MP4的傳統方法加以創新,使MP4共享FLV數據,不僅能在存儲空間上大大節省成本,計算效率也能大幅度提高,具有很高的研究價值和現實意義。
2 MP4文件共享FLV文件媒體數據
2.1 MP4格式特點

 MP4由一系列的box組成,box是一種獨特類型的由識別符和長度構成的面向對象的建筑塊,也稱為atom。表2列出了常見的box類型。

 通常來說,一個MP4文件主要包含兩個atom,分別是存儲元數據的Movie atom(moov)和存儲媒體數據的Media Data atom(mdat)[11-14]。
 一個MP4文件由一個ftyp類型的box開始,ftyp包含關于文件的一些信息。ftyp之后有且只有一個moov類型的box,它是一種容器box,子box包含了媒體的元數據信息。MP4文件的媒體數據包含在mdat類型的box中,該類型的box也是容器box,可以有多個子box。圖2展示了MP4文件的結構樹。

 moov包含了文件媒體的所有元數據信息,moov容器box通常在靠近該文件的開頭或結尾地方。
 trak是一個container box,其子box包含了該軌道的媒體數據引用和描述。一個MP4文件中的媒體可以包含多個track,并且至少有一個軌道,這些軌道之間彼此獨立,有各自的時間和空間信息。
 mdia容器的軌道媒體信息定義了軌道媒體類型。
 minf容器包含了所有關于軌道媒體中定義特征信息的對象。
stbl樣品表box包含了軌道里所有媒體樣本的時間和數據索引信息。通過樣本表,可以定位樣本的時間,確定它們的類型(例如I-幀),并確定它們的大小以及文件中的偏移量。
 stsc提供樣本塊的部分數據的偏移信息表。媒體數據里的樣本被分組為塊。塊可以是不同的大小,塊內的樣本可以具有不同的尺寸。這個表可以用于找到塊的位置以及相關的樣本描述。偏移信息表是緊湊的編碼。每個條目給出運行塊的第一個塊的索引。
 stsz包含樣本數和一張描述各個樣本大小(以字節為單位)的表。
 stso、co64對象包含一張塊的偏移表,表里給出了文件中每個塊的索引,允許使用32位或64位偏移,64位偏移在文件超過4 GB時使用。
2.2 MP4文件共享FLV文件數據
 MP4文件中的媒體描述與媒體數據是分開的[6],MP4的媒體數據的組織也很自由,可以不用按照時間順序排列。MP4文件共享FLV文件媒體數據關鍵就在于生成一個共享FLV媒體數據的MP4文件頭部,稱為共享MP4頭部。
 共享MP4頭部在媒體描述中的stco box記錄每個媒體數據數據塊在完整MP4文件中位置,完整MP4文件由共享MP4頭部和對應的FLV文件組成。即在原有FLV文件的基礎上,再增加一個只有FLV文件1%左右大小的共享MP4頭部,就可以共享FLV文件的視頻內容。
 對于在線視頻網站,可以不用在視頻服務器里為每個FLV視頻轉化一個完整的MP4視頻,視頻網站可以通過生成共享MP4頭部共享FLV視頻數據,節省巨大的存儲空間。
 對于一個已經存在FLV文件格式的視頻,只需要用共享工具生成對應的共享MP4頭部,就可以同時滿足對這個視頻的FLV和MP4兩種格式的訪問需求。
當用戶通過移動設備觀看某個視頻時,視頻網絡的服務器只需要順序返回這個視頻的共享MP4頭部和FLV視頻文件即可。
 MP4文件共享FLV文件數據方案以極小的存儲代價和計算代價,滿足了移動設備觀看已經存在的海量FLV視頻文件的需求。
2.3 基于FFMPEG庫的共享工具簡介
 MP4文件共享FLV文件數據的共享工具主要是在開源項目FFMPEG的基礎上實現的。
FFMPEG是一個非常優秀的開源免費跨平臺的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據所選擇的組件)。它提供了錄制、轉換以及流化音視頻的完整解決方案。
 FFMPEG是一套可以用來記錄、轉換數字音頻、視頻,并能將其轉化為流的開源計算機程序。它包括了目前領先的音/視頻編碼庫libavcodec等。
 共享工具主要使用了FFMPEG庫里的libavformat、libavcodec和ffmpeg項目。libavformat用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構和讀取音視頻幀等功能;libavcodec用于各種類型聲音/圖像編解碼;ffmpeg項目提供的一個工具可用于格式轉換、解碼等。
2.4 共享工具生成共享MP4文件
 共享工具生成共享MP4文件,首先需要將FLV文件解封裝提取出FLV文件中的視頻信息,然后將這些視頻描述信息寫入共享MP4文件中。
 在FLV文件中解析出的每個標簽里,數據區的內容是需要共享的內容,也是FLV文件里的最主要組成部分。將FLV文件中每個標簽的數據區在FLV文件中的偏移值記錄在共享MP4文件的stco對象中,將FLV的每個標簽的數據區長度記錄在共享MP4文件的stsz對象中。
 共享MP4文件的mdat對象的大小就是FLV文件的大小,mdat對象的內容則不需要寫入共享MP4文件,因為mdat對象內容正是對應的整個FLV文件。共享MP4文件和對應的FLV文件可以組成一個完整的MP4文件。
共享工具需要生成的共享MP4文件是一個除去mdat對象內容的MP4文件。在初始生成共享MP4文件過程中,需要在共享MP4文件的stco對象中記錄對應FLV中每個音視頻標簽的內容數據在FLV文件的位置,即共享MP4文件stco對象存儲著FLV文件中標簽的內容的偏移值,如圖3所示。


2.5 修正共享MP4文件
 共享工具初始生成的共享MP4文件中的stco對象記錄的偏移值是在FLV文件中的偏移值,不是共享MP4文件和FLV文件組合成的完整MP4文件中的偏移值,因此需要修正共享MP4文件的stco對象中記錄的原始偏移值。需要將共享MP4文件的stco對象中的原始偏移值加上共享MP4文件的大小,如圖4所示,這樣得出的位置值才是共享MP4文件和對應FLV文件組合成的完整MP4文件里的真實偏移值。

 本文主要研究了一種傳統流媒體文件FLV在適應移動設備上播放的一種高效、節約成本的可行性方案。MP4共享FLV數據利用MP4和FLV兩種格式的特點達到數據共享的目的,從而滿足了移動設備在線觀看的需求。
 相對于直接轉換MP4文件的方式,MP4文件共享FLV文件數據方案節約了近一半的存儲空間,并且對于計算的消耗極小。對于擁有上千萬部FLV視頻內容的視頻網站,利用共享數據方案可節省上千萬元的存儲成本,且維護起來非常方便、可靠。相對于TS流方案,MP4文件共享FLV文件數據方案對源服務器的負載壓力小很多,且生成、分發以及維護也簡單很多。
 由于MP4文件播放前需要加載完整個頭部才能播放,因此對于低質量的長視頻文件,利用HLS協議提供服務體驗會更好;對于高清短視頻,使用MP4文件共享FLV文件數據方案是最佳選擇。
參考文獻
[1] SINGER D, BELKNAP W, FRANCESCHINI G. ISO media file format specif ication[R]. ISO/IEC JTC1/SC29/WG11 MPEG01/N4270-1, 2001.
[2] 陳利,呂格莉,潘正清.流媒體視頻存儲服務器設計與研究[J].計算機工程與設計,2010,31(4):903-906
[3] 謝建國,陳松喬.視頻存儲技術發展綜述[J].計算機工程與應用,2002,38(9):17-19.
[4] 維基百科.http://zh.wikipedia.org/wiki/HTTP_ Live_Streaming,2013-03-14.
[5] Adobe Macromedia video file format specification version10.http://download.macromedia.com/f4v/video_file_format_spec_v10_ 1.pdf,2013-04.
[6] 王奎澎,劉建輝.Flv文件格式及其嵌入式應用[J].計算機系統應用,2010,19(3):190-191.
[7] ISO/IEC 14496-14, information technology-coding of audio-visual objects-part 14: MP4 file format[S].
[8] ISO/IEC 14496-10, information technology-coding of audio-visual objects-part 10: Advanced video coding[S].
[9] Apple. QuickTime file format specification[S].
[10] THOMAS W, GARY S, GISLE B, et al. Overview of the H.264 PAVC video coding standard[J]. IEEE Transactions on Circuits and Systems for Video Technology, 2003(7):560-576.
[11] ISMA. Internet streaming media alliance implementation specification(Version 2.0)[M].
[12] 周瑾,支琤,宋利.流媒體應用TS和MP4格式分析[J].信息技術,2007(7):16-18.
[13] 趙麗娜,韓冬梅,薛華成.一種有效加密MP4文件的方法[J].計算機應用與軟件,2010,10(10):22-23.
[14] 鄭翔,周秉峰,葉志遠,等.流文件MP4文件的核心技術[J].計算機應用,2004(5):76-78.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 亚洲国产日韩综合久久精品 | 欧美性猛交一区二区三区精品 | 午夜资源站 | 另类视频欧美 | 手机看片精品高清国产日韩 | 亚洲高清一区二区三区久久 | 三级黄色在线视频 | 日本波多野结衣字幕久久 | 在线亚洲精品防屏蔽 | 免费看三级全黄 | 日韩精品麻豆 | 免费网站在线观看国产v片 免费网站看v片在线成人国产系列 | 色老头在线官方网站 | 星空影院免费观看韩国三集 | 91视频 88av | 欧美成人久久一级c片免费 欧美成人看片 | 亚洲综合插 | 日本一区深夜影院深a | 欧美日本一本 | 免费看黄网站在线 | 久久夜色撩人精品国产 | 伊人网在线视频观看 | 欧美一区二区视频三区 | 午夜影院免费体验区 | 久久国产精品亚洲一区二区 | 午夜寂寞影院视频在线观看 | 免费观看黄色的网站 | 欧美成人三级网站在线观看 | 亚洲黄视频在线观看 | 亚洲日本香蕉 | 日本三级免费观看 | 日本人成大片在线 | 制服丝袜日日 | 性网站免费 | 天天摸日日添狠狠添婷婷 | 日韩精品免费一区二区三区 | 在线免费黄色片 | 成人69视频在线观看免费 | 男女在线视频 | 越南一级毛片免费 | 欧美怡红院免费全视频 |