以前咱們介紹了在線短視頻秒播優化的方方面面,從服務器,cdn部署接入,數據鏈接/獲取,客戶端緩存,出幀策略,到視頻文件I幀位置等。android
今天從視頻文件格式的另一個角度介紹,MP4文件的box排列順序是如何影響,在線短視頻的播放以及秒播優化的。segmentfault
-
MP4文件中的全部數據都裝在box中 (iso-14496-12/14)緩存
-
(QuickTime中爲atom)即mp4是由若干個box組成的服務器
先簡單介紹幾個重要的box,以便諸位在後續學習時心中有數:微信
-
一、 ftyp box,在文件的開始位置,描述的文件的版本、兼容協議等;機器學習
-
二、 moov box,這個box中不包含具體媒體數據,但包含本文件中全部媒體數據的宏觀描述信息,moov box下有mvhd和trak box。mvhd中記錄了建立時間、修改時間、時間度量標尺、可播放時長等信息。trak中的一系列子box描述了每一個媒體軌道的具體信息。工具
-
三、 moof box,這個box是視頻分片的描述信息。並非MP4文件必須的部分,但在咱們常見的可在線播放的MP4格式文件中(例如Silverlight Smooth Streaming中的ismv文件)確是重中之重。學習
-
四、 mdat box,實際媒體數據。咱們最終解碼播放的數據都在這裏面。大數據
-
五、 mfra box,通常在文件末尾,媒體的索引文件,可經過查詢直接定位所需時間點的媒體數據。 優化
MP4文件的生成與解析,播放
兩個重要的box,moov and mdat 1.生成:先寫入mdat後寫入moov,所以絕大多數工具都會把moov數據放到mdat後邊,好比android的mp4writer,ffmpeg等工具 2.解析:解析播放的時候,先讀取moov,才能解析mdat
播放影響
1.本地播放,沒有影響,播放軟件能夠先seek到末尾,讀取moov 2.在線播放 (1).須要http服務器支持seek (2).服務器不支持seek,是個很是不友好的方案,要先把數據下載完成才能播放(不管下載到哪裏,新服務器,本地內存或存儲) (3).(1)和(2)多多少少會引入延時,尤爲(2),影響秒開
市面上短視頻mp4 box排列
-
抖音,火山等小視頻moov排在前邊,不用seek;
-
快手,360等moov排在後邊須要seek;
在線短視頻MP4 moov box排在後邊的解決方案 1.修改文件把moov box排在前面,在MP4在設備上生成的時候或傳到服務器上後進行,這個方法一勞永逸,還能提高秒開的速度 工具:
ffmpeg option faststart qt-faststart
原創做者:Walker.Xu,原文連接:http://www.javashuo.com/article/p-btlzxvmk-gr.html
歡迎關注個人微信公衆號「碼農突圍」,分享Python、Java、大數據、機器學習、人工智能等技術,關注碼農技術提高•職場突圍•思惟躍遷,20萬+碼農成長充電第一站,陪有夢想的你一塊兒成長。