问题描述
有时候我们会遇到一些mp4视频,一开始加载播放的时候很慢,大家都会以为是网络问题导致,其实不是的。
问题原因
分析原因前,需要下载一个工具mp4info 打开加载慢的mp4文件
可以看到这个mp4视频的moov是在mdat后边,这样的视频文件如果较大,通过网络流加载播放的时候,就会在开始播放时候需要较长时间加载后才能播放
由于moovatom中包含了metadata (可以简单理解为音视频流的编码格式,码率,分辨率,等等),当moovatom 在mdatatom后边位置的时候,就会导致加载网络流的时候,客户端先要下载完mdatatom 数据才能下载到moovatom数据,那由于客户端播放器解码是要根据metadata中的信息来解码的时候,就要等moov下载数据加载完才可以,这个时候的现象就比较慢。那如何解决这个问题呢?
解决方案
可以用ffmpeg 工具来进行转码
示例命令
ffmpeg -i 源.mp4 -codec copy -movflags faststart 目标.mp4
这样转码后,moov就在mdat 的前边了,网络流播放可以加载较小的数据,获取到metadata信息后就可以解码边下载边播放了。大大提升播放体验。
适用范围
- OSS
- VOD