利用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 相关文章推荐
Apache站点配置SSL强制跳转443
Mar 09 Servers
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
Mar 31 Servers
Nginx使用Lua模块实现WAF的原理解析
Sep 04 Servers
Shell脚本一键安装Nginx服务自定义Nginx版本
Mar 20 Servers
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
Apr 02 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
Windows Server 2012 R2 磁盘分区教程
Apr 29 Servers
tomcat默认最大连接数及相关调整方法
May 06 Servers
使用Nginx的访问日志统计PV与UV
May 06 Servers
django项目、vue项目部署云服务器的详细过程
Jul 23 Servers
WIN10使用IIS部署ftp服务器详细教程
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面试题附答案
2009/01/07 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
python中黄金分割法实现方法
2015/05/06 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
django form和field具体方法和属性说明
2020/07/09 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
分布式数据库需要考虑哪些问题
2013/12/08 面试题
结婚典礼证婚词
2014/01/08 职场文书
成龙洗发水广告词
2014/03/14 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
教育读书笔记
2015/07/02 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
python小型的音频操作库mp3Play
2022/04/24 Python
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang