nginx-rtmp-module搭建带推流验证的RTMP+HLS直播服务器

来源:互联网 发布:pix飞控调参软件下载 编辑:程序博客网 时间:2024/04/30 22:47

目前来说,我们可以用到的rtmp服务器有以下几种
1.开源类型:red5,crtmpserver,erlyvideo,haXevideo,FluorineFX,simple rtmp server(SRS),还有nginx-rtmp,Cumulus Server,Mistserver
2.商业软件:wowza media server,slyseal,fms(ams),helix,Evostream media server
rtmp server与播放器的交互就性能来说,nginx算是最强大的之一了,wowza3的内存和cpu都是一坨屎,red5直接就低了两个级别,FMS性能确实不错,傻瓜式安装也挺好,就是....
环境:centos 6.7 64位

目的:使Nginx支持Rtmp协议推流,并支持HLS分发功能及FFmpeg转码多码率功能。




1、安装依赖包:3.安装上面下载下来的软件包:


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


#tar xzvf yasm-1.2.0.tar.gz


#cd yasm-1.2.0


#./configure


#make


#make install


#cd ..


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


#tar xzvf x264.tar


#cd x264


#./configure --enable-shared


#make


#make install


#cd ..


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


#tar xzvf lame-3.99.5.tar.gz


#cd lame-3.99.5


#./configure --enable-nasm


#make


#make install


#cd ..


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




#tar xzvf libogg-1.3.0.tar.gz


#cd libogg-1.3.0


#./configure


#make


#make install


#cd ..


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


#tar xzvf libvorbis-1.3.3.tar.gz


#cd libvorbis-1.3.3


#./configure


#make


#make install


#cd ..




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

#wget http://downloads.sourceforge.net ... .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 ... 28/faac-1.28.tar.gz


#tar zxvf faac-1.28.tar.gz


#cd faac-1.28


#./configure


#make


#make install


#cd ..



【错误处理】



编译FAAC-1.28时遇到错误:



mpeg4ip.h:126: error: new declaration‘char* strcasestr(const char*, const char*)’



解决方法:



从123行开始修改此文件mpeg4ip.h,到129行结束。

修改前:

#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


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


#tar zxvf xvidcore-1.3.2.tar.gz

#cd xvidcore/build/generic

#./configure

#make

#make install

cd ../../../


tar xvf libvpx-v1.1.0.tar


cd libvpx-v1.1.0


./configure --enable-shared --enable-vp8


make


make install


++++++++ffmpeg+++++++++++

#tar xvf ffmpeg.tar

#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 ..


如果提示libvpx decoder version must be>=0.91




tar xvf libvpx-v1.1.0.tar


cd libvpx-v1.1.0


./configure --enable-shared --enable-vp8


make


make install



修改/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

  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 gcc-c++
复制代码


2.安装git
  1. yum install git -y
复制代码
3.下载所需的软件包
  1. Yasm:wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/yasm-1.2.0.tar.gz
  2. X264:wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/x264.tar
  3. LAME:wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/lame-3.99.5.tar.gz
  4. libogg:wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/libogg-1.3.0.tar.gz
复制代码
  1. libvorbis:wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/libvorbis-1.3.3.tar.gz
  2. libvpx:wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/libvpx-v1.1.0.tar
复制代码

复制代码
  1. FAAC:wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/faac-1.28.tar.gz
  2. ffmpeg:wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/ffmpeg.tar
  3. Xvid :wget http://u.zhbit.com/nginx-rtmp-hls-auth/packages/xvidcore-1.3.2.tar.gz
复制代码

验证用到 的php代码如下,可以自己加入数据库等东西!

17
18
19
20
21
22
23
24
25
<?php

// ?user=user&pass=pass

$user = isset($_GET['user']) ? $_GET['user'] : '';
$pass = isset($_GET['pass']) ? $_GET['pass'] : '';

if (empty($user) || empty($pass)) {
    echo "wrong query input";
    header('HTTP/1.0 404 Not Found');
    exit();
}

$saveuser = user;
$savepass = pass;

if (strcmp($user, $saveuser) == 0 && strcmp($pass, $savepass) == 0) {
    echo "Username and Password OK";
} else {
    echo "Username or Password wrong";
    header('HTTP/1.0 404 Not Found');
    exit();
}

?>


修改nginx的配置文件如下:
  1. #debug
  2. daemon off;
  3. master_process off;


  4. error_log ./error.log debug;
  5. events{
  6.     worker_connections 1024;
  7. }


  8. rtmp{
  9.     server {
  10.         listen 1935;
  11.         chunk_size 4000;
  12.         ping 30s;
  13.         notify_method get;
  14.         #live
  15.         application boardcast {
  16.             live on;
  17.             on_publish http://127.0.0.1:8080/auth_client.php; 
  18.             hls on;
  19.             hls_path /tmp/hls;
  20.             hls_fragment 2s;
  21.             hls_playlist_length 6s;

  22.       } 
  23.     }
  24. }

  25. #HTTP
  26. http{
  27.     server {
  28.         listen 80;

  29.         #welcome
  30.         location / {
  31.             root  html;
  32.             index  index.html index.htm;
  33.         }

  34.         #hls 
  35.         location /hls {
  36.             types {
  37.                 application/vnd.apple.mpegusr m3u8;
  38.                 video/mp2t ts;
  39.             }
  40.             root /tmp;
  41.             add_header Cache-Control no-cache;
  42.         }  
  43.     }
  44.     server {
  45.         listen 8080;
  46.         location /stat {
  47.             rtmp_stat all;
  48.             rtmp_stat_stylesheet stat.xsl;
  49.         }

  50.         location /stat.xsl {
  51.             root /usr/local/src/nginx-rtmp-module;
  52.         }

  53.         location /control {
  54.             rtmp_control all;
  55.         }

  56.         error_page 500 502 503 504 /50x.html;
  57.             location = /50.html {
  58.             root html;
  59.         }

  60.         location ~ \.php$ {
  61.             root /usr/local/nginx/html;
  62.             fastcgi_pass 127.0.0.1:9000;
  63.             fastcgi_index index.php;
  64.             fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
  65.             include fastcgi_params;
  66.         }
  67.     }

  68. }


复制代码
然后自己安装php-fpm去HI吧,记得把PHP和NGINX加入开机启动
测试:
rtmp服务器设置:rtmp://你的服务器IP/boardcast
视频流名字:test?user=user&pass=pass
播放端设置:rtmp://你的服务器IP/boardcast/test
或者http://你的服务器IP/hls/test.m3u8

二、安装Nginx相关模块

1.环境准备

yum install –y pcre pcre-devel

yum install –y zlib zlib-devel

2.下载nginx及rtmp模块

wget  http://nginx.org/download/nginx-1.6.2.tar.gz

tar xzvf nginx_1.6.2.tar.gz

git clone git://github.com/arut/nginx-rtmp-module.git

3.编译nginx-rtmp

./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_stub_status_module 或者添加了统计功能的:
  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-http_flv_module --with-http_perl_module --with-mail --with-http_xslt_module --add-module=/home/defonds/nginx-rtmp-module

make

make install


人数统计:

01.<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
02.  
03.<xsl:output method="html"/>  
04.  
05.<xsl:param name="app"/>  
06.<xsl:param name="name"/>  
07.  
08.<xsl:template match="/">  
09.    <xsl:value-of select="count(//application[name=$app]/live/stream[name=$name]/client[not(publishing) and flashver])"/>  
10.</xsl:template>  
11.  
12.</xsl:stylesheet>  

location /stat {  
02.    rtmp_stat all;  
03.    allow 127.0.0.1;  
04.}  
05.location /nclients {  
06.    proxy_pass http://127.0.0.1/stat;  
07.    xslt_stylesheet /home/www/nclients.xsl app='$arg_app' name='$arg_name';  
08.    add_header Refresh "3; $request_uri";  
09.}  



http://blog.csdn.net/wutong_login/article/details/42292787


你的 Nginx 已经有了 RTMP 直播功能的话,如果你还想统计某直播频道当前观看用户量的话,可以加入 with-http_xslt_module 模块。具体步骤如下:
         1.查看原来的参数
         /usr/local/nginx/sbin/nginx -V
         输出中可以得到原来编译时带有的参数,比如作者得到:
         --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-http_flv_module --with-http_perl_module --with-mail
         这些参数在我们安装新模块时仍然有用。
         2.下载 nginx-rtmp-module 安装包
         nginx-rtmp-module-master.zip,最新下载地址:https://github.com/arut/nginx-rtmp-module
         下载后将其解压缩得到 nginx-rtmp-module-master 目录。
         3.下载 nginx-1.3.8.tar.gz 包
         可以在 http://nginx.org/download/ 找你需要的版本。
         下载后解压缩得到 nginx-1.3.8 目录。
         4.关闭 nginx
         ps - ef | grep nginx
         在进程列表里找到 master 进程,这是 nginx 的主进程号。
         kill -TERM 主进程号
         nginx 被关闭。
         5.安装其他依赖包
         yum install pcre-devel
         yum install openssl-devel
         yum install perl-devel perl-ExtUtils-Embed
         yum install gcc
         yum install libxml2 libxml2-devel libxslt libxslt-devel
         6.编译 with-http_xslt_module 模块
         在步骤一得到的一系列参数后增加以下参数:
         --with-http_xslt_module --add-module=/home/defonds/nginx-rtmp-module-master
         其中 /home/defonds/nginx-rtmp-module-master 是步骤二得到的目录。
         切换进入步骤三得到的 nginx-1.3.8 目录,使用新组合得到的参数列表重新配置:
         ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-http_flv_module --with-http_perl_module --with-mail --with-http_xslt_module --add-module=/home/defonds/nginx-rtmp-module-master
         然后编译:
         make
         最后替换掉原来的二进制执行文件:
         cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
         cp ./objs/nginx /usr/local/nginx/sbin/
         7.修改 nginx 配置文件
         创建一个简单地 xls 表格文件 nclients.xsl 用于提取观看当前频道的用户数量,编辑其内容如下:



[html] view plain copy

print?01.<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
02.  
03.<xsl:output method="html"/>  
04.  
05.<xsl:param name="app"/>  
06.<xsl:param name="name"/>  
07.  
08.<xsl:template match="/">  
09.    <xsl:value-of select="count(//application[name=$app]/live/stream[name=$name]/client[not(publishing) and flashver])"/>  
10.</xsl:template>  
11.  
12.</xsl:stylesheet>  

         然后将其放在一个目录中,比如 /home/www。
         修改 nginx 主配置文件 nginx.conf,添加以下内容:



[html] view plain copy

print?01.location /stat {  
02.    rtmp_stat all;  
03.    allow 127.0.0.1;  
04.}  
05.location /nclients {  
06.    proxy_pass http://127.0.0.1/stat;  
07.    xslt_stylesheet /home/www/nclients.xsl app='$arg_app' name='$arg_name';  
08.    add_header Refresh "3; $request_uri";  
09.}  

         8.重启 nginx
         /usr/local/nginx/sbin/nginx
         No news is good news,终端没有输出证明启动成功。否则参照终端给的异常信息检查主配置文件。
         根据直播频道访问以下地址:
         http://直播服务器IP/nclients?app=app应用名&name=频道名
         有返回结果表示 with-http_xslt_module 模块安装成功。返回结果就是当前频道的观看人数。

参考资料:Nginx RTMP 模块 nginx-rtmp-module 指令详解;
https://github.com/arut/nginx-rt ... mber-of-subscribers


原文地址:http://bbs.u.zhbit.com/forum.php?mod=viewthread&tid=618


0 0