视频文件上传服务器使用FFmpeg自动切片成m3u8

程序运行环境:lnamp

centos 6.8 nginx 1.6 apache 2.4 mysql 5.5 php 5.6

遇到问题:

1,js 上传文件,由于文件服务器不是本地服务器,单独配置的文件服务器,js 跨域问题解决

2,视频上传限制修改 centos 上修改起来简单,只需要修改php.ini 

upload_max_filesize = 4000m
post_max_size = 4000m

重启服务 生效解决。

windows server 上 IIS 要修改限制,另外还有站点文件权限问题。头痛的事情挺多。如果是windows有问题可以发过来看下

3,php视频切片

开始:

下载调试 上传视频js ,我这里用的是github 上的 jquery fileupload

插件下载地址:https://github.com/blueimp/jQuery-File-Upload/

6c8e4888.png

bf96dbac.png

配置上传文件URL地址,设置最大上传限制,文件类型,文件上传成功回调。

2,Centos视频切片

安装ffmpeg

    1,先安装依赖 yasm

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make
make install

    2,安装 ffmpeg

wget http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.gz
tar -zxvf ffmpeg-3.4.1.tar.gz
cd ffmpeg-3.4.1
./configure
make
make install

     3 , 安装成功 

[root@iZ25o0ipjpmZ ~]# ffmpeg -version
ffmpeg version 3.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17)
  configuration: 
  libavutil      55. 27.100 / 55. 27.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 40.101 / 57. 40.101
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 46.102 /  6. 46.102
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
Unrecognized option '-version'.
Error splitting the argument list: Option not found
[root@iZ25o0ipjpmZ ~]#


不废话了直接上切片处理代码:

1、转码 >>mp4

if(PHP_OS == 'WINNT'){
    $cmd = $_SERVER['DOCUMENT_ROOT']."/ffmpeg.exe -i ".$file_path." -y -vcodec copy ".$new_file_path;
}else{
    $cmd = "ffmpeg -i ".$file_path." -y -vcodec copy ".$new_file_path;
}

2、切片 自动截视频封面

if(PHP_OS == 'WINNT'){
    $cmd_ts = $_SERVER['DOCUMENT_ROOT']."/ffmpeg.exe -i ".$file_path." -c: copy -f segment -segment_list ".$new_path.".m3u8 -segment_time 1 ".$new_path."%03d.ts";
    $cmd_thumb = $_SERVER['DOCUMENT_ROOT']."/ffmpeg.exe -i ".$file_path." -ss 00:00:05 -f image2 ".$thumbs;
}else{
    $cmd_ts = "ffmpeg -i ".$file_path." -c: copy -f segment -segment_list ".$new_path.".m3u8 -segment_time 1 ".$new_path."%03d.ts";
    $cmd_thumb = "ffmpeg -i ".$file_path." -ss 00:00:05 -f image2 ".$thumbs;
}

WINNT 判断是否为windows服务器

linux系统测试命令:

转码:ffmpeg -i zxyx.mp4 -y -vcodec copy zxyx/a.mp4
切片:ffmpeg -i zxyx.mp4 -c: copy -f segment -segment_list zxyx/zxyx.m3u8 -segment_time 1 zxyx/zxyx.m3u8%03d.ts

如果服务器环境没问题的话,基本上就这样搞定了。