nginx搭建http和rtmp协议的流媒体服务器
时间:2013-09-23 23:52 来源:佚名 作者:本站 点击:232次
实验目的:让Nginx支持flv和mp4格式文件,同时支持Rtmp协议;同时打开rtmp的hls功能
资料:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。使用ffmpeg来完成对flv、mp4、mp3等格式的转化(点播实验暂时不测试)一、准备工作模块:nginx_mod_h264_streaming(支持h264编码的视频)模块:http_flv_module 支持flv模块:http_mp4_module 支持mp4下载地址:http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gzhttp://nginx.orghttps://github.com/arut/nginx-rtmp-module1、安装依赖包:#yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel expat-devel gettext-devel libtool mhash.x86_64 perl-Digest-SHA1.x86_64 2、安装git工具:#mkdir soft-source#cd soft-source#wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz#tar xzvf git-latest.tar.gz #cd git-2013-02-04#autoconf#./configure#make && make install# git --versiongit version 1.8.1.GIT#cd ..3、安装ffmpeg及其依赖包:++++++++Yasm+++++++++++#wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz#tar xzvf yasm-1.2.0.tar.gz#cd yasm-1.2.0#./configure#make#make install#cd ..++++++++x264+++++++++++#git clone git://git.videolan.org/x264#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 xzvf 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 xzvf 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 xzvf 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#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 zxvf 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 zxvf 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 zxvf xvidcore-1.3.2.tar.gz#cd xvidcore/build/generic#./configure#make#make installcd ..#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#make && make install#cd ..修改/etc/ld.so.conf如下:include ld.so.conf.d/*.conf/lib/lib64/usr/lib/usr/lib64/usr/local/lib/usr/local/lib64/opt/ffmpeg/lib#ldconfig二、安装Nginx相关模块#tar zxvf nginx_mod_h264_streaming-2.2.7.tar.gz#git clone git://github.com/arut/nginx-rtmp-module.git#tar zxvf pcre-8.12.tar.gz#cd pcre-8.12#./configure#make && make install#tar zxvf nginx-1.2.6.tar.gz#cd nginx-1.2.6#./configure --prefix=/usr/local/nginx --add-module=../nginx_mod_h264_streaming-2.2.7 --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_mp4_module --add-module=../nginx-rtmp-module --add-module=../nginx-rtmp-module/hls --with-cc-opt=-I/opt/ffmpeg/include --with-ld-opt='-L/opt/ffmpeg/lib -Wl,-rpath=/opt/ffmpeg/lib'#make && make install三、修改nginx主配置文件,配置虚拟主机(这里我们暂时只配置和测试点播,直播请看借鉴地址):user nobody nobody;worker_processes 4;error_log logs/nginx_error.log info;pid logs/nginx.pid;worker_rlimit_nofile 51200;events { use epoll; worker_connections 51200; }#rtmp_auto_push on;rtmp { server { listen 1935; application vod { play /opt/media/nginxrtmp/flv; } }}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=perip:256k; limit_conn_log_level notice; sendfile on; tcp_nopush on; keepalive_timeout 6000;#测试并发临时调大 tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #log format log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for';#支持flvserver { listen 8081; server_name 192.168.0.33; root /opt/pub/media/nginx; #http协议时候,flv视频位置 location ~ .*.(flv|swf|mp4|wma|wmv)$ { valid_referers none blocked *.xxxx.com http://localhost; if ($invalid_referer) { return 403; } } location ~ \.flv$ { flv; limit_conn one 20;#限制客户端并发连接数 limit_rate 200k;#限制每客户端最大带宽 } location ~ \.mp4$ { flv; limit_conn one 20; limit_rate 200k; } access_log logs/nginxflv_access.log main;}server { listen 8082; server_name 192.168.0.33; index index.html; location / { root /opt/pub/media/nginx-rtmp; } access_log logs/nginxrtmpflv_access.log main; }server { listen 8080; location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /opt/pub/soft/nginx-rtmp-module; } location / { root /opt/pub/soft/nginx-rtmp-module/test/rtmp-publisher; } }http://192.168.0.33:8080/stats 查看rtmp客户请求信息http://192.168.0.33:8081/index.html 查看nginx http协议时候的flv视频http://192.168.0.33:8082/index.html 查看nginx rtmp协议时候的flv视频四、基本功能测试:播放器采用开源播放器jwplayer,将播放器放到index.html同级目录下NGINX-Http测试页面index.html(切记http的时候需要给视频添加关键帧)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>test of nginx-http</title></head><body><div id="myElement"></div><object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="360"> <param name="movie" value="player.swf" /> <param name="quality" value="high" /> <param name="wmode" value="opaque" /> <param name="swfversion" value="6.0.65.0" /> <param name="flashvars" value="type=http&file=http://192.168.0.33:8081/2.flv&autostart=true"> <EMBED SRC="player.swf" WIDTH="480" HEIGHT="360" QUALITY="high" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" flashvars="type=http&file=http://192.168.0.33:8081/2.flv&autostart=true" wmode="opaque" /> </object></body></html>NGINX-RTMP测试页面index.html<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>nginx-rtmp</title></head><body><div id="myElement"></div><object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="360"> <param name="movie" value="player.swf" /> <param name="quality" value="high" /> <param name="wmode" value="opaque" /> <param name="swfversion" value="6.0.65.0" /> <param name="flashvars" value="streamer=rtmp://192.168.0.33:1935/vod&file=2.flv&autostart=true"> <EMBED SRC="player.swf" WIDTH="480" HEIGHT="360" QUALITY="high" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" flashvars="streamer=rtmp://192.168.0.33:1935/vod&file=2.flv&autostart=true" wmode="opaque" /> </object></body></html>页面能打开正常播放就说明配置是正确的。五、并发测试NGINX-HTTP采用loadrunner测试(略)NGINX-RTMP采用开源软件flazr测试:前提需要安装jdk软件client.bat rtmp://192.168.0.33:1935/vod/2.flv -load 500这里的500是并发数由于局域网的限制,带宽测试到一定大小的时候就上不去了,故此步截图不忽略。安装相关问题解决:高版本nginx问题: https://github.com/arut/nginx-rtmp-module/issues/184