欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Nginx模块搭建直播服务

程序员文章站 2022-03-17 14:28:27
...

转载请标明出处: https://blog.csdn.net/u014214308/article/details/82698542

直播技术原理:

客户端(A:主播,推流)通过摄像头采集到视频数据,经过转码等操作,再基于RTMP协议发送到服务端(B:媒体服务器),服务端接收到数据以后保持到本地,另一端(C:观众,拉流)基于RTMP协议,请求服务端(B)上的数据到手机(Pad或者PC),经过解码等操作,显示出来

基于Nginx模块搭建直播服务

涉及到的概念:

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    

测试:

基于Nginx模块搭建直播服务

基于Nginx模块搭建直播服务

这里在填写拉流的URL时,需要填写推理的服务器地址+流名称,如果一切正常的话,应该就能看到直播视频了,这里面可能会有3~5秒左右的延迟,这取决于RTMP模块的配置参数hls_fragment,目前设置的是每5秒钟切割一次视频文件,如果想降低延迟率的话,可以把这个值调低一点,当然这可能会带来服务器I/O性能问题,这里只当一个演示用,具体实践场景还要综合考虑。

参考资料:

Nginx-RTMP-Module的官方Github

使用nginx与nginx-rtmp-module搭建流媒体服务器

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

轻松入门Android直播相关技术 从0搭建直播系统

直播推流实现RTMP协议的一些注意事项

Nginx-rtmp直播之业务流程分析

理解RTMP、HttpFlv和HLS的正确姿势

HLS协议介绍

Nginx RTMP 模块 nginx-rtmp-module 指令详解

相关标签: 直播 RTMP