资讯专栏INFORMATION COLUMN

PHP+FFMPEG自动转码H264标准Mp4文件

stackvoid / 400人阅读

摘要:原文链接自动转码标准文件最近做一个在线教学网的项目,需要实现上传任意格式视频自动为标准视频,使用播放。否则请修改文件最后附上扩展

原文链接:http://www.fire-rain.com/blog/FFMPEG_H264_MP4

PHP+FFMPEG自动转码H264标准Mp4文件

最近做一个在线教学网的项目,需要实现上传任意格式视频自动为h264标准视频,使用html5播放。最终使用PHP+FFMPEG实现,在此将详细解决方案分享给大家!

配置php.ini文件
file_uploads = on ;//是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir ;//文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 1024m ;//望文生意,即允许上传文件大小的最大值。默认为2M,我们设置为1G
post_max_size = 1024m ;//指通过表单POST给PHP的所能接收的最大值,我们也设置为1G

max_execution_time = 3600 ;//每个PHP页面运行的最大时间值(秒),默认30秒,设置为一小时,因为后面转码时间很久。
max_input_time = 36000 ;//每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 8m ;//每个PHP页面所吃掉的最大内存,默认8M

文件上传插件

火焰雨推荐大家使用uploadifyUploadifyJQuery的一个上传插件,实现带进度显示。插件安装简单,此处略过。
但是有个问题需要注意,非IE浏览器session会丢失,查了很多资料,最终总结的原因是:

  

因为诸如uploadify采用的是flash客户端,它产生的useragent与浏览器的user-agent不同。

最终解决办法:

//在upmodify上传参数中加入session参数,如下:
scriptData: {"SESSION_ID":""},
// 在服务端接收页面加入以下代码:
if(@$_REQUEST["SESSION_ID"] && ($session_id=$_REQUEST["SESSION_ID"]) !=session_id()){
session_destroy();
session_id($session_id);
@session_start(); 
}

这样就解决了 FLASH 不能正确传递页面

视频格式转换

现在Linux下比较流行的视频格式转换软件是FFMPEG,FFMPEG是用于录制、截图、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。除了FFMPEG外,我们要转码成H264格式 ,还需要一个扩展。(文章最后给出所有软件包下载地址)

centos 5.4环境下安装源码安装h264扩展

  tar -xjvf x264-snapshot-20120718-2245-stable.tar.bz2 
  #进入解压后的源文件目录 
  cd x264-snapshot-20120718-2245-stable/ 
  ./configure --prefix=/usr/local --enable-shared 
  make
  make install

 //centos 5.4环境下安装源码安装ffmpeg with h264扩展
 tar -xjvf ffmpeg-2.1.1.tar.bz2
 //进入解压后目录 
 cd ffmpeg-2.1.1
 ./configure --enable-gpl --enable-libx264
 make
 make install
 //重新加载配置
 lcfonfig 
 //测试是否安装成功
 ffmpeg

如果你看到以下内容说明安装成功:

 ffmpeg version 2.1.1 Copyright (c) 2000-2013 the FFmpeg developers
 built on Dec 17 2013 23:32:40 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3)
 configuration: --enable-libx264 --enable-gpl
 libavutil 52. 48.101 / 52. 48.101
 libavcodec 55. 39.101 / 55. 39.101
 libavformat 55. 19.104 / 55. 19.104
 libavdevice 55. 5.100 / 55. 5.100
 libavfilter 3. 90.100 / 3. 90.100
 libswscale 2. 5.101 / 2. 5.101
 libswresample 0. 17.104 / 0. 17.104
 libpostproc 52. 3.100 / 52. 3.100
 Hyper fast Audio and Video encoder
 usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
 Use -h to get full help or, even better, run "man ffmpeg"

php调用ffmpeg转码视频
 $cmd = "FFMPEG  -i  uploadfile/video/test.wmv -c:v libx264 -strict -2 uploadfile/mp4/test.mp4";
 exec($cmd, $status);

运行前请确认exec函数已经开启。否则请修改php.ini文件

最后附上FFMPEG+H264扩展+YASM+apache_mod_h264

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20840.html

相关文章

  • Phpcmsv9本地视频转码字段

    摘要:原文链接本地视频转码字段近几个月接了不少视频网站的单子,客户都要求能够上传本地视频并自动转码,而且需要兼容手机端进行播放。字段类型选择本地视频,字段名可以任意填写,比如。 原文链接:http://www.fire-rain.com/blog/localvideo Phpcmsv9本地视频转码字段 近几个月接了不少视频网站的单子,客户都要求能够上传本地视频并自动转码,而且需要兼容手机...

    Charles 评论0 收藏0
  • 使用PHP结合Ffmpeg快速搭建流媒体服务实践

    摘要:一背景笔者想将自己收藏的一些电影放到网站上可以用来随时播放,不过遇到了一个问题,便是如果直接将文件放放到网站目录当中,手机端必须下载整个视频才可以播放,而如果跨外网传输,这实在是不太现实。 一、背景 笔者想将自己收藏的一些电影放到网站上可以用来随时播放,不过遇到了一个问题,便是如果直接将MP4文件放放到网站目录当中,手机端必须下载整个视频才可以播放,而如果跨外网传输,这实在是不太现实。...

    Drinkey 评论0 收藏0
  • 使用PHP结合Ffmpeg快速搭建流媒体服务实践

    摘要:一背景笔者想将自己收藏的一些电影放到网站上可以用来随时播放,不过遇到了一个问题,便是如果直接将文件放放到网站目录当中,手机端必须下载整个视频才可以播放,而如果跨外网传输,这实在是不太现实。 一、背景 笔者想将自己收藏的一些电影放到网站上可以用来随时播放,不过遇到了一个问题,便是如果直接将MP4文件放放到网站目录当中,手机端必须下载整个视频才可以播放,而如果跨外网传输,这实在是不太现实。...

    MASAILA 评论0 收藏0
  • 在CentOS下,利用FFMPEG对视频进行转码

    摘要:先按照的安装攻略,搞定你上的,我目前使用的版本是然后直接上代码简单的转码服务,利用和编码器转换成使用输入文件路径输出文件路径执行下 先按照ffmpeg的安装攻略,搞定你CentOS上的ffmpeg,我目前使用的版本是3.0.2然后直接上代码 package main import ( fmt log os os/exec time ) fun...

    kuangcaibao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<