利用nginx搭建RTMP视频点播、直播、HLS服务器


Posted in Servers onMay 25, 2022

开发环境

nginx的服务器的搭建

安装nginx的依赖库

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install openssl libssl-dev

配置并编译nginx
使用nginx的默认配置,添加nginx的rtmp模块。

利用nginx搭建RTMP视频点播、直播、HLS服务器

./configure --add-module=../nginx-rtmp-module-master
make
sudo make install

运行测试nginx
进入安装目录/usr/local/nginx,运行命令./sbin/nginx

注意:以后所有的命令都在/usr/local/nginx目录运行,也nginx配置文件的相对目录。

打开浏览器在地址栏输入:localhost。如果,如下图显示那样就证明您的nginx服务器搭建成功了。

利用nginx搭建RTMP视频点播、直播、HLS服务器

点播视频服务器的配置

通过上一步nginx服务器已经搭建完成,然后我们就可以开启一个视频点播的服务了。打开配置文件nginx.conf,添加RTMP的配置。

worker_processes  1;

events {
    worker_connections  1024;
}
rtmp {                #RTMP服务
    server {
        listen 1935;  #//服务端口 
	chunk_size 4096;   #//数据传输块的大小
        
	application vod {
		play /opt/video/vod; #//视频文件存放位置。
	}
    }
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

配置目录*/opt/video/vod*为存放视频文件的位置了,那我们就往里面放一个文件吧。我放了一个qq.mp4文件。

利用nginx搭建RTMP视频点播、直播、HLS服务器


文件放好之后,那就让我们重新启动一下nginx

sudo ./sbin/nginx -s reload

打开视频播放软件选用的是VLC media-> open network stream…
如图填写我们要点播的节目地址rtmp://localhost/vod/qq.mp4 如图:

利用nginx搭建RTMP视频点播、直播、HLS服务器

点击play就可以播放了。
当然点播不使用RTMP插件nginx自身也是可以实现点播服务的。那就是配置location部分,由于下面我们要配置直播和回看功能所以选用了RTMP服务。

直播视频服务器的配置

接着我们就在点播服务器配置文件的基础之上添加直播服务器的配置。一共2个位置,第一处就是给RTMP服务添加一个application这个名字可以任意起,也可以起多个名字,由于是直播我就叫做它live吧,如果打算弄多个频道的直播就可以live_cctv1、live_cctv2名字任意。第二处就是添加两个location字段,字段的内容请直接看文件吧。

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server { 
        listen 1935;
	chunk_size 4096;
        
	application vod {
		play /opt/video/vod;
	}

	application live{ #第一处添加的直播字段
		live on;
	}
    }

}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
	
	location /stat {     #第二处添加的location字段。
            rtmp_stat all;
	    rtmp_stat_stylesheet stat.xsl;
	}

	location /stat.xsl { #第二处添加的location字段。
		root /usr/local/nginx/nginx-rtmp-module/;
	}

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

添加完这两处之后,重新启动nginx打开浏览器看看,是否有如下图显示:

利用nginx搭建RTMP视频点播、直播、HLS服务器

有没有看到红框框的live字样呢?如果可以显示出来,证明你的配置生效了。

还等什么让我们推送一个节目看看(其实专业词叫录制,后面将会使用录制这个词。)吧。

这次推送我使用的是OBS(Open Broadcaster Software)会给大家介绍如何使用手机采集视频并且推送到服务器上。

首先安装FFmpeg

添加源:

sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next

更新源:

sudo apt-get update

安装:

sudo apt-get install ffmpeg

如果是Ubuntu 15.04可以直接使用

sudo apt-get install ffmpeg

安装obs-studio

添加源:

sudo add-apt-repository ppa:obsproject/obs-studio

更新源:

sudo apt-get update

安装:

sudo apt-get install obs-studio

配置OBS如图:

利用nginx搭建RTMP视频点播、直播、HLS服务器

点击红圈添加“Media Source”,会弹出一个框框,里面的内容就按照图片显示配置就可以了。点击“OK”就能在你的屏幕上播放了。

配置节目的输出流如图所示:

利用nginx搭建RTMP视频点播、直播、HLS服务器

首先点击红圈“setting”进入设置界面。记得要正确填写要录制的服务器路径啊。配置好就可以点击OK了。退出后点击蓝圈,就开始录制节目了。

查看我们的了录制的节目,服务器有没有接收到呢?打开我的服务器地址“http://localhost/stat”查看一下 ,你的显示是否和我的相同呢?如果相同证明服务器已经接收到了录制的节目,客户端可以进行播放了。

利用nginx搭建RTMP视频点播、直播、HLS服务器

