首页技术博客 技术教程 正文

nginx-rtmp-win32搭建RTMP流服务器的一篇笔记

2021-01-11 1167 0条评论

RTMP是一种基于TCP协议的视频流传输协议,默认端口号是1935。

RTMP服务器监听端口,接收来自推流客户端的视频数据,并转发给拉流客户端。

支持一人推送,万人观看!像电视直播或者游戏直播都是采用该技术。

 

nginx-rtmp-win32就是这样的一个RTMP服务器;

 

nginx官方下载的windows版本是不带rtmp模块的,目前最新稳定版本是1.16;

要添加rtmp模块需要自己用源码编译,不过好在有前人做好了win32的移植。

nginx-rtmp-win32在这里下载:https://github.com/illuspas/nginx-rtmp-win32

虽然该项目已经停止更新了,但是对于个人搭建学习和测试用的RTMP服务器还是没有问题的。

 

有了RTMP服务器,那么还需要客户端软件:

推流可以使用OBS这类软件;

拉流可以使用PotPlayer这类播放器。

直播过程中视频数据流是从OBS传输到nginx再传输到播放器,只要网速够快,就可以获得超低延时的视频直播。

 

如果想在网页上观看视频直播?

由于浏览器不支持rtmp协议,所以需在网页上嵌入一个adobe flash player插件来接收并播放视频流。

目前好像也有基于js的纯H5播放器可以实现,没有去深入研究。

另外还有一种选择是苹果的HLS技术,HLS技术就是把视频流分成无数个TS视频片段。

再通过HTTP协议传输这些视频片段,实现了浏览器观看视频直播。

目前android和ios的浏览器都支持这种技术。

HLS技术一般只应用于拉流,而推流还是使用RTMP协议。

但由于服务器需要对接收的数据进行分片,直播延时比较大。

 

nginx-rtmp-win32非常不错,也支持HLS技术。

它可以把接收到的视频流保存为无数个TS文件,并自动生成m3u8列表,浏览器只要访问对应的m3u8就可以观看直播了。

 

说了这么多理论上的东西,该来实践一下了。

本次实践的内容是使用OBS推流,然后使用HLS技术,在iPhone的浏览器里面观看直播。

首先是编辑nginx的配置文件,打开nginx/conf/nginx.conf

参考下面的参数进行配置:

worker_processes 1;
error_log logs/error.log debug;
events
{
worker_connections  100;
}
 
#设置RTMP服务器参数
rtmp
{
server
{
listen 1935;  #设置监听端口
application live    #设置访问路径(rtmp://127.0.0.1/live)
{
live on; #开启rtmp直播功能
deny play all;#禁止RTMP播放(默认推流地址就是播放地址)
hls on; #开启hls功能
hls_path temp/rtmp_temp; #设置hls视频文件存放路径
hls_fragment 5; #设置分片时长(秒)
			hls_playlist_length 10; #设置播放列表时长(秒)
hls_continuous off; #不使用连续模式
hls_cleanup on; #自动清理视频文件(这个默认是打开的,可以不用设置)
hls_nested on; #嵌套模式(为每个直播流创建一个子文件夹)
hls_fragment_naming sequential; #ts命令规则为序号递加
}
}
}
 
#设置HTTP服务器参数
http
{
include       mime.types;
default_type  application/octet-stream;
server_tokens off;
sendfile      on;
server
{
listen       80;
server_name  localhost;
 
#下面是默认的根目录
location /
{
root   html;
index  index.html index.htm;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
		location /stat
		{
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl
		{
root html;
}
        #下面是直播观看地址
location /live
{
alias  temp/rtmp_temp;
			index  index.m3u8;
			autoindex on;
types
			{  
application/vnd.apple.mpegurl m3u8;  
video/mp2t ts;  
}
}
}
}

配置文件修改好了,就可以双击nginx.exe启动了。

nginx.exe会启动两个进程,并且无法正常关闭,只能使用nginx.exe -s stop来关闭!

先试试用浏览器访问http://127.0.0.1:80,如果能看到页面,说明nginx启动成功了。

 

接下来就该OBS上场了,进行视频推流了。

OBS是个好东西,这里以抓取屏幕内容,可以自行设置分辨率和码率。

主要说下推流设置:

因为上面的设置一开始遇到了个坑,输入rtmp://127.0.0.1/live/123456提示连接失败!不加123456则成功。

123456是我想使用的直播流名称,因为设置了hls_nested,nginx会在rtmp_temp下面创建123456文件夹。

后来才知道,这个123456要写在下面那个输入框里。

 

推流成功后,就可以用浏览器打开http://127.0.0.1:80/live/123456/index.m3u8来观看了。

当然PC浏览器不支持HLS技术,所以我们可以用PotPlayer来打开这个链接!

PotPlayer真是windows上最强的本地播放器!

 

另外再说一点:

如果使用hls直播,不一定要使用nginx的http服务,可以使用IIS或者其它WEB服务器,都是可以的。

因为nginx-rtmp-win32只负责把直播视频流保存为ts文件,而传播这些ts文件是HTTP干的事。

所以nginx-rtmp-win32加上任何HTTP服务器都可以实现hls直播。

只不过刚好nginx本身就是一个HTTP服务器。


文章版权及转载声明

本文作者:符文浩 网址:http://blog.fuwenhao.com/post/331.html 发布于 2021-01-11
文章转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:

评论列表 (暂无评论,1167人围观)参与讨论

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码