运维

宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器

MarginNote 3 - Mac端PDF阅读批注工具 激活码价格:¥69.00
赤友 NTFS for Mac 助手 -  磁盘硬盘格式读写软件注册激活码价格:¥35.00
虫洞 -  iPhone安卓投屏操控 电脑手机多屏协同,价格:¥45.00
namesilo全网最便宜域名注册商,输入折扣码:nsilo20立减1美元!

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系统的支持;
宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器首先,在搭建服务之前先了解下目前主流的几个直播协议:
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,如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器2、编译Nginx前准备自定义Nginx-rtmp-module模块,如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器3、为Nginx-rtmp-module模块设置编译参数,如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器模块名称:

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、勾选自定义模块并点击提交给系统自动编译安装,如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器5、点击宝塔面板左上角标记的任务符号查看编译进度,如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器6、通过宝塔SSH终端输入nginx -V查看输出参数含红框内容则说明加载模块成功。宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器

方案一:
此方法是将推流和拉流配置信息都放在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环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器配置好nginx.conf点击服务——重载配置宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器完整内容如下:

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、先创建站点,路径选择如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器在完成上面操作后到站点管理打开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;#在位置前加上上面内容。

具体设置如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器
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,如使用串流密钥请在拉流时加上拉流码;推流设置如下图:
宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器配置结束保持返回主界面进行推流如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器

拉流测试工具:VLC或者web工具
拉流地址:http://域名或IP/hls,如上面推流使用串流密钥请在此地址后加上串流密钥如:拉流地址:http://域名或IP/hls/串流密钥/index.m3u8VLC播放器拉流如下图:宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器

宝塔Nginx环境下安装Nginx-rtmp-module模块搭建hls推流直播服务器

OBS StudioVLC media player
为了您的安全请通过以上链接到官方下载软件使用!!!
配置nginx.conf服务实现rtmp推流直播功能 # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official... 时间:2020-6-27 阅读:3.45K 评论:0 阅读全文

(0)

本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!

ToDesk - 安全好用流畅远程控制软件 替代TeamViewer,价格:¥108.00
Eagle - 图片收集管理必备软件 激活码价格:¥119.00
PDF Expert 2 - Mac上优秀的PDF阅读编辑工具,价格:¥119.00

热评文章

发表评论