为啥子会有这个玩意呢,因为发现直接上传MP4等格式的视频,在安卓机上可以完全没有问题的播放,但是在IOS上面就不能播放了,这是一个很严重的问题。
本次用到的软件为FFMPEG;这是一个强大的视频视频处理软件。
因为本公司是windows服务器,所以linux上没有测试过。
下面开始感觉很low的解决办法:
$v=$_FILES['video'];
$name=$v['name'];
//给视频取一个新名字
$new=$this->num();
//这是在取出上传视频的后缀名
$hou=explode('.',$name)[1];
//拼接新文件
$imgname=$new.'.'.$hou;
$tmp=$v['tmp_name'];
//选择保存的路径
$filepath='Public/ss/';
$url=$filepath.$imgname;
//保存文件
move_uploaded_file($tmp,$url);
//这一步是在干啥呢,因为我发现用FFMPEG这个软件他支持用绝对路径来写文件路径,所以咯--现在开始就low起来了
//获取当前执行文件的绝对路径
$a=__FILE__;
//根据自己的框架,把上面获取到的绝对路径返回上一层,一次dirname就是返回一次
$c=dirname(dirname(dirname(dirname($a))));
//然后你自己知道结果把你上传上来的视频的绝对路径获取到了
$bt="$c/Public/ss/".$imgname;
//判断是不是MP4格式的视频不是就先转换到MP4
if($hou!='mp4'){
//如果现在不是MP4格式的视频,那么就先把它转化成MP4格式
$old="$c/Public/vi/".$this->num().".mp4";
$cmd="FFMPEG -i$bt-c:v libx264 -strict -2$old";
//这个是调用命令框来执行这个代码
exec($cmd,$i,$v);
//把转化成MP4格式的视频再进行m3u8切片,这样的文件才能让安卓跟苹果同时都能看到视频
$cmd="ffmpeg -i$old-profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls C:\Users\Administrator\Desktop/".$this->num().".m3u8";
exec($cmd,$i,$v);
}else{
//直接就把MP4格式的视频切片
$cmd="ffmpeg -i$bt-profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls C:\Users\Administrator\Desktop/".$this->num().".m3u8";
exec($cmd,$i,$v);
}
其实可以把$cmd打出来看,如果结果是int(0),那么就说明执行成功了。至于linux系统,你们就自己测试吧,还有就是ffmpeg的安装就百度吧。
切记把ffmpeg加入到环境变量中,windows服务器
网友评论