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