Nginx-rtmp-module
是俄罗斯人开发的一款NGINX
的流媒体插件,除了直播发布音视频流之外具备流媒体服务器的常见功能:
1.比如推拉流媒体资源;
2.基于HTTP
的FLV/MP4
VOD
点播;
3.HLS
(HTTP Live Streaming
) M3U8
的支持;
4.基于http
的操作(发布、播放、录制);
5.可以很好的协同现有的流媒体服务器以及播放器一起工作;
6.在线调用ffmpeg
对流媒体进行转码;
7.H264/AAC
音视频编码格式的支持;
8.linux
/BSD
/MAC
系统的支持;
首先,在搭建服务之前先了解下目前主流的几个直播协议:
1、RTMP:
实时消息传输协议,Real Time Messaging Protocol
,是Adobe Systems
公司为Flash
播放器和服务器之间音频、视频和数据传输开发的开放协议。协议基于TCP
,是一个协议族,包括 RTMP
基本协议及RTMPT
/RTMPS
/RTMPE
等多种变种。RTMP
是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash
/AIR
平台和支持RTMP
协议的流媒体/交互服务器之间进行音视频和数据通信。这种方式的实时性比较强,基本能保证延迟在1-2s
内,是现在国内直播主要采用的方式之一;不过使用这种协议,就必须安装flash
,而H5
、IOS
、Android
并不能原生支持flash
,因此这种协议能流行多久,就不得而知了,毕竟移动端才是现在的主流。
2、HLS:
hls
是Apple
推出的直播协议,是通过视频流切片成文件片段来直播的。客户端首先会请求一个m3u8
文件,里面会有不同码率的流,或者直接是ts
文件列表,通过给出的ts
文件地址去依次播放。在直播的时候,客户端会不断请求m3u8
文件,检查ts
列表是否有新的ts
切片。这种方式的实时性较差,不过优势是H5
、IOS
、Android
都原生支持。
3、HTTP-FLV:
HTTP-FLV
就是对RTMP
协议的封装,相比于RTMP
,它是一个开放的协议。因此他具备了RTMP
的实时性和RTMP
不具备的开发性,而且随着flv.js
出现(感谢B站
),使得浏览器在不依赖flash
的情况下,播放flv
视频,从而兼容了移动端,所以现在很多直播平台,尤其是手机直播平台,都会选择它。
1、宝塔面板——软件商店——运行环境,找到Nginx
,如下图:2、编译Nginx前准备自定义Nginx-rtmp-module模块,如下图:3、为Nginx-rtmp-module模块设置编译参数,如下图:模块名称:
nginx_rtmp_module
模块描述:
nginx_rtmp_module
温馨提示:模块描述不可使用中文!!!
模块参数:
--add-module=/www/server/nginx/src/nginx-rtmp-module
前置脚本:
#!/bin/bash #安装依赖库 yum install libmaxminddb-devel -y #下载第三方扩展源码 git clone https://github.com/arut/nginx-rtmp-module.git echo "--add-module=/www/server/nginx/src/nginx-rtmp-module" > /www/server/panel/install/nginx_configure.pl
4、勾选自定义模块并点击提交给系统自动编译安装,如下图:5、点击宝塔面板左上角标记的任务符号查看编译进度,如下图:6、通过宝塔SSH终端输入nginx -V
查看输出参数含红框内容则说明加载模块成功。
方案一:
此方法是将推流和拉流配置信息都放在Nginx
的同一个配置文件nginx.conf
来执行两个任务,同时只使用一个域名或者IP的方案;
如您有站点在工作又需要rtmp来推流请查看方案二。
1、在Nginx
配置文件中找到http{
前面加上如下内容:
rtmp { server { listen 1935; application /hls { live on; hls on; hls_path /www/wwwroot/default/hls;#替换成保存流文件路径 } } }
2、在完成上面操作后找到server{
在该位置前加上如下内容:
server{ listen 80; location /hls { #添加视频流存放地址。 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } #访问权限开启,否则访问这个地址会报403 autoindex on; alias /www/wwwroot/default/hls;#视频流存放地址,与上面的hls_path相对应 expires -1; add_header Cache-Control no-cache; #防止跨域问题 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } }
方案二:
此方案是有网站同时又需要rtmp推流的方法。
1、在Nginx
配置文件中找到http{
前面加上如下内容:
rtmp_auto_push on; rtmp { server { listen 1935; #监听的端口 chunk_size 4000; notify_method get; #HLS 直播流配置 application hls { live on; hls on; hls_path /www/wwwroot/default/hls;#视频流存放地址 hls_fragment 5s; hls_sync 100ms; hls_playlist_length 15s; hls_continuous on; #连续模式。 hls_cleanup on; #对多余的切片进行删除。 hls_nested on; #嵌套模式。 } } }
具体设置如下图:配置好nginx.conf
点击服务——重载配置完整内容如下:
user www www; worker_processes auto; error_log /www/wwwlogs/nginx_error.log crit; pid /www/server/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200; multi_accept on; } rtmp_auto_push on; rtmp { server { listen 1935; #监听的端口 chunk_size 4000; notify_method get; #HLS 直播流配置 application hls { live on; hls on; hls_path /www/wwwroot/default/hls;#视频流存放地址 hls_fragment 5s; hls_sync 100ms; hls_playlist_length 15s; hls_continuous on; #连续模式。 hls_cleanup on; #对多余的切片进行删除。 hls_nested on; #嵌套模式。 } } } http { include mime.types; #include luawaf.conf; include proxy.conf; default_type application/octet-stream; server_names_hash_bucket_size 512; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 50m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\."; limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server_tokens off; access_log off; server { listen 888; server_name phpmyadmin; index index.html index.htm index.php; root /www/server/phpmyadmin; #error_page 404 /404.html; include enable-php.conf; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /\. { deny all; } access_log /www/wwwlogs/access.log; } include /www/server/panel/vhost/nginx/*.conf; }
2、先创建站点,路径选择如下图:在完成上面操作后到站点管理打开http
配置文件找到access_log /www/wwwlogs/access.log;
在该位置前加上如下内容:
location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /www/server/nginx/src/nginx-rtmp-module/;#替换成nginx-rtmp-module安装目录 } location /hls { #添加视频流存放地址。 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } #访问权限开启,否则访问这个地址会报403 autoindex on; alias /www/wwwroot/default/hls;#视频流存放地址,与上面的hls_path相对应 expires -1; add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; } access_log /www/wwwlogs/access.log;#在位置前加上上面内容。
server { listen 80; listen [::]:80; server_name www.xxx.com; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/default/hls; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #SSL-END #ERROR-PAGE-START 错误页配置,可以注释、删除或修改 #error_page 404 /404.html; #error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 include enable-php-00.conf; #PHP-INFO-END #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效 include /www/server/panel/vhost/rewrite/www.xxx.com.conf; #REWRITE-END #禁止访问的文件或目录 location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ \.well-known{ allow all; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log off; access_log /dev/null; } location ~ .*\.(js|css)?$ { expires 12h; error_log off; access_log /dev/null; } location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /www/server/nginx/src/nginx-rtmp-module/;#替换成nginx-rtmp-module安装目录 } location /hls { #添加视频流存放地址。 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } #访问权限开启,否则访问这个地址会报403 autoindex on; alias /www/wwwroot/default/hls;#视频流存放地址,与上面的hls_path相对应 expires -1; add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; } access_log /www/wwwlogs/www.xxx.com.log; error_log /www/wwwlogs/www.xxx.com.error.log;
推荐工具OBS Studio
,推流地址:rtmp://域名或IP/hls
,如使用串流密钥请在拉流时加上拉流码;推流设置如下图:
配置结束保持返回主界面进行推流如下图:
拉流测试工具:VLC
或者web
工具
拉流地址:http://域名或IP/hls
,如上面推流使用串流密钥请在此地址后加上串流密钥如:拉流地址:http://域名或IP/hls/串流密钥/index.m3u8
。VLC
播放器拉流如下图:
OBS StudioVLC media player
为了您的安全请通过以上链接到官方下载软件使用!!!
本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!