Linux+php+ffmpeg搭建视频网站
2012-02-26 23:13
267 查看
最近用Linux+php+ffmpeg搭建视频网站,这过程中遇到很多难道,查了很多资料,现在来总结一下。
1、Linux+php实现大文件上传
php配置文件默认上传最大为2M,可是为了上传大文件怎么办呢,下面就来说一下具体的修改的方法。
打开php.ini,首先找到
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
区域,有影响文件上传的以下几个参数:
file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2M
在
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
区域,还有一项:
post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
一般地,设置好上述四个参数后,上传<=8M的文件是不成问题,在网络正常的情况下。
但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得关心关心下面的参数:
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M
根据上面的所说,结合自己的实际情况来操作就可以。
2、上传时显示进度条及速度。
这里推荐使用uploadify,官方下载,Uploadify是JQuery的一个上传插件,实现带进度显示。单文件上传如下图:
同时也遇到文件上传时,非IE浏览器session丢失的问题,查了很多资料,最终总结的原因是:
原来一般情况下(非IE浏览器),因为诸如uploadify,swfupload采用的都是flash客户端,这样它们产生的useragent与用户使用浏览器的 user-agent必然不同。所以,虽然用户登录了你的系统产生了一个session,但是当触发上传程序时会产生另一个session(在上述 useragent选项开启的情况下)。所以,不是session丢失了,而是当你上传文件时,CI为uploadify另外创建了一个session。
最终解决办法:
1. 在upmodify上传参数中加入session参数,如下:
'scriptData': {"SESSION_ID":"<?php echo session_id()?>"},
2. 在服务端接收页面加入以下代码:
if(@$_REQUEST['SESSION_ID'] && ($session_id=$_REQUEST['SESSION_ID']) !=session_id()){
session_destroy();
session_id($session_id);
@session_start();
}
这样就解决了 FLASH 不能正确传递页面
3、视频格式转换
现在Linux下比较流行的视频格式转换软件是ffmpeg,FFmpeg是用于录制、截图、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。官方正式版ffmpeg不支持rmvb和rm格式. 不过有很多解决方法。
centos 5.4环境下安装源码安装ffmpeg和ffmpeg-php:
下载ffmepg及ffmpeg-php
wget http://www.ffmpeg.org/releases/ffmpeg-export-snapshot.tar.bz2
wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2?use_mirror=ncu
安装ffmpeg
tar -xjf ffmpeg-export-snapshot.tar.bz2
#进入解压后的源文件目录
cd ffmpeg-export-2010-03-02/
./configure --prefix=/usr/local --enable-shared
make
make install
测试是否能正常使用:
[root@mail ffmpeg-export-2010-03-02]# ffmpeg
FFmpeg version SVN-r22144-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
built on Mar 30 2010 23:53:53 with gcc 4.1.2 20080704 (Red Hat 4.1.2-46)
configuration: --prefix=/usr/local --enable-shared
libavutil 50. 9. 0 / 50. 9. 0
libavcodec 52.55. 0 / 52.55. 0
libavformat 52.54. 0 / 52.54. 0
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.10. 0 / 0.10. 0
如果提示:“ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory”
vi /etc/ld.so.conf.d/ffmpeg.conf
#在里面加入:usr/local
b,这个目录,为ffmpeg安装后libavdevice.so.52等lib文件所在目录。
ldconfig -v
安装ffmpeg-php
tar -xjf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-ffmpeg=/usr/local
make test
make
make install
#在php.ini中加入extension=ffmpeg.so
如果在make test中发现错误提示:make: *** [ffmpeg_frame.lo] Error 1
则:
mv ffmpeg_frame.loT ffmpeg_frame.lo
测试是否安装成功:
php -r 'phpinfo();' | grep ffmpeg
ffmpeg
ffmpeg-php version => 0.6.0-svn
ffmpeg-php built on => Mar 31 2010 14:17:14
ffmpeg-php gd support => enabled
ffmpeg libavcodec version => Lavc52.55.0
ffmpeg libavformat version => Lavf52.54.0
ffmpeg swscaler version => SwS0.10.0
ffmpeg.allow_persistent => 0 => 0
ffmpeg.show_warnings => 0 => 0
如果有ffmepg-php模块错误提示:php: symbol lookup error: /usr/local/php
b/php/extensions
-debug-non-zts-20060613/ffmpeg.so: undefined symbol: register_ffmpeg_frame_class
nm /usr/local/php
b/php/extensions
-debug-non-zts-20060613/ffmpeg.so|grep register_ffmpeg_frame_class
#输出U register_ffmpeg_frame_class
则修改ffmpeg_frame.c,将3处的PIX_FMT_RGBA32 更改为PIX_FMT_RGB32即可。
vi ffmpeg_frame.c
:%s/PIX_FMT_RGBA32/PIX_FMT_RGB32
:w
:q!
./configure --with-php-config=/usr/local/php/bin/php-config --with-ffmpeg=/usr/local
make test
make
make install
未完...........
1、Linux+php实现大文件上传
php配置文件默认上传最大为2M,可是为了上传大文件怎么办呢,下面就来说一下具体的修改的方法。
打开php.ini,首先找到
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
区域,有影响文件上传的以下几个参数:
file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2M
在
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
区域,还有一项:
post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
一般地,设置好上述四个参数后,上传<=8M的文件是不成问题,在网络正常的情况下。
但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得关心关心下面的参数:
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M
根据上面的所说,结合自己的实际情况来操作就可以。
2、上传时显示进度条及速度。
这里推荐使用uploadify,官方下载,Uploadify是JQuery的一个上传插件,实现带进度显示。单文件上传如下图:
同时也遇到文件上传时,非IE浏览器session丢失的问题,查了很多资料,最终总结的原因是:
原来一般情况下(非IE浏览器),因为诸如uploadify,swfupload采用的都是flash客户端,这样它们产生的useragent与用户使用浏览器的 user-agent必然不同。所以,虽然用户登录了你的系统产生了一个session,但是当触发上传程序时会产生另一个session(在上述 useragent选项开启的情况下)。所以,不是session丢失了,而是当你上传文件时,CI为uploadify另外创建了一个session。
最终解决办法:
1. 在upmodify上传参数中加入session参数,如下:
'scriptData': {"SESSION_ID":"<?php echo session_id()?>"},
2. 在服务端接收页面加入以下代码:
if(@$_REQUEST['SESSION_ID'] && ($session_id=$_REQUEST['SESSION_ID']) !=session_id()){
session_destroy();
session_id($session_id);
@session_start();
}
这样就解决了 FLASH 不能正确传递页面
3、视频格式转换
现在Linux下比较流行的视频格式转换软件是ffmpeg,FFmpeg是用于录制、截图、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。官方正式版ffmpeg不支持rmvb和rm格式. 不过有很多解决方法。
centos 5.4环境下安装源码安装ffmpeg和ffmpeg-php:
下载ffmepg及ffmpeg-php
wget http://www.ffmpeg.org/releases/ffmpeg-export-snapshot.tar.bz2
wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2?use_mirror=ncu
安装ffmpeg
tar -xjf ffmpeg-export-snapshot.tar.bz2
#进入解压后的源文件目录
cd ffmpeg-export-2010-03-02/
./configure --prefix=/usr/local --enable-shared
make
make install
测试是否能正常使用:
[root@mail ffmpeg-export-2010-03-02]# ffmpeg
FFmpeg version SVN-r22144-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
built on Mar 30 2010 23:53:53 with gcc 4.1.2 20080704 (Red Hat 4.1.2-46)
configuration: --prefix=/usr/local --enable-shared
libavutil 50. 9. 0 / 50. 9. 0
libavcodec 52.55. 0 / 52.55. 0
libavformat 52.54. 0 / 52.54. 0
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.10. 0 / 0.10. 0
如果提示:“ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory”
vi /etc/ld.so.conf.d/ffmpeg.conf
#在里面加入:usr/local
b,这个目录,为ffmpeg安装后libavdevice.so.52等lib文件所在目录。
ldconfig -v
安装ffmpeg-php
tar -xjf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-ffmpeg=/usr/local
make test
make
make install
#在php.ini中加入extension=ffmpeg.so
如果在make test中发现错误提示:make: *** [ffmpeg_frame.lo] Error 1
则:
mv ffmpeg_frame.loT ffmpeg_frame.lo
测试是否安装成功:
php -r 'phpinfo();' | grep ffmpeg
ffmpeg
ffmpeg-php version => 0.6.0-svn
ffmpeg-php built on => Mar 31 2010 14:17:14
ffmpeg-php gd support => enabled
ffmpeg libavcodec version => Lavc52.55.0
ffmpeg libavformat version => Lavf52.54.0
ffmpeg swscaler version => SwS0.10.0
ffmpeg.allow_persistent => 0 => 0
ffmpeg.show_warnings => 0 => 0
如果有ffmepg-php模块错误提示:php: symbol lookup error: /usr/local/php
b/php/extensions
-debug-non-zts-20060613/ffmpeg.so: undefined symbol: register_ffmpeg_frame_class
nm /usr/local/php
b/php/extensions
-debug-non-zts-20060613/ffmpeg.so|grep register_ffmpeg_frame_class
#输出U register_ffmpeg_frame_class
则修改ffmpeg_frame.c,将3处的PIX_FMT_RGBA32 更改为PIX_FMT_RGB32即可。
vi ffmpeg_frame.c
:%s/PIX_FMT_RGBA32/PIX_FMT_RGB32
:w
:q!
./configure --with-php-config=/usr/local/php/bin/php-config --with-ffmpeg=/usr/local
make test
make
make install
未完...........
相关文章推荐
- 使用 PHP 搭建自己的视频点播网站,第 1 部分:基础工作
- windows+lighttpd+php+flash cs3搭建随意拖放视频网站(1)-lighttpd的搭建
- 使用 PHP 搭建自己的视频点播网站
- 使用 PHP 搭建自己的视频点播网站,第 1 部分:基础工作-(1)
- windows+lighttpd+php+flash cs3搭建随意拖放视频网站(2)-PHP配置
- windows+lighttpd+php+flash cs3搭建随意拖放视频网站(3)-flash cs3视频播放器的编写
- 利用Flex和PHP创建网站视频发布系统
- 使用PHP搭建书虫网站
- windows下搭建ffmpeg+nginx+rtmp-module搭建实时视频环境
- windows 7系统搭建PHP网站环境
- PHP结合Ffmpeg快速搭建流媒体服务的实践记录
- FFmpeg的使用——PHP转换视频、截取视频以及JW Player播放器控制
- 个人网站搭建—环境配置(ISS、PHP、MySQL)
- 搭建一个视频和论坛网站的一些总结
- 网站搭建中,怎么区分ASP和PHP
- oss php sdk+laravel搭建图片处理静态网站
- php 使用 ffmpeg 转换视频,截图,并生成缩略图
- php套件包结合80端口映射,快速本地搭建部署网站并发布到外网
- windows下搭建ffmpeg+nginx+rtmp-module搭建实时视频环境
- PHP绿色集成环境在云服务器上的应用,PHPWAMP在服务器上搭建网站案例