利用nginx搭建http和rtmp协议的流媒体服务器
操作系统:阿里云CentOS 6.5 64位
-------- 系统更新 --------
# yum update
-------- 安装依赖包 --------
# yum install openssl-devel
# yum install mhash.x86_64
# yum install nasm
# yum install perl-Digest-SHA1.x86_64
# yum install curl-devel//使git支持http协议
-------- 安装git工具 --------
# mkdir /soft
# cd /soft
# wget http://codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.xz
# xz -d git-latest.tar.xz
# tar xvf git-latest.tar
# cd git-2016-10-25
# autoconf
# ./configure
# make && make install
# git --version//git version 2.10.0.GIT
# cd /soft
-------- 安装ffmpeg及其依赖包 --------
1). yasm
# wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
# tar zxf yasm-1.2.0.tar.gz
# cd yasm-1.2.0
# ./configure
# make && make install
# cd /soft
2). x264
# git clone git://git.videolan.org/x264
# cd x264
# ./configure --enable-shared
# make && make install
# cd /soft
3). lame
# wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
# tar xzvf lame-3.99.5.tar.gz
# cd lame-3.99.5
# ./configure --enable-nasm
# make && make install
# cd /soft
4). libogg
# wget http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
# tar xzvf libogg-1.3.0.tar.gz
# cd libogg-1.3.0
# ./configure
# make && make install
# cd /soft
5). libvorbis
# vi /etc/ld.so.conf
尾部加一行:/usr/local/lib,然后保存、退出。
# ldconfig -v
# wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
# tar xzvf libvorbis-1.3.3.tar.gz
# cd libvorbis-1.3.3
# ./configure
# make && make install
# cd /soft
6). libvpx
# git clone https://github.com/webmproject/libvpx
# cd libvpx
# ./configure --enable-shared
# make && make install
# cd /soft
7). faad2
# wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
# tar zxvf faad2-2.7.tar.gz
# cd faad2-2.7
# ./configure
# make && make install
# cd /soft
8). faac
# wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz
# tar zxvf faac-1.28.tar.gz
# cd faac-1.28
# ./configure
# make && make install
报错。
# vi common/mp4v2/mpeg4ip.h
123行开始,修改前:
#ifdef __cplusplus
extern "C" {
#endif
char *strcasestr(const char *haystack, const char *needle);
#ifdef __cplusplus
}
#endif
修改后:
#ifdef __cplusplus
extern "C++" {
#endif
const char *strcasestr(const char *haystack, const char *needle);
#ifdef __cplusplus
}
#endif
# make && make install
# cd /soft
9). xvid
# wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
# tar zxvf xvidcore-1.3.2.tar.gz
# cd xvidcore/build/generic
# ./configure
# make && make install
# cd /soft
10). libaacplus
# wget http://ffmpeg.gusari.org/uploads/libaacplus-2.0.2.tar.gz
# tar zxvf libaacplus-2.0.2.tar.gz
# cd libaacplus-2.0.2
# ./autogen.sh
# ./configure
# make && make install
安装后检查是否有库文件:
# ls /usr/local/lib
libaacplus.so
libaacplus.so.2
# cd /soft
11). ffmpeg
# git clone git://source.ffmpeg.org/ffmpeg
# cd ffmpeg
# ./configure --prefix=/opt/ffmpeg/ --enable-version3 --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libvorbis --enable-libx264 --enable-libxvid --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --enable-libaacplus
出错:
Unknown option "--enable-libfaac".
# ./configure --prefix=/opt/ffmpeg/ --enable-version3 --enable-libvpx --enable-libmp3lame --enable-libvorbis --enable-libx264 --enable-libxvid --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --enable-libaacplus
出错:
Unknown option "--enable-libaacplus".
# ./configure --prefix=/opt/ffmpeg/ --enable-version3 --enable-libvpx --enable-libmp3lame --enable-libvorbis --enable-libx264 --enable-libxvid --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads
提示:
WARNING: using libx264 without pkg-config
未理会。
# vi /etc/ld.so.conf
添加以下内容:
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/ffmpeg/lib
# ldconfig
# make && make install//时间比较长
# cd /soft
-------- 安装Nginx --------
# mkdir lanmp
# cd lanmp
# wget http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz
# tar zxvf lanmp_laster.tar.gz
# sh install.sh//安装时间较长,中间2次选择,分别选2、1,此安装包含prce
# rpm -qa pcre//显示pcre版本:pcre-7.8-7.el6.x86_64
-------- 安装Nginx相关模块 --------
# mkdir /soft/nginx_mod
# cd /soft/nginx_mod
1). 下载nginx h264模块
# wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
# tar -zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
# mv -f nginx_mod_h264_streaming-2.2.7 nginx_mod_h264_streaming
2). 下载nginx rtmp模块
# git clone git://github.com/arut/nginx-rtmp-module.git
# mv -f nginx-rtmp-module nginx_mod_rtmp
3). 下载nginx pcre模块
# wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.30/pcre-8.30.tar.gz
# tar -zxvf pcre-8.30.tar.gz
# mv -f pcre-8.30 nginx_mod_pcre
4) . 配置添加新模块
# cd /soft/lanmp/lanmp/nginx-1.2.9
# ./configure --user=www --group=www --prefix=/www/wdlinux/nginx-1.2.9 \
依次输入下面各行并回车。
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-cc-opt=-I/opt/ffmpeg/include \
--with-ld-opt='-L/opt/ffmpeg/lib -Wl,-rpath=/opt/ffmpeg/lib' \
--add-module=/soft/nginx_mod/nginx_mod_h264_streaming/ \
--add-module=/soft/nginx_mod/nginx_mod_rtmp/ \
--with-pcre=/soft/nginx_mod/nginx_mod_pcre
# vi /soft/nginx_mod/nginx_mod_h264_streaming/src/ngx_http_streaming_module.c
需要注释掉 第158行:
/*if (r->zero_in_uri)
{
return NGX_DECLINED;
}*/
# make
到此网站已可以访问。已运行nginx,需先停。
# killall -9 nginx
用新程序覆盖旧程序:
# cp /www/wdlinux/nginx-1.2.9/sbin/nginx /www/wdlinux/nginx-1.2.9/sbin/nginx.bak
# cp /soft/lanmp/lanmp/nginx-1.2.9/objs/nginx /www/wdlinux/nginx-1.2.9/sbin/nginx
测试配置,看nginx是否运行正常:
# /www/wdlinux/nginx-1.2.9/sbin/nginx -t -c /www/wdlinux/nginx-1.2.9/conf/nginx.conf
显示:
nginx: the configuration file /www/wdlinux/nginx-1.2.9/conf/nginx.conf syntax is ok
nginx: configuration file /www/wdlinux/nginx-1.2.9/conf/nginx.conf test is successful
5). 配置nginx
# cd /www/wdlinux/nginx-1.2.9/conf/
# vi nginx.conf
a. 修改每个进程打开的最大文件数(linux系统设置需支持,修改/etc/security/limits.conf文件)
events {
use epoll;
worker_connections 65535;//原5120未改
}
b. 修改http中参数设置
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
limit_conn_zone $binary_remote_addr zone=one:256k;
limit_conn_log_level notice;
keepalive_timeout 6000;//原60未改
...
}
c. 添加rtmp模块参数
rtmp {
server {
listen 1935;
application vod {
#Directory of flv files
play /www/web/vod;
}
}
}
保存nginx.conf文件。
6). 建点播文件夹
# cd /www/web
# mkdir vod
-------- 配置防火墙 --------
若iptables未配置过,则可以通过初始化iptables,先生成配置文件。前面安装Nginx时,已配置过iptables,下面初始化iptables过程可以略过。
初始化iptables
# iptables -F
# service iptables save
# service iptables restart
修改配置文件:
# vi /etc/sysconfig/iptables
将:
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20000:20500 -m state --state NEW -j ACCEPT
改为:
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1935 -j ACCEPT
重新启动iptables服务:
# service iptables restart
-------- 其它 --------
1). 通过wdcp服务器/虚拟主机管理系统(http://yourip:8080/ )修改登录密码和mysql密码;
2). 通过wdcp服务器/虚拟主机管理系统上传视频播放相关文件。
系统管理->文件管理->default
3). 通过wdcp服务器/虚拟主机管理系统上传视频文件。
系统管理->文件管理->vod
4). 安装完后运行yum update提示错误
# yum update
显示:
Error: Cannot retrieve repository metadata (repomd.xml) for repository: rpmforge. Please verify its path and try again
如何解决参考:http://blog.csdn.net/david_xtd/article/details/8645306