由于楼主公司生产的设备性能不足,在进行播放高质量的MP4视频或者其他格式的视频时,会导致设备黑屏。所以必须由后端来解决视频转码的问题。通过搜索,可以通过FFmpeg来实现视频压缩的功能。当实现视频压缩功能的时候,又出现了一个问题,那就是每次上传视频时,单个视频处理很快,多个视频同时上传时就会出现同时启动多个FFmpeg进程,导致cpu性能被沾满如图所示
可以看出 多个进程同时启动会导致服务器性能急剧下降,为了解决这个问题,可以通过Redis来实现一个队列功能。当我们每次上传一个文件时把文件信息存储到一个列表中,然后通过redis队列的特性,左进右出来实现,我们可以监听redis队列中是否有值。从而实现我们要实现的任务。
ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0); // 设置执行不超时
$interval = 50; //毫秒值
while (true){ //死循环,实现数据实时获取
$idle = 1;
if($redis->LLen("video")!=0){ //如果有值的话把里面的值取出来
$value = $redis->rpop('video');//
if($value){
$values = explode(',',$value);
mp4($values);
//可以传递其他数据实现业务
usleep($interval * ($idle % 10)); //延迟代码执行若干微秒
$idle++;
function mp4($data){
usleep(50000); //这个操作是为了防止视频上传后还没有移动到指定上传的目录中而找不到文件
$file= substr($data[1],1,strlen($data[1]));
while(true){
if(!is_file($file)){
break;
$dir = substr($data[2],1,strlen($data[2]));
if($data[0]==22){
$cmd = "ffmpeg -i $file -s hd1080 -b:v 4000k $dir";//这段代码是为了把分辨率超过1080p的转成1080p
}else{
$cmd = "ffmpeg -i $file -b:v 4000k $dir";
$res = true;
if(system($cmd)==0){ //使用system()执行shell命令,执行成功的话返回值为0
$res = false; //退出循环
}while($res);
return 1;
为了能够实现每次用户上传的视频文件都能够进行队列处理,所以不能够通过请求的方式来实现,不能通过TP框架或者laravel框架来进行,因为执行压缩命令往往耗时,而通过请求会往往会出现代码执行一半就会报错的问题,比如Tp框架会出现找不到URL
的错误。所以我们得通过 使用sell命令来执行我们的代码,如我的文件名为video.php 在Linux下可以通过执行
php video.php 来执行。但是这个操作是终端不能再进行其他操作,在我们关闭终端时,这个进程也关闭了。所以我们可以把这个设置为守护进程,在后台一直执行,php video.php & 回车后再执行 jobs -l 就可以了
无论多少个用户上传都是按先后顺序一个一个来压缩视频,不会出现同时执行的情况。
昨天小编在网上下载了个高清画质的视频,想把它上传到网盘保存起来,却发现这个视频大小及所占空间实在是太大了,小编看着进度条过了好长一段时间才移动一小格,这要是有好几个视频文件要上传的话那可得等到什么时候啊!有没有办法让视频文件压缩一下,使视频文件所占空间没那么大呢?很明显,小编当然有办法啦!那么肯定有人会问:要是把文件压缩了,视频质量会不会变得很差啊?当然不会!告诉大家哦,我们可以自己设置压缩的视频...
高清视频文件往往体积很大,放到空间有限的移动设备上就太占地儿了。一般我们会考虑压缩视频体积,这样转输或者携带都是比较方便的。这里与大家交流下用视频压缩软件如何压缩视频文件大小的,高手路过,文中若有不足,欢迎指点补充。需明白:影响视频文件大小的因素,一是格式:AVI的最大,是WMV的近10倍,是MPEG的15倍,等等,最小的是FLV格式。基本的排序是AVI、WMV、MPEG-2 、VOB、MP4、M...
小编我这回要出差了,坐火车竟然要两天之久,时间太长了就想着要多下载几部电视剧电影好在火车上看,但是无奈手机只有18g的内存,一部电视剧还没下到一半就显示内存已满,看了一下电视剧的剧集,每一集居然有几百m,然后就想这把可不可以把视频给压缩小一点,终于功夫不负有心人,找到了一个不错的办法,在这里分享给有同样烦恼的孩子们吧。我们首先打开软件,进入软件界面,可以单击击添加视频,也可以鼠标左键点住你要操作的...
一、PHP实现转换在做视频网站的时候,最头痛的问题可能是格式转换、视频缩略图等。下面我将用PHP实现这一些功能。PHP是没有自带视频的函数,所以会用到第三方的软件工具来实现。?二、什么是FFmpegFFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库li...
$xd_file = '原视频地址路径和名';
$file = dirname(dirname(dirname(__FILE__))) . '/' . $xd_file;
$file_data = pathinfo($file);
// PHP获取视频的所有信息
$info = shell_exec("ffprobe -v quiet -print_format json -show_format -show_streams " . $file);
在php中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间;且压缩文件更小,便于网络传输,效率高,下面我们就来了解php的压缩解压相关操作在PHP中有一个ZipArchive类,专门用于文件的压缩解压相关操作在ZipArchive类中主要使用到了如下方法:1:open(打开一个压缩包文件)$zip = new \ZipArchive;$zip->open('test_new.zip...
压缩视频是很常见的,我们手机或者电脑里面的视频多了当然要选择压缩,可是我们也要选择好压缩视频的工具,有些工具只能保证给你进行压缩,不会理会你视频压缩的质量以及清晰度,那就很不舒服。我们压缩视频当然想要压缩成自己想要的样子,那就不能马马虎虎的选择压缩软件了,接下来就给大家推荐一款在线压缩视频的工具。这款迅捷PDF在线转换工具可以保证质量,保证清晰度,自定义设置自己想要的格式。步骤一:百度浏览器搜索迅...
(3)我使用的是php版本是5.6
(4)服务器环境是windows
2、误区或者说我没搞懂的,大家少走弯路,不需要php_ffmpeg.dll这个文件,不需要这个文件。这个很重要。我看到网上好多教程需要这个文件,导致我花了12个小时在找这个,昨晚搞到2点,今天到这个点才弄明白。
3、具体操作...