Nginx:使用 RTMP 模块进行直播

HLS 是最常见的视频流媒体协议,HLS 是一种自适应流媒体技术,可以根据用户的设备和网络条件对播放媒体内容,以获得最佳播放性能。

借助 Nginx RTMP 模块,为服务器添加 RTMP 和 HLS流 直播功能。

环境准备

首先确保你的CentOS 7系统是最新的,并且已经安装了基本的开发工具和库,比如 gccmakegit等。可以通过以下命令安装这些工具:

sudo yum install -y gcc make git

安装Nginx

Nginx不包含在CentOS的默认仓库中,因此需要添加EPEL(Extra Packages for Enterprise Linux)仓库:

sudo yum install -y epel-release

安装Nginx:

sudo yum install -y nginx

安装完成后,启动Nginx服务,并设置为开机启动:

sudo systemctl start nginx
sudo systemctl enable nginx

编译安装Nginx RTMP模块

由于RTMP模块不是Nginx的标准部分,所以需要单独编译安装。首先,下载Nginx和nginx-rtmp-module的源代码:

cd /usr/local/src
sudo git clone https://github.com/arut/nginx-rtmp-module.git
sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
sudo tar zxvf nginx-1.18.0.tar.gz

接下来,编译Nginx并添加RTMP模块:

cd nginx-1.18.0/
sudo ./configure --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx-rtmp-module
sudo make
sudo make install

默认的安装Nginx地址为/usr/local/nginx/,可执行文件为/usr/local/nginx/sbin/nginx,用改可执行文件替换原本装有的 Nginx 的可执行文件。

创建文件夹

为 HLS 准备文件夹:

mkdir /mnt/hls
chown -R nginx:nginx /mnt/hls

配置Nginx和RTMP

编辑 Nginx 的配置文件,添加 RTMP 支持,同时打开 HLS 的转换。打开 /usr/local/nginx/conf/nginx.conf文件,在文件末尾添加 RTMP 配置:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
            hls on;
            hls_path /mnt/hls; #hls的ts切片存放路径
            hls_fragment 3s;
            hls_playlist_length 60s;
        }
    }
}

在 Server 段添加对请求路径 /hls 的访问,从 /mnt/hls 下读取 .m3u8 文件

location /hls {
    # Disable cache
    add_header Cache-Control no-cache;

    # CORS setup
    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Expose-Headers' 'Content-Length';

    # allow CORS preflight requests
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;
        return 204;
    }

    types {
        application/vnd.apple.mpegurl m3u8;
        video/mp2t ts;
    }
    root /mnt/;
}

如果需要 record 则可以参照这篇博客


Last modified on 2024-08-06