基于Nginx模块搭建直播服务
转载请标明出处: https://blog.csdn.net/u014214308/article/details/82698542
直播技术原理:
客户端(A:主播,推流)通过摄像头采集到视频数据,经过转码等操作,再基于RTMP协议发送到服务端(B:媒体服务器),服务端接收到数据以后保持到本地,另一端(C:观众,拉流)基于RTMP协议,请求服务端(B)上的数据到手机(Pad或者PC),经过解码等操作,显示出来

涉及到的概念:
RTMP: RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题
Nginx: 服务器
nginx-rtmp-module: 基于Nginx的流媒体Server
HLS:苹果出的一套Http Live Streaming协议,它的工作原理简单来说就是把一段视频流,分成一个个小的基于HTTP的文件来下载。当媒体流正在播放时,客户端可以根据当前网络环境,方便地在不同的码率流中做切换,以实现更好的观影体验。
实现步骤:
- 安装Nginx及直播模块
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar -zxvf nginx-1.14.0.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git
cd nginx-1.14.0
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module
make
make install
- 修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
加入以下内容rtmp模块:(rtmp{}的内容和http{}为同级,位置不要放错)
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4000;
application live { #rtmp推流请求路径,名字自己定义
live on; #开启直播功能
hls on;
hls_path /usr/local/nginx/html/live;
hls_fragment 5s;
}
}
}
启动Nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
或者重启
/usr/local/nginx/sbin/nginx -s reload
测试:
-
使用OBS推流
-
使用VLC拉流

这里在填写拉流的URL时,需要填写推理的服务器地址+流名称,如果一切正常的话,应该就能看到直播视频了,这里面可能会有3~5秒左右的延迟,这取决于RTMP模块的配置参数hls_fragment,目前设置的是每5秒钟切割一次视频文件,如果想降低延迟率的话,可以把这个值调低一点,当然这可能会带来服务器I/O性能问题,这里只当一个演示用,具体实践场景还要综合考虑。
参考资料:
推荐阅读
-
使用Nginx反向代理与proxy_cache缓存搭建CDN服务器的配置方法
-
基于Windows 7(本地)和CentOS7.6(云端)的Minecraft服务器(无Forge/有Forge)搭建方法
-
Nginx + php 搭建 超性能 WEB 服务器
-
Nginx服务器搭建和基本配置详解
-
Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案
-
详解Nginx服务器中HTTP Headers相关的模块配置使用
-
详解Nginx服务器的nginx-http-footer-filter模块配置
-
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
-
利用nginx搭建文件服务器
-
Nginx服务器中用于生成缩略图的模块配置教程