如何使用Nginx-rtmp搭建简易的HLS直播系统

如何使用Nginx-rtmp搭建简易的HLS直播系统

在网上也有一些关于使用Nginx-rtmp来搭建直播系统的教程,可是都是使用rtmp协议,然而rtmp在网页端只能通过Flash player插件进行播放,因为现在的浏览器已经陆陆续续不支持Flash player插件,所以使用rtmp协议做直播是不支持网页端播放。

然而Nginx-rtmp不止支持rtmp协议,而且还支持hls协议,hls协议对网页播放非常友好,今天我就带大家学习一下使用Nginx-rtmp搭建简易的hls直播系统。

专业术语

rtmp协议:RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。

hlv协议:HLS (HTTP Live Streaming)是Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。

一、 工具与环境

Ubuntu 18.04:Linux操作系统

Nginx 1.8.1:一个高性能的HTTP和反向代理web服务器

nginx-rtmp-module:Nginx的rtmp模块

FFmpeg:是一个多媒体框架,可以对视频进行编解码、推拉流等功能的强大工具

VLC media player:一款支持流媒体的视频播放器

二、 安装Nginx与nginx-rtmp_module

网上有很多基于源码的安装教程,步骤是有点繁琐,这里教大家用PPA源直接安装Nginx和nginx-rtmp-module模块,命令如下:

$ sudo add-apt-repository ppa:nginx/stable

$ sudo apt update

$ sudo apt install nginx

$ sudo apt-get install libnginx-mod-rtmp

运行这四行命令,就可以把Nginx和nginx-rtmp-module模块安装上。

三、 配置Nginx

rtmp {

    server {

        listen 1935;

        application hls {

            live on;

            hls on;

            hls_path /data/nginx/rtmp/hls;

        }

    }

}

以上是配置hls的推流配置

location /hls {

        types {

            application/vnd.apple.mpegurl m3u8;

            video/mp2t ts;

        }

        alias /data/nginx/rtmp/hls;

        add_header Cache-Control no-cache;

}

以上是配置hls的拉流配置

四、 使用FFmpeg对摄像头进行推流

在本地安装FFmpeg工具。

1. 查看电脑设备

$ ffmpeg -list_devices true -f dshow -i dummy


我们可以看到电脑里有“HD Webcam”摄像头和“麦克风 (2- Realtek High Definition Audio)”麦克风。

2. 测试摄像头是否可用

$ ffplay -f dshow -i video="HD Webcam"

或

$ ffplay -f vfwcap -i 0

当看到这个画面就证明摄像头可用。

3. 推流摄像头与麦克风

$ ffmpeg -f dshow -i video="HD Webcam"
 -f dshow -i audio
="麦克风 (2- Realtek High Definition Audio)"
 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency
 -f flv  rtmp://192.168.1.5:1935/hls/live

其中rtmp://192.168.1.5:1935/hls/live里的IP为你服务器的IP地址。



4. 播放直播视频

a. 使用VLC media player播放视频

在本地安装VLC media player并打开


点击“媒体”->“开开网络串流”


输入视频地址:192.168.1.5/hls/live.m3,点击“播放”即可播放视频

b. 使用网页播放视频

创建文件video.html,输入以下代码:

<video src="http://192.168.1.5/hls/live.m3u8" controls="controls">
您的浏览器不支持 video 标签。
</video>

使用浏览器打开video.html,即可播放视频

五、 结语

到此为止,一个直播系统已经完美搭建成功。可是这个直播系统有个比较严重的问题,就是hls协议的延时比较严重,通常有8-10秒的延时,可通过配置来降低延时,但是效果也不太理想。对于一些不太注重延时的需求还是可以满足的。

接下来我会教大家搭建更高级别的直播系统,可实现实时的直播需求,敬请关注。

发布于 2021-07-08 16:35