播放的地址就是“rtmp://localhost/live/test”,如果您本地有支持rtmp协议的播放器就可以试试了。最后奉上一张观看直播的屏幕截图。

利用nginx搭建RTMP视频点播、直播、HLS服务器

实时回看视频服务器的配置

我们想一想如果直播服务能够把节目录制在本地,我们不就可以直接进行回看先前的节目了吗?回看一分钟、一小时甚至一天的。想想就兴奋不用写代码有现成的可以使用。怎么用呢?继续看nginx的配置吧。

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;
	chunk_size 4096;
        
	application vod {
		play /opt/video/vod;
	}

        application live {
        live on;
	    hls on; #这个参数把直播服务器改造成实时回放服务器。
	    wait_key on; #对视频切片进行保护,这样就不会产生马赛克了。
	    hls_path /opt/video/hls; #切片视频文件存放位置。
	    hls_fragment 10s;     #每个视频切片的时长。
	    hls_playlist_length 60s;  #总共可以回看的事件,这里设置的是1分钟。
	    hls_continuous on; #连续模式。
	    hls_cleanup on;    #对多余的切片进行删除。
	    hls_nested on;     #嵌套模式。
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
	location /stat {
            rtmp_stat all;
	    rtmp_stat_stylesheet stat.xsl;
	}

	location /stat.xsl {
		root /usr/local/nginx/nginx-rtmp-module/;
	}
	
	location /live {  #这里也是需要添加的字段。
		types {  
			application/vnd.apple.mpegurl m3u8;  
			video/mp2t ts;  
		}
		alias /opt/video/hls;   
		expires -1;
		add_header Cache-Control no-cache;  
	}  

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

1.添加完成后需要重新启动nginx,由于这次nginx需要向服务器写切片视频文件,但nginx我又没有给nginx指定用户名只能走默认的nobody用户和nogroup用户组,其实就是没有组。所以我对需要写入的目录做了增大权限的修改。

如下图,这样做就是为了避免由于权限问题而无法写文件。

利用nginx搭建RTMP视频点播、直播、HLS服务器

2.如何给服务器录制视频,在上一节已经说过,这里就不再说了。

3.查看视频文件是否真的录制上没有,继续看图:

利用nginx搭建RTMP视频点播、直播、HLS服务器

已经产生切片视频文件了。其中还有一个index.m3u8。

4.播放视频,这次可是http开头的了,“http://localhost/live/test/index.m3u8”。

5.已经可以播放了,如何回看呢?其实这个index.m3u8文件仅仅是目录。想回看那个就播放那个.ts文件就可以了。

到此这篇关于利用nginx搭建RTMP视频点播、直播、HLS服务器的文章就介绍到这了!


Tags in this post...

Servers 相关文章推荐
Nginx + consul + upsync 完成动态负载均衡的方法详解
Mar 31 Servers
Nginx如何配置Http、Https、WS、WSS的方法步骤
May 11 Servers
nginx实现动静分离的方法示例
Nov 07 Servers
Linux安装apache服务器的配置过程
Nov 27 Servers
Window server 2012 R2 AD域的组策略相关设置
Apr 28 Servers
nginx日志格式分析和修改
Apr 28 Servers
阿里云 Windows server 2019 配置FTP
Apr 28 Servers
详解如何使用Nginx解决跨域问题
May 06 Servers
使用Apache Camel表达REST服务的方法
Jun 10 Servers
Win2008系统搭建DHCP服务器
Jun 25 Servers
本地搭建minio文件服务器(使用bat脚本启动)的方法
Jul 15 Servers
Centos7 Shell编程之正则表达式、文本处理工具详解
Aug 05 Servers
详解Nginx的超时keeplive_timeout配置步骤
May 25 #Servers
nginx 配置指令之location使用详解
May 25 #Servers
zabbix配置nginx监控的实现
May 25 #Servers
nginx 添加http_stub_status_module模块
May 25 #Servers
docker 制作mysql镜像并自动安装
May 20 #Servers
阿里云服务器Ubuntu 20.04上安装Odoo 15
May 20 #Servers
Apache SeaTunnel实现 非CDC数据抽取
May 20 #Servers
You might like
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
validator验证控件使用代码
2010/11/23 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
js中开关变量使用实例
2017/02/24 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
电气专业推荐信范文
2013/11/18 职场文书
应聘收银员个人的求职信
2013/11/30 职场文书
中队活动总结
2014/08/27 职场文书
党建工作整改措施
2014/10/28 职场文书
2015年外联部工作总结
2015/04/03 职场文书
2015年销售助理工作总结
2015/05/11 职场文书