前言
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
视频,从而兼容了移动端,所以现在很多直播平台,尤其是手机直播平台,都会选择它。
安装基于宝塔Nginx的推流模块
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的rtmp重写
方案一:
此方法是将推流和拉流配置信息都放在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;
rtmp推流
推荐工具OBS Studio
,推流地址:rtmp://域名或IP/hls
,如使用串流密钥请在拉流时加上拉流码;推流设置如下图:
配置结束保持返回主界面进行推流如下图:
rtmp拉流
拉流测试工具:VLC
或者web
工具
拉流地址:http://域名或IP/hls
,如上面推流使用串流密钥请在此地址后加上串流密钥如:拉流地址:http://域名或IP/hls/串流密钥/index.m3u8
。VLC
播放器拉流如下图:
推拉流效果
工具下载
为了您的安全请通过以上链接到官方下载软件使用!!!
- 本站名称:清风资源网
- 本站永久地址:www.mcoxn.com
- 本站提供的源码、模板、插件等等其他资源,除资源本身问题外,都不包含免费技术服务,请大家谅解!
- 本站资源解压密码一般都为www.mcoxn.com如发现链接失效,请联系在线客服更新。
- 本站所有代码模板仅供学习交流使用,请勿用于商业用途,及违法侵权行为使用均与本站无关。
- 源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。
- 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。
- 本站所有资源来源于公开互联网搜集和网友投稿提供,仅供个人学习研究使用,若本站收录的内容对您的版权或者利益造成损害,请提供相应的资质证明发邮件至kakbga@qq.com我们将于3个工作日内予以删除。
评论(0)