利用nginx搭建http和rtmp协议的流媒体服务器


一、准备工作

1、安装依赖包:
yum install gcc glibc glibc-devel libtool make openssl-devel-0.9.8e pkgconfig lib-devel mhash.x86_64 pcre-8.30 nasm gettext-devel gettext-devel perl-Digest-SHA1.x86_64

2、安装git工具:
cd /server/software/lmt/
wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz
tar zxf git-latest.tar.gz
cd git-2013-10-30
autoconf
./configure
make && make install

-----------------------------------------------
解决运行git --version报错git: error while loading shared libraries: libiconv.so.2
echo /usr/local/lib >> /etc/ld.so.conf
ldconfig
-----------------------------------------------
git --version
输出一下信息:
git version 1.8.1.GIT
cd ..

3、安装ffmpeg及其依赖包:
++++++++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 ..

++++++++x264+++++++++++
git clone git://git.videolan.org/x264(本次获取后打包为x264.tar.gz)
cd x264
./configure --enable-shared
make && make install
cd ..

++++++++LAME+++++++++++
#wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar zxf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --enable-nasm
make && make install
cd ..

++++++++libogg+++++++++++
#wget http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
tar zxf libogg-1.3.0.tar.gz
cd libogg-1.3.0
./configure
make && make install
cd ..

++++++++libvorbis+++++++++++
#wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
tar zxf libvorbis-1.3.3.tar.gz
cd libvorbis-1.3.3
./configure
make && make install
cd ..

++++++++libvpx+++++++++++
git clone http://git.chromium.org/webm/libvpx.git (本次获取后打包为libvpx-v1.2.0.tar.gz) 其它获取方式#wget http://webm.googlecode.com/files/libvpx-v1.1.0.tar.bz2
cd libvpx
./configure --enable-shared
make && make install
cd ..


++++++++FAAD2+++++++++++
#wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
tar zxf faad2-2.7.tar.gz
cd faad2-2.7
./configure
make && make install
cd ..

++++++++FAAC+++++++++++
#wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz
tar zxf faac-1.28.tar.gz
cd faac-1.28
./configure
make && make install
cd ..

++++++++Xvid+++++++++++
#wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
tar zxf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic
./configure
make && make install
cd ..
cd ..
cd ..

++++++++++++libaacplus+++++++++++++
#wget http://217.20.164.161/~tipok/aacplus/libaacplus-2.0.2.tar.gz(本次安装后make clean重新打包 ffmpeg-2.1.tar.gz)
tar zxf 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 ..

++++++++Ffmpeg+++++++++++
git clone git://source.ffmpeg.org/ffmpeg(本次获取后打包为ffmpeg-2.1.tar.gz) 其它获取方式wget http://ffmpeg.org/releases/ffmpeg-2.1.tar.gz
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
make && make install
cd ..

#以上所有安装后修改/etc/ld.so.conf库配置文件如下:
vim /etc/ld.so.conf
#添加以下内容:
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/ffmpeg/lib

添加以上内容后运行命令:
ldconfig

注意!如果以上相关包有新加或是重新安装,需要重新执行:
ldconfig #使其新加的库文件加载。

ffmpeg -i


安装
Nginx,php,mysql等模块

配置防火墙
#----HTTP---
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 81 -j ACCEPT
#----Rtmp--
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1935 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.20.0/255.255.255.0 -j ACCEPT

** 创建链接文件
ln -s /targetPath newLinkPath

** 防火墙设置
vi /etc/sysconfig/iptables

 

二、安装Nginx

# 到http://www.wdlinux.cn/lanmp/下载lanmp开源一键安装包(已安装略过).按说明进行安装
cd /server/software
mkdir lanmp
cd lanmp
wget http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz
tar zxvf lanmp_laster.tar.gz
sh install.sh
# 根据相应选项进行相应安装

# wdlinux默认安装在/www下,公司目录默认在/server下,保证一致性,添加链接文件
cd /server/
ln -s /www/wdlinux/nginx-1.2.9 nginx
ln -s /www/wdlinux/mysql-5.1.69 mysql
ln -s /www/wdlinux/nginx_php php
ln -s /www/wdlinux/pureftpd-1.0.36 pureftpd

# 用wdlinux自带的站点管理工具新建两个站点,域名分别为enc.testvideo.com和live.testvideo.com
# 参见www.wdlinux.cn相关页面说明

# 192.168.20.17为新建的流媒体服务器的IP,浏览器所在计算机hosts文件及流媒体服务器都添加ip-域名映射
vi /etc/hosts

192.168.20.17 enc.testvideo.com
192.168.20.17 live.testvideo.com


# 将程序添加到其它目录可运行
cd
vi .bash_profile
#将/opt/ffmpeg/bin:/server/nginx/sbin:/server/mysql/bin:/server/php/sbin加到PATH后面保存
PATH=$PATH:$HOME/bin:/opt/ffmpeg/bin:/server/nginx/sbin:/server/mysql/bin:/server/php/sbin
source .bash_profile


# 验证站点是否能正常访问

 

三、安装Nginx相关模块

mkdir /server/nginx_mod

#++++++++安装nginx h264模块++++++++
cd /server/nginx_mod
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 -r nginx_mod_h264_streaming-2.2.7 nginx_mod_h264_streaming

#++++++++安装nginx rtmp模块++++++++
cd /server/nginx_mod
git clone git://github.com/arut/nginx-rtmp-module.git
mv -r nginx-rtmp-module nginx_mod_rtmp

