云计算百科
云计算领域专业知识百科平台

linux下搭建RTMP视频点播、直播、HLS服务器

​一、环境准备​​

​​1. 服务器要求​​
  • ​​操作系统​​:Ubuntu/CentOS/Debian(推荐 Ubuntu 22.04 LTS)
  • ​​硬件配置​​:4GB 内存 + 2 核 CPU(HLS 转码需更高配置)
  • ​​依赖库​​:gcc、make、pcre、zlib、openssl
​​2. 安装 Nginx + RTMP 模块​​

# 下载 Nginx 和 RTMP 模块源码
wget http://nginx.org/download/nginx-1.25.3.tar.gz
git clone https://github.com/arut/nginx-rtmp-module

# 编译安装
tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3
./configure –add-module=./nginx-rtmp-module –with-http_ssl_module
make && sudo make install

​​3. 安装 FFmpeg​​

sudo apt-get install ffmpeg # Ubuntu/Debian
# 或手动编译安装最新版(支持 H.265 硬编解码)


​​二、Nginx 配置​​

​​1. 基础 RTMP 配置​​

编辑 /usr/local/nginx/conf/nginx.conf,添加以下内容:

rtmp {
server {
listen 1935; # RTMP 默认端口
chunk_size 4096; # 数据块大小

# 直播应用
application live {
live on; # 开启直播
record off; # 关闭录制
# HLS 支持
hls on;
hls_path /tmp/hls; # HLS 文件存储路径
hls_fragment 5s; # 每个 TS 文件时长
hls_playlist_length 60s; # 播放列表长度
}

# 点播应用
application vod {
play /opt/video/vod; # 点播文件目录
}
}
}

http {
server {
listen 80;
server_name localhost;

# HLS 访问配置
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *; # 跨域支持
}

# RTMP 状态监控
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/nginx/nginx-rtmp-module;
}
}
}

​​2. 启用 HTTP-FLV 支持(可选)​​

安装 nginx-http-flv-module:

git clone https://github.com/winshining/nginx-http-flv-module
./configure –add-module=./nginx-http-flv-module –add-module=./nginx-rtmp-module
make && sudo make install

配置 /etc/nginx/conf.d/flv.conf:

location /live {
flv;
root /tmp/hls;
add_header Access-Control-Allow-Origin *;
}


​​三、功能实现​​

​​1. RTMP 直播推流与播放​​
  • ​​推流地址​​:rtmp://服务器IP/live/stream_key
  • ​​播放地址​​:
    • RTMP:rtmp://服务器IP/live/stream_key
    • HLS:http://服务器IP/hls/stream_key.m3u8
​​2. 视频点播​​
  • 将视频文件(windows用 scp -r "本地文件路径" 用户名@服务器IP:/目标路径 如test.mp4)放入 /opt/video/vod 目录。
  • ​​播放地址​​:rtmp://服务器IP/vod/test.mp4
​​3. HLS 实时切片​​
  • FFmpeg 自动将 RTMP 流切片为 HLS 格式: ffmpeg -re -i input.mp4 -c:v copy -c:a copy -f flv rtmp://服务器IP/live/stream

​​四、优化与安全​​

​​1. 性能优化​​
  • ​​启用硬件加速​​(NVIDIA GPU): rtmp {
    application live {
    # 启用 GPU 编码
    exec ffmpeg -hwaccel cuvid -i rtmp://localhost/live/$name \\
    -c:v h264_nvenc -preset fast -b:v 2500k \\
    -c:a aac -b:a 128k -f flv rtmp://localhost/hls/$name_720p;
    }
    }
  • ​​调整缓冲区​​: rtmp {
    chunk_size 8192; # 增大块大小以减少延迟
    }
​​2. 安全加固​​
  • ​​访问控制​​: location /hls {
    allow 192.168.1.0/24; # 允许内网访问
    deny all; # 拒绝其他 IP
    }
  • ​​HTTPS 配置​​: server {
    listen 443 ssl;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    }

​​五、测试与验证​​

​​1. 推流测试​​

使用 OBS 推流:

  • ​​推流地址​​:rtmp://服务器IP/live/stream
  • ​​流密钥​​:test
​​2. 播放测试​​
  • ​​HLS 播放​​:浏览器访问 http://服务器IP/hls/stream.m3u8
  • ​​RTMP 播放​​:VLC 播放器输入 rtmp://服务器IP/live/stream
​​3. 日志监控​​
  • ​​RTMP 状态页​​:http://服务器IP/stat
  • ​​错误日志​​:/usr/local/nginx/logs/error.log

​​六、常见问题解决​​

​​问题​​​​解决方案​​
​​推流失败(Error 403)​​ 检查 hls_path 目录权限:chmod 777 /tmp/hls
​​HLS 无法播放​​ 确认 FFmpeg 是否生成 .m3u8 和 .ts 文件,检查防火墙是否开放 80/1935 端口
​​延迟过高​​ 减小 hls_fragment(如 3s),启用低延迟模式:-preset ultrafast
​​Nginx 启动报错​​ 检查配置语法:nginx -t,重新编译时确保依赖库版本兼容

​​七、扩展应用​​

  • ​​多平台级联​​:通过 push 指令将流推送到其他服务器(如 YouTube/抖音): application live {
    live on;
    push rtmp://youtube/stream_key;
    }
  • ​​动态码率自适应​​:结合 FFmpeg 生成多分辨率 HLS 流: ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 -b:v 2500k \\
    -vf scale=854:480 -c:v libx264 -b:v 1000k \\
    -f flv rtmp://服务器IP/live/stream_720p

通过以上配置,可搭建一个高性能的流媒体服务器,支持低延迟直播、点播回放及多终端自适应播放。如需进一步优化,可参考 Nginx 官方文档及 FFmpeg 高级参数调优。

出现问题:记得私信与我交流

赞(0)
未经允许不得转载:网硕互联帮助中心 » linux下搭建RTMP视频点播、直播、HLS服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!