前段时间搭建了一个seafile私有云网盘,体验不错,随后发现了问题,播放视频的时候特别卡顿。
服务器配置网速是上行10Mbps,客户端配置是30Mbps下行,seafile使用的存储后端是阿里云OSS
内网与OSS连接速度测试:
几乎快达到了1Gbps的速度。
客户都连接服务器速度测试(服务器端速度):
可见,播放一般视频绰绰有余。
后来通过F12控制台发现,视频在客户端需要下载完毕才能开始播放。在网上找到了大佬的解决方法,是因为视频元信息存放在了视频文件的末尾,所以必须加载整个文件,读取到元信息,才能播放。
同时,找到了一个工具,叫做qt-faststart(点击即可下载Windows版本),可以把元数据移动到文件的开头,使得先加载开头,获取元数据,即可实现边加载边播放。
如果你有大量的视频需要转换,我这里写了个小python脚本,如果你在Windows下,把qt-faststart.exe复制到C:\Windows文件夹下,如果是linux,把编译好的文件复制到/bin文件夹下即可使用
#encoding:utf-8
import os
ORI_DIR = 'E:/BaiduNetdiskDownload/'
TRA_DIR = 'E:/FFOutput/'
for i in os.listdir(ORI_DIR):
cmd = "qt-faststart %s%s %s%s" % (ORI_DIR, i, TRA_DIR, i)
print cmd
os.system(cmd)
这样处理过的视频就可以很快的打开,实现web视频边加载边播放
注意,如果提示
last atom in file was not a moov atom
可以使用
ffmpeg -i souce_file.mp4 -acodec copy -vcodec copy target_file_1.mp4
来解决