#++++++++安装nginx pcre模块++++++++
cd /server/nginx_mod
wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.30/pcre-8.30.tar.gz
tar -zxvf pcre-8.30.tar.gz
mv -r pcre-8.30 nginx_mod_pcre


#++++++++在已安装的nginx基础上添加h264,rtmp模块++++++++
cd /server/nginx/sbin
./nginx -V #查看已安装nginx的配置参数

# 输出结果:
# nginx version: nginx/1.2.9
# built by gcc 4.1.2 20080704 (Red Hat 4.1.2-54)
# TLS SNI support disabled
# configure arguments: --user=www --group=www --prefix=/www/wdlinux/nginx-1.2.9 --with-http_stub_status_module --with-http_ssl_module

# 进到nginx源码目录 wdlinux的nginx源码目录(或者自定义的原nginx源码目录)
cd /server/software/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=/server/nginx_mod/nginx_mod_h264_streaming/ \
--add-module=/server/nginx_mod/nginx_mod_rtmp/ \
--with-pcre=/server/nginx_mod/nginx_mod_pcre


# 重新编译

#以上下下来的nginx_mod_h264_streaming-2.2.7.tar.gz编译时会出错:ngx_http_streaming_module.c:158: 错误:‘ngx_http_request_t’ 没有名为 ‘zero_in_uri’ 的成员
#需要注释掉
vi /server/nginx_mod/nginx_mod_h264_streaming//src/ngx_http_streaming_module.c
#需要注释掉 第158行:
/*
if (r->zero_in_uri)
{
return NGX_DECLINED;
}
*/
make #不要make install,否则覆盖安装

# 已运行nginx,需先停止
killall -9 nginx

# 用新程序覆盖旧程序
cp /www/wdlinux/nginx-1.2.9/sbin/nginx /www/wdlinux/nginx-1.2.9/sbin/nginx.bak
cp /server/software/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.conf
cd /www/wdlinux/nginx-1.2.9/
vi nginx.conf

# 修改每个进程打开的最大文件数(linux系统设置需支持,修改/etc/security/limits.conf文件)
events {
use epoll;
worker_connections 65535;
}

# 修改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;

# .....
}

# 添加rtmp模块参数
rtmp {
server {
listen 1935;
application vod {
#Directory of flv files
play /server/serverweb/live/public_html/live;
}
}
}

# 保存nginx.conf文件

# 新建及配置虚拟站点文件
cd /www/wdlinux/nginx-1.2.9/vhost
#cp default.conf live.testvideo.com.conf (之前有建站点live.testvideo.com,则不需复制配置)
vi live.testvideo.com.conf

# 配置如下

server {
listen 80;
server_name live.testvideo.com;
root /server/serverweb/live/public_html;
index index.php;
error_page 400 /errpage/400.html;
error_page 403 /errpage/403.html;
error_page 404 /errpage/404.html;
error_page 405 /errpage/405.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ \.mp4$ {
mp4;
}

access_log /server/serverlog/live.testvideo.com_access.log wwwlogs;
error_log /server/serverlog/live.testvideo.com_error.log;
}


# 测试配置,看nginx是否运行正常
/www/wdlinux/nginx-1.2.9/sbin/nginx -t -c /www/wdlinux/nginx-1.2.9/conf/nginx.conf


#++++++++ 播放测试站点 ++++++++
# 上传一个.mp4文件放到live目录
cd /server/serverweb/live/public_html/live


# 下载开源播放器jwplayer
cd /server/software/
mkdir jwplayer
cd jwplayer
wget https://account.jwplayer.com/static/download/jwplayer-6.7.zip # 如果不能下载,则需要到官网http://www.jwplayer.com注册然后下载
unzip jwplayer-6.7.zip

# 复制播放器代码到站点文件夹,根据官方文档新建html文件播放页(省略)。
cp -r jwplayer /server/serverweb/live/public_html/

cd /server/serverweb/live/public_html
vi player.html

#复制以下内容到player.html中保存
cd /server/serverweb/live/public_html
vi player.html

#复制以下内容到player.html中保存
<html>
<head>
<title>播放测试</title>
<script type="text/javascript" src="/jwplayer/jwplayer.js"></script>
<script type="text/javascript">jwplayer.key="MGAzpXRYxGnaVXhH8jSdKXzDe7ucAAvZGWggIA==";</script>
</head>
<body>
<div id="testPlayer">Loading the player...</div>
<script type="text/javascript">
jwplayer("testPlayer").setup({
file: "/live/test.mp4",
image: "/live/test.png",
title: 'test',
width: '100%',
aspectratio: '16:9',
fallback: 'false',
primary: 'flash'
});
</script>
</body>
</html>

五、http及rtmp流媒体测试

# 浏览器中测试能否播放http流媒体
http://live.testvideo.com/player.html

# 测试Rtmp点播vod
rtmp://live.testvideo.com:1935/vod/test.mp4

# 测试Rtmp直播live
rtmp://live.testvideo.com:1935/live/h_room_60025

# 测试Rtmp转码

#* 从本地文件转
ffmpeg -i /server/serverweb/live/public_html/live/test.mp4 -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -f flv rtmp://live.testvideo.cn:1935/live/h1_room_60025

#* 从视频流转
ffmpeg -i rtmp://live.testvideo.cn:1935/live/h_room_60025 -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -f flv rtmp://live.testvideo.cn:1935/live/h2_room_60025


# 查找转码进程
ps -ef|grep 'room_60025'*

# 杀掉转码进程
ps -ef|grep 'room_60025'* | grep -v grep|awk '{print $2}' | xargs -i kill -9 {}

posted @ 2014-04-15 09:31  全栈深入  阅读(25357)  评论(4编辑  收藏  举报