Nginx-rtmp-module是俄罗斯人开发的一款NGINX的流媒体插件,除了直播发布音视频流之外具备流媒体服务器的常见功能:
1.比如推拉流媒体资源;
2.基于HTTPFLV/MP4 VOD点播;
3.HLS (HTTP Live StreamingM3U8的支持;
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,而H5IOSAndroid并不能原生支持flash,因此这种协议能流行多久,就不得而知了,毕竟移动端才是现在的主流。
2、HLS:
hlsApple推出的直播协议,是通过视频流切片成文件片段来直播的。客户端首先会请求一个m3u8文件,里面会有不同码率的流,或者直接是ts文件列表,通过给出的ts文件地址去依次播放。在直播的时候,客户端会不断请求m3u8文件,检查ts列表是否有新的ts切片。这种方式的实时性较差,不过优势是H5IOSAndroid都原生支持。
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;#在位置前加上上面内容。

具体设置如下图:

http站点配置全部内容应该如下:

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.m3u8VLC播放器拉流如下图:

OBS Studio VLC media player

为了您的安全请通过以上链接到官方下载软件使用!!!

 
  • 本站名称:清风资源网
  • 本站永久地址:www.mcoxn.com
  • 本站提供的源码、模板、插件等等其他资源,除资源本身问题外,都不包含免费技术服务,请大家谅解!
  • 本站资源解压密码一般都为www.mcoxn.com如发现链接失效,请联系在线客服更新。
  • 本站所有代码模板仅供学习交流使用,请勿用于商业用途,及违法侵权行为使用均与本站无关。
  • 源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。
  • 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。
  • 本站所有资源来源于公开互联网搜集和网友投稿提供,仅供个人学习研究使用,若本站收录的内容对您的版权或者利益造成损害,请提供相应的资质证明发邮件至kakbga@qq.com我们将于3个工作日内予以删除。