nginx rtmp 模块搭建直播服务,方便在 Linux 系统里实现,使用包管理命令安装 nginx 和 nginx rtmp 模块。Windows 里,无法简单下载 nginx 官网加 rtmp 模块搭建,需要下载编译好的包。
Windows 下集成 rtmp 模块的编译好的 nginx 包的下载 http://nginx-win.ecsds.eu/
参考
How to set up your own private RTMP server using nginx | OBS Forums
https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/
使用 OBS 推流的自定义设置。推流的 URL 是固定的, key 是任意自定义内容。
也参考
Enabling Video Streaming for Remote Learning with NGINX and NGINX Plus - NGINX
https://www.nginx.com/blog/video-streaming-for-remote-learning-with-nginx/
它的内容有误,直播推流路径是固定的 /live ,key 随意写;直播目录不是 /live,而是 /hls 和 /dash,root 值写作 /tmp 。直播路径结尾,内容要和 key 一样。
以及参考
https://github.com/arut/nginx-rtmp-module/
官网给出的配置例子。包括 VOD 按需点播。
具体 nginx-rtmp 模块一些详细配置,参考官网 wiki:
https://github.com/arut/nginx-rtmp-module/wiki
可以使用 allow、deny 指令配置限定、允许推流、播放的 IP 地址(范围);
可以配置 nginx-rtmp 中继转发推流内容到其他服务器,如哔哩哔哩;
可以配置主动拉取其他播放地址的内容,取代推流,作为直播来源;
可以设置 HLS 格式直播加密,使用 AES 加密,每若干时长更换秘钥,这样播放前需要用 AES 秘钥解密;
可以设置保存直播内容,到视频文件。
关于推流权限限制,可以配置 on_publish,使用追加的密码参数,不过 rtmp 推流在互联网是明文传输的,参数可以被中间人截获到。
推流可以使用 OBS 直播软件,或者使用 ffmpeg 命令。ffmpeg 也可以获取摄像头内容发送到直播服务器。
播放,可以使用 rtmp、hls、dash 协议。
HLS 和 DASH 格式直播,都有几十秒的延迟,难以避免。
另外,局域网里也可以使用 udp 广播、多播,实现视频直播。具体 OBS 软件和 VLC 播放器也支持。
考虑服务器带宽限制,会需要将单一推流服务器内容推送或被动拉取到多个播放服务器,或推送到大型直播网站平台,其中可以使用 ffmpeg 处理加上水印。
有基于 SSL 加密传输的 RTMPS 协议,nginx-rtmp 模块不支持它。但可以嵌入 ffmpeg 实现 RTMPS 加密协议推流。