背景:客戶錄制文件上傳到OSS后,打開文件比較慢,想要針對此進行優化
問題現象
訪問url后需要等待加載10s左右,才出現首屏頁面。使用各種軟件均能復現(chrome、ffplay、vlc)
最終原因
研發大佬回復MP4文件moov在文件的末尾導致首屏慢
網上找的相應的解釋:
播放器在播放視頻文件時,之所以知道該怎么去解碼,以什么樣的時間間隔去顯示每一幀,是因為metadata記錄了當前視頻文件的圖像尺寸、編碼格式、幀率、碼率等等信息,播放器通過解析metadata得到了這些信息,才能控制視頻的顯示,也就是說播放器要先解析完metadata才會開始播放。
我們拿MP4作為例子來說明,不同容器的封裝在數據存儲上會存在一些差異,MP4視頻文件結構如下所示:
它對應的metadata信息稱為moov,mdat包含了音頻和視頻數據。MP4在實際制作中,moov有可能被放到了mdat后面,所以我們要保證制作出來的MP4的moov是放置在mdat前面的,這樣才可以實現邊下邊播功能。如果不是這樣,可以用FFmpeg的faststart命令(ffmpeg -i input.mp4 -movflags +faststart output.mp4)處理一下。 另外值得一提的是,如果moov比較大,播放器需要較多的時間去解析,所以在播放之前可能會出現較長的緩沖時間,特別是視頻文件較大的情況下,所以現在有些點播網站會采用每段mdat都有自己獨立的metadata的封裝方式,這樣就可實現漸進式下載和快速緩沖的效果。
使用的軟件
-
mp4info
網上有很多文章,但都是下載的軟件。
本人踩坑,大於2G的文件,在MP4info這個軟件中打開就會報錯。