如何在 Linux 服务器上使用 Nginx-RTMP、HLS 和 DASH 设置视频流服务器

从直播和在线课堂到娱乐平台和社交媒体,视频流已成为现代数字体验的基石。对于希望建立自己的流媒体基础架构的开发人员和内容创建者来说,拥有一个强大且可扩展的流媒体服务器至关重要。

本文将探讨在 Linux 服务器上使用带有 RTMP(实时消息协议)模块的 Nginx 设置视频流媒体服务器。通过这种设置,您可以使用 RTMP 摄取视频流,并使用 HLS 和 DASH 将其传输给观众,确保与电脑、手机和智能电视等各种设备兼容。

为什么将 Nginx 与 RTMP、HLS 和 DASH 一起使用?

  • 带有 RTMP 模块的 Nginx:Nginx 是一款功能强大的轻量级 Web 服务器,以高性能和处理大量同时连接的能力而闻名。通过添加 RTMP 模块,Nginx 成为使用 RTMP 协议的实时视频内容的强大流媒体服务器。RTMP 是一种低延迟协议,非常适合实时流媒体。
  • HLS 和 DASH :虽然RTMP非常适合采集直播流,但大多数现代浏览器和移动设备并不原生支持它。HLS (由 Apple 开发)和DASH(开放标准)是自适应比特率流媒体协议,可为所有主要平台和设备之间的视频传输提供高兼容性和高质量。将 RTMP 转换为 HLS 和 DASH 可在几乎所有 Web 和移动客户端上实现无缝播放。

前提条件

具备:

  • Linux 服务器(具有 sudo 访问权限)。
  • 使用终端和命令行工具的基本知识。
  • 需要域名或 IP 地址才能访问服务器。

步骤 1:安装所需的依赖项

首先,确保系统是最新的,并安装使用 RTMP 模块编译 Nginx 所需的必要构建工具和库。

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential libpcre3 libpcre3-dev libssl-dev zlib1g zlib1g-dev unzip

步骤 2:下载并安装带有 RTMP 模块的 Nginx

Nginx默认不包含RTMP模块,所以需要下载Nginx和RTMP模块源码并一起编译。

1. 下载Nginx和RTMP模块源代码:

cd /usr/local/src 
wget http://nginx.org/download/nginx-1.21.6.tar.gz   # 使用最新可用版本
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

2. 解压下载的文件:

tar -zxvf nginx-1.21.6.tar.gz
unzip master.zip

3. 使用 RTMP 模块编译 Nginx:

导航到解压的 Nginx 文件夹并将其配置为包含 RTMP 模块:

cd nginx-1.21.6 
./configure --add-module=../nginx-rtmp-module-master --with-http_ssl_module 
make 
sudo make install

安装 Nginx 到/usr/local/nginx

步骤 3:使用 RTMP、HLS 和 DASH 支持配置 Nginx

1. 创建HLS和DASH所需的目录:

创建存储 HLS 和 DASH 片段的目录:

sudo mkdir -p /usr/local/nginx/html/stream/hls 
sudo mkdir -p /usr/local/nginx/html/stream/dash

2. 编辑Nginx配置文件:

在文本编辑器中打开 Nginx 配置文件:

sudo nano /usr/local/nginx/conf/nginx.conf

替换内容或者添加以下配置:

worker_processes  1;

events {
    worker_connections  1024;
}

# RTMP configuration
rtmp {
    server {
        listen 1935; # Listen on standard RTMP port

        chunk_size 4000;

        application stream {
            live on;

            # HLS
            hls on;
            hls_path /usr/local/nginx/html/stream/hls;
            hls_fragment 3;
            hls_playlist_length 60;

            # MPEG-DASH
            dash on;
            dash_path /usr/local/nginx/html/stream/dash;

            # disable consuming the stream from nginx as rtmp
            deny play all;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen 80;

        # HLS fragments
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /usr/local/nginx/html/stream;
            add_header Cache-Control no-cache;

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

            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;
            }
        }

        # DASH fragments
        location /dash {
            types {
                application/dash+xml mpd;
                video/mp4 mp4;
            }
            root /usr/local/nginx/html/stream;
            add_header Cache-Control no-cache;

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

            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;
            }
        }
    }
}

保存并退出编辑器。

步骤4:启动Nginx

使用安装路径启动 Nginx:

sudo /usr/local/nginx/sbin/nginx

要在进行更改后重新启动或重新加载 Nginx:

sudo /usr/local/nginx/sbin/nginx -s reload

步骤 5:使用 OBS 测试配置并访问 DASH 流

1. 设置 OBS 进行流式传输:

打开OBS Studio(或任何其他 RTMP 编码器)并将其配置为流式传输到您的 Nginx 服务器:

  • 服务器网址: rtmp://your_server_ip/stream
  • 流密钥: test

替换your_server_ip为您的服务器的 IP 地址或域。

2. 在 OBS 中开始流式传输。

  • 在视频播放器中访问 DASH 流:
  • 一旦 OBS 开始流式传输,就可以通过以下方式访问 DASH 流:
http://your_server_ip/dash/test.mpd

使用与 DASH 兼容的播放器(如 VLC Media Player)或使用 Video.js 设置一个简单的 HTML 页面以在浏览器中播放流。

步骤 6:确保端口已打开

确保防火墙中的端口 80(HTTP)和 1935(RTMP)处于打开状态:

sudo ufw allow 80/tcp
sudo ufw allow 1935/tcp

结论

按照以上步骤,您就成功地在 Linux 服务器上使用带有 RTMP 模块的 Nginx 架设了视频流媒体服务器。通过此配置,可以使用 RTMP 流式传输实时视频,并使用 HLS 和 DASH 协议向广大受众提供视频,确保在各种设备和平台上的兼容性。

作者:Lakshitha Perera

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/yinshipin/53609.html

(0)

相关推荐

发表回复

登录后才能评论