
最近碰到的需求,在老平台中有个别MP4视频在播放时必须完全加载完就能播放,使得客户感受很差(现在都是边下载边播放方式),造成这样状况的缘由是拿来描述MP4文件的moov atom元数据被放到MP4文件的末尾,而大部分网络播放器都会去调用这个元数据用以确认视频尺寸,分辨率等等参数,因此只应该将MP4文件的moov atom元数据移到最前面就行,问题知道了,就能够开始缓解了,这里使用的是qt-faststart工具。
qt-faststart能够将进入MP4文件末尾的moov atom元数据转移到最前面,不过因为qt-faststart工具只能处理moov atom元数据位于MP4末尾的文件mp4播放器java版,所以必须其它软件先将moov atom元数据转移到末尾,这样好统一处理MP4文件,这里使用到了ffmpeg共具。
现在整体策略是将MP4文件通过ffmpeg处理,将moov atom元数据转移至末尾,然后使用qt-faststart工具转移至最前面。
现在以linux环境为实例介绍下实际处理步骤。
需要用到的工具:
1.yasm-1.2.0.tar.gzmp4播放器java版,安装ffmpeg时所必须的,下载地方百度一下就有,就不放了。
2.ffmpeg-3.3.3
直接官网下载压缩包

SVN
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
3.qt-faststart,因为源代码文件在ffmpeg中有,所以不需要单独下载了。
1.将yasm-1.2.0.tar.gz拷贝至linux服务器中。
2. 解压
tar zxvf yasm-1.2.0.tar.gz进入解压文件cd yasm-1.2.0
4.配置
./configure

5.编译安装
make
make install
1.将下载的压缩包拷贝至linux服务器。
2.解压
tar -jxvf ffmpeg-3.3.3.tar.bz2
3.配置
./configure --enable-shared --prefix=/usr/local/ffmpeg
prefix就是设置安装位置,一般都默认usr/local下
4.安装

make
make install
编译安装时间会很长,10分钟左右吧,装完之后可以去安装目录下查看。
这时还没有结束,现在使用的话大概会报如下错误:
ffmpeg: error while loading shared libraries: libavfilter.so.1: cannot open shared object file: No such file or directory
需要编辑/etc/ld.so.conf文件加入如下内容
/usr/local/lib
保存退出后执行ldconfig命令。
echo "/usr/local/ffmpeg/lib" >> /etc/ld.so.conf
//注意这里是你前面安装ffmpeg的路径
ldconfig

因为在ffmpeg解压完的文件中存在qt-faststart的源码,所以直接使用,位置在解压模式/tools/qt-faststart.c
进入ffmpeg解压模式执行命令
make tools/qt-faststart
会发现在tools中会出现一个qt-faststart文件(还有一个.c文件)
1.ffmpeg将元数据转移至末尾
cd ffmpeg安装路径/bin;./ffmpeg -i /opt/mp4test.mp4 -acodec copy -vcodec copy /opt/1.mp4
// /opt/mp4test.mp4为原始MP4文件路径,/opt/1.mp4为生成文件的存放路径
2.qt-faststart操作
cd ffmpeg压缩包解压路径/tools;./qt-faststart /opt/1.mp4 /opt/2.mp4
//路径如上解释
可以尝试播放1.MP4和2.MP4,前者必须加载完毕才会播放,后者可以边加载边播放。
在用户&&管理员上传视频文件时在后台处理一下上传的mp4文件就能,我这儿的方案是上传完文件后,由页面服务器后台获得到内存在中视频的地址,然后借助远程连接访问视频服务器,对该mp4文件进行如上操作,ffmpeg操作后将原文件删除并记录下文件名&路径,然后qt-faststart再根据记录的文件名&路径生成原始文件的同名文件,然后删除ffmpeg过程生成的临时文件即可。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-121614-1.html
支持