您的位置:首页 > 运维架构 > 网站架构

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

未完...........
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: