您的位置:首页 > 理论基础 > 计算机网络

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

2016-06-26 16:13 399 查看
转载至:http://www.educity.cn/net/1618718.html

实验目的:让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

 下载地址:

 

 

 

 

1、安装依赖包:

 #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 

 #tar xzvf git-latest.tar.gz 

#cd git-2013-02-04

 #autoconf

 #./configure

 #make && make install

 # git --version

 git version 1.8.1.GIT

 #cd ..

 

3、安装ffmpeg及其依赖包:

 ++++++++Yasm+++++++++++

 #wget 

 #tar xzvf yasm-1.2.0.tar.gz

 #cd yasm-1.2.0

 #./configure

 #make

 #make install

 #cd ..

 ++++++++x264+++++++++++

 #git clone git://gi/x264

 #cd x264

 #./configure --enable-shared 

#make

 #make install

 #cd ..

 ++++++++LAME+++++++++++

 #wget 

 #tar xzvf lame-3.99.5.tar.gz

 #cd lame-3.99.5

 #./configure --enable-nasm

 #make

 #make install

 #cd ..

 ++++++++libogg+++++++++++

 #wget 

 #tar xzvf libogg-1.3.0.tar.gz

 #cd libogg-1.3.0

 #./configure

 #make

 #make install

 #cd ..

 ++++++++libvorbis+++++++++++

 #wget 

 #tar xzvf libvorbis-1.3.3.tar.gz

 #cd libvorbis-1.3.3

 #./configure

 #make

 #make install

 #cd ..

 ++++++++libvpx+++++++++++

 #git clone 

 #cd libvpx

 #./configure  --enable-shared

 #make

 #make install

 #cd ..

 ++++++++FAAD2+++++++++++

 #wget 

 #tar zxvf faad2-2.7.tar.gz

 #cd faad2-2.7

 #./configure

 #make

 #make install

 #cd ..

 ++++++++FAAC+++++++++++

 #wget 

 #tar zxvf faac-1.28.tar.gz

 #cd faac-1.28

 #./configure

 #make

 #make install

 #cd ..

 ++++++++Xvid+++++++++++

 #wget 

 #tar zxvf xvidcore-1.3.2.tar.gz

 #cd xvidcore/build/generic

 #./configure

 #make

 #make install

 cd ..

 #git clone git://sourc/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/lnf如下:

 include lnf.d/nf

 /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:///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-=-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_;

        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';

 

#支持flv

 server

        {

            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 //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 l;

            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;

        }

    }

 

  查看rtmp客户请求信息

 查看nginx http协议时候的flv视频

 ; 查看nginx rtmp协议时候的flv视频

  四、基本功能测试:

 播放器采用开源播放器jwplayer,将播放器放到l同级目录下

 NGINX-Http测试页面l(切记http的时候需要给视频添加关键帧)

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">

 <html xmlns="">

 <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=;autostart=true">

  <EMBED SRC="player.swf" WIDTH="480" HEIGHT="360" QUALITY="high" PLUGINSPAGE="

 ndex.cgi?P1_Prod_Version=ShockwaveFlash" flashvars="type=http&file=;autostart=true" wmode="opaq

 ue" /> 

</object>

 </body>

 </html>

 NGINX-RTMP测试页面l

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">

 <html xmlns="">

 <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="

 ndex.cgi?P1_Prod_Version=ShockwaveFlash" flashvars="streamer=rtmp://192.168.0.33:1935/vod&file=2.flv&autostart=true" wmode="o

 paque" /> 

</object>

 </body>

 </html>

 

页面能打开正常播放就说明配置是正确的。

  五、并发测试

  NGINX-HTTP采用loadrunner测试(略)

  NGINX-RTMP采用开源软件flazr测试:

  前提需要安装jdk软件

  client.bat rtmp://192.168.0.33:1935/vod/2.flv -load 500

  这里的500是并发数

  由于局域网的限制,带宽测试到一定大小的时候就上不去了,故此步截图不忽略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: