最近搭建了一个rtmp直播服务器, 因为nginx的rtmp服务器本身需要一些http的控制, 所以选用了openresty这个nginx+lua的http框架, 再其中包含rtmp服务器, 这样既可以充当rtmp直播服务器,也可以充当http,还可以直接在其中用lua脚本完成相关控制!
现具体说明:

系统环境:linux centos6.5
环境附属安装:
yum install gcc
yum install pcre-devel
yum install openssl-devel
yum install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev
yum install libxml2 libxml2-devel libxslt libxslt-devel
yum install perl perl-devel perl-ExtUtils-Embed
ubuntu环境
apt-get install libxslt.dev
apt-get install libperl-dev
apt-get install openssl
apt-get install build-essential
apt-get install libtool
apt-get install zlib1g-dev
apt-get install libpcre3 libpcre3-dev
apt-get install libssl-dev

openresty 下载地址: https://openresty.org/en/download.html
里面有widnows, linux各种版本, 选取好自己所用的版本, 本博客用的是linux最新的版本
wget https://openresty.org/download/openresty-1.13.6.2.tar.gz
tar xzvf openresty-1.13.6.2.tar.gz
cd openresty-1.13.6.2/bundle/LuaJIT-2.1-20180420
make && make install
ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit
以上是单独安装luajit,这是以前的版本安装方法, 现在最新的版本安装luajit已经合并到./configure里面自动编译, 以上的步骤可以跳过, 不过我喜欢按这个方法来, 如果出现问题可以很好的知道哪出现问题,纯属个人喜好。
在budlle目录下执行
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz
tar xzvf 2.3.tar.gz
wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
tar xzvf v0.3.0.tar.gz
nginx rtmp module 下载最新的版本 地址: https://github.com/arut/nginx-rtmp-module
解压到该目录

到现在,准备工作已经完成, 现可以编译
cd openresty-1.13.6.2

./configure --prefix=/opt/openresty --with-luajit --with-http_ssl_module --user=root --group=root --with-http_realip_module --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ --add-module=./bundle/nginx-rtmp-module-master –with-cc-opt="-I/usr/local/ssl/include" --with-ld-opt="-L/usr/local/ssl/lib" --with-http_xslt_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_perl_module --with-mail

说明 加粗的这段是因为执行./configure时, 一直找不到本机的openssl库, 所以手动添加该库的地址, 所包含的参数具体都是干什么用的, 请自行百度谷歌。
如果出现 :bin/sh^M: bad interpreter: No such file or directory 或者 : No such file or directory
则 vim configure 使用命令 :set ff 来查看文件是dos还是unix
如果是dos 则 :set ff=unix完成之后保存就解决问题了

make && make install
就安装完成了,
现贴出所使用的conf配置, 一些常用的功能都已经添加, 在需要别的功能的时候, 我会更新本博客

=nginx.conf=====================================

user root;
worker_processes 1;
#daemon off;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}
rtmp {
#设置rtmp的日志记录, 该记录只有在直播流结束后过显示在日志里, 不能connect的阶段记录, 该问题暂未解决
log_format rtmp_main ' r e m o t e a d d r [ remote_addr [ remoteaddr[time_local] c o m m a n d " command " command"app" “ n a m e " " name" " name""args” ’
'$bytes_received b y t e s s e n t " bytes_sent " bytessent"pageurl" " f l a s h v e r " ( flashver" ( flashver"(session_readable_time) $connection $session_time ';
access_log logs/rtmp_access.log rtmp_main;
server{
listen 1935;
ack_window 5000;#窗口大小
chunk_size 1024;
application live {

        live on;
        wait_key on;
        drop_idle_publisher 10s;
        wait_video on;
	    interleave on;
		sync 10ms;
    }
}

}

http {
include mime.types;
default_type application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

server {
    listen       80;
    server_name  localhost;
    location / {
        root   html;
        index  index.html index.htm;
    }
	
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
	
	location /stat {
        rtmp_stat all;
        rtmp_stat_stylesheet stat.xsl;#将stat.xsl文件放置到安装目录里的html文件夹中
    }
	
    location /stat.xsl {
        root html;
    }
	location /nclients {  
		proxy_pass http://127.0.0.1/stat;  #将nclients.xsl文件放置到安装目录里的html文件夹中, nclients.xsl具体内容在下面
		xslt_stylesheet html/nclients.xsl app='$arg_app' name='$arg_name';  
		add_header Refresh "3; $request_uri";  
	}
	
	location /test{
		content_by_lua_file conf/lua/test.lua;#测试lua执行的helloworld
	}	  
	
	location /control{
		rtmp_control all;#rtmp的http控制api生效
	}
    
}

}
-------------nclients.xsl-----------------------------------------------------------------------
<xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>

<xsl:output method=“html”/>

<xsl:param name=“app”/>
<xsl:param name=“name”/>

<xsl:template match="/">
<xsl:value-of select=“count(//application[name= a p p ] / l i v e / s t r e a m [ n a m e = app]/live/stream[name= app]/live/stream[name=name]/client[not(publishing) and flashver])”/>
</xsl:template>

</xsl:stylesheet>

以上就可以启动nginx, 生效我们自己的rtmp服务器!

如果觉得有用, 请关注我的博客!!!!
做专注最接地气流媒体相关内容!!!!
我以后也会尽可能,尽自己最大水平持续更新!!!!

Logo

更多推荐