本文编写于 1648 天前,最后修改于 1648 天前,其中某些信息可能已经过时。

在NAS上,做个推流服务器还是挺不错的,配合ffmpeg,推个电影或者开个直播都挺舒服
但是rtmp模块,apt装的nginx显然是不带的
但是!
从nginx1.9.11开始,nginx支持动态模块
于是可以继续apt install了,好!
编译什么的最讨厌了!

先看看我们apt装的nginx,肯定高于1.9.11了……


开搞!

编译模块

首先,肯定是先把源码拖回来准备编译,这里nginx源码为了确保与已安装版本匹配,直接从apt拉取(请确定是否配置了deb-src源

apt-get source nginx
git clone https://github.com/arut/nginx-rtmp-module.git

之后开始配置编译选项,添加动态模块并指定模块源码
必须在后面加上当前版本nginx -V里的编译选项,否则会出现二进制兼容问题
下面提供的配置和nginx -V的合并在一起就好了
gcc参数-Wdate-time不知道为啥不管用,索性写了仨……解决问题就行又不是不能用(x

cd nginx-1.14.2/
./configure --add-dynamic-module=../nginx-rtmp-module --with-cc-opt="-Wimplicit-fallthrough=0 -Wno-error=date-time -Wno-date-time -Wdate-time"

我加上编译选项之后大概这样,巨大一片,请结合自己的实际,特别是目录什么的,仅供参考

./configure --with-cc-opt='-g -O2 -fdebug-prefix-map=/root/nginx-1.14.2=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wno-error=date-time -Wno-date-time -Wdate-time -Wimplicit-fallthrough=0 -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/root/nginx-1.14.2/debian/modules/http-auth-pam --add-dynamic-module=/root/nginx-1.14.2/debian/modules/http-dav-ext --add-dynamic-module=/root/nginx-1.14.2/debian/modules/http-echo --add-dynamic-module=/root/nginx-1.14.2/debian/modules/http-upstream-fair --add-dynamic-module=/root/nginx-1.14.2/debian/modules/http-subs-filter --add-dynamic-module=/root/nginx-rtmp-module

本着抛啥错接啥错,缺啥库装啥库的理念,我个人需要补装以下

apt install libssl-dev libxslt1-dev libgd-dev libgeoip-dev libpam0g-dev


说起来emmmmmm……我居然SSL也没装……

然后就没问题了
最后,编译模块

make modules

不出意外的话,objs下已经编译出了.so

加载模块

先来找找apt装的nginx模块目录在哪里……
nginx -V,里面应该有写,同时还有nginx.conf的位置


嗯找着了,那就把动态链接库丢进去

cp ./objs/ngx_rtmp_module.so /usr/lib/nginx/modules

最后,修改nginx.conf,加载模块
这步就看你讲究不讲究了……可以直接写在conf最外层


但是其实也有modules-enabled这个目录……我还是讲究地放目录里
内容写这个就行了

load_module modules/ngx_rtmp_module.so;

收工

最后nginx -t……

如果出现的是这个……二进制兼容问题出现了,调整编译选项吧,一般参考nginx -V里的不会有啥问题才对

如果出现的是这个


完事儿,我已经好了
nginx -s reload!

配置rtmp

一下内容,也要放在nginx.conf最外层的位置
具体就不详说了,不是本文重点

rtmp {
   server {
       listen 1935;
       chunk_size 4096;

       application live {
           live on;
           recorder rec{
                record all;
                record_unique on;
                record_path /root/rtmp;
                record_suffix -%Y-%m-%d-%H_%M_%S.flv;
           }
       }
       application hls {
           live on;
           hls on;
           hls_path /tmp/hls;
       }
   }
}