惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
量子位
博客园 - 叶小钗
AI
AI
T
Tor Project blog
Forbes - Security
Forbes - Security
W
WeLiveSecurity
博客园_首页
爱范儿
爱范儿
J
Java Code Geeks
B
Blog
G
GRAHAM CLULEY
aimingoo的专栏
aimingoo的专栏
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
有赞技术团队
有赞技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
H
Help Net Security
博客园 - 三生石上(FineUI控件)
C
Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 司徒正美
The Last Watchdog
The Last Watchdog
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
Spread Privacy
Spread Privacy
F
Fortinet All Blogs
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Security Latest
Security Latest
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
Hugging Face - Blog
Hugging Face - Blog

博客园 - weipt

终于!我造了个「AI代驾」级别的AutoBuilder,一键干掉80%的重复CRUD工作 OpenClaw 配置飞书机器人完整指南:从零到每天定时推送天气 国产数据库私有化部署实战:PolarDB for PostgreSQL 免费容器版踩坑记 发票打印还在花钱?这款免费小工具,A4纸一半大小、自动排版,真香! 🔥 自己写的FBX转3D Tiles工具,免费!还能当模型浏览器用 相同代码在360浏览器能显示,在edge提示webgl不支持,edge下都最新的内核。 什么是技术架构、数据架构、业务架构、应用架构和代码架构? 使用pyinstaller打包的exe文件太大,怎么办 2026无人机新规正式施行!各位飞手赶紧收藏 谈谈EF的两种模式 谈谈EF Core 微软官方的 ORM(对象关系映射)框架 Next.js和blazor server比较开发网站哪个好 Blazor Server和 Blazor WebAssembly区别 关于vue项目中cesium的地图显示问题 关于顺丰退出抖音电商退货业务事件的分析 在WINDOWS上创建NTP授时服务器,并验证是否可用 这样的算作“全栈技术”吗? 大疆上云APIdemo打包配置 用nssm将minio和srs注册成服务 LoRa定位技术和蓝牙AoA定位技术的关系 Mysql查询工具,你还用navcat吗? jar注册为服务的方式 时间戳和时间格式互转
nginx怎么样配置rtmp推流服务器
weipt · 2025-07-22 · via 博客园 - weipt

nginx怎么样配置rtmp推流服务器

Nginx RTMP 服务器配置指南

要配置 Nginx 作为 RTMP 推流服务器,你需要安装和配置 nginx-rtmp-module 模块。以下是完整的配置步骤:

1. 安装 Nginx 和 RTMP 模块

在 Ubuntu/Debian 上安装:

2. 配置 Nginx RTMP 服务器

编辑 Nginx 配置文件(通常位于 /usr/local/nginx/conf/nginx.conf 或 /etc/nginx/nginx.conf):

worker_processes  auto;

events {
    worker_connections  1024;
}

3. 启动 Nginx

sudo /usr/local/nginx/sbin/nginx

4. 测试推流和播放

推流 (使用 OBS 或 FFmpeg):

rtmp://your-server-ip/live/stream-key

播放 (使用 VLC 或 FFplay):

rtmp://your-server-ip/live/stream-key

5. 高级配置选项

访问控制:

application live {
    live on;
    allow publish 192.168.1.0/24;  

转码配置:

application live {
    live on;
    
    exec ffmpeg -i rtmp://localhost/live/$name
      -c:v libx264 -preset veryfast -profile:v baseline -level 3.0
      -c:a aac -b:a 128k -ar 44100
      -f flv rtmp://localhost/live360p/$name;
}

DVR 录制:

application live {
    live on;
    record all;
    record_path /var/rec;
    record_unique on;
    record_suffix -%Y-%m-%d-%H_%M_%S.flv;
    record_interval 30m;
}

6. 安全建议

  1. 使用防火墙限制 RTMP 端口 (1935) 的访问

  2. 考虑设置推流认证

  3. 对于生产环境,建议使用 HTTPS 和身份验证

这样你就配置好了一个基本的 RTMP 推流服务器。根据你的具体需求,可以进一步调整配置。

http是必须的吗?只加载rtmp模块,可以吗

仅配置 RTMP 模块而不启用 HTTP 服务器

是的,可以只配置 RTMP 模块而不启用 HTTP 服务器。HTTP 服务器部分是可选的,主要用于提供 HLS 流、状态监控页面或静态文件服务。如果只需要纯 RTMP 功能,完全可以省略 HTTP 配置部分。

最小化 RTMP 配置示例

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;  

这样配置的特点

  1. 仅 RTMP 功能:只处理 RTMP 协议,不提供 HTTP 相关服务

  2. 更轻量:不加载 HTTP 模块,内存占用更少

  3. 更安全:减少 HTTP 服务可能带来的攻击面

  4. 性能更高:专注于流媒体传输

编译时注意事项

如果确定不需要 HTTP 功能,可以在编译时进一步精简:

./configure --add-module=../nginx-rtmp-module \
            --without-http \
            --without-http_rewrite_module \
            --without-http_gzip_module

使用场景建议

纯 RTMP 配置适合以下场景:

  • 只需要推流/拉流功能

  • 客户端都支持 RTMP 协议

  • 不需要 HLS 或 DASH 等 HTTP 流

  • 不需要状态监控页面

如果需要添加 HTTP 功能,后期可以随时修改配置文件并重载 Nginx。

上面说到的:推流 (使用 OBS 或 FFmpeg):什么意思,怎样用

如何使用 OBS 或 FFmpeg 向 Nginx RTMP 服务器推流

当你配置好 Nginx RTMP 服务器后,需要使用推流软件将视频内容发送到服务器。以下是使用 OBS Studio 和 FFmpeg 进行推流的详细方法:

1. 使用 OBS Studio 推流

OBS Studio 是最常用的免费开源推流软件,适合直播场景。

安装 OBS Studio

配置 OBS 推流步骤

  1. 打开 OBS → 点击右下角"设置"按钮

  2. 选择"推流"选项卡

  3. 配置服务器和流密钥:

    服务: 自定义
    服务器: rtmp://你的服务器IP/live
    流密钥: 任意你设置的流名称(如: test123)

    (示例: rtmp://192.168.1.100/live/test123)

  4. 点击"确定"保存设置

  5. 在"来源"面板添加视频源(如显示器采集、摄像头、视频文件等)

  6. 点击右下角"开始推流"按钮

2. 使用 FFmpeg 推流

FFmpeg 是命令行工具,适合自动化推流或处理文件推流。

安装 FFmpeg

  • Linux: sudo apt install ffmpeg (Ubuntu/Debian)

  • macOS: brew install ffmpeg

  • Windows: 从官网下载编译版本

基本推流命令

常用参数说明

  • -re: 以原始帧率推送(对文件重要)

  • -c:v copy: 视频流不重新编码

  • -preset ultrafast: 最快编码速度(适合直播)

  • -f flv: 输出格式为FLV(RTMP需要)

3. 测试播放推流

配置好推流后,可以用以下方式测试播放:

  1. VLC 播放器:

    • 媒体 → 打开网络串流 → 输入 rtmp://服务器IP/live/流密钥

  2. FFplay:

    ffplay rtmp://服务器IP/live/流密钥
  3. OBS 本身:

    • 添加"媒体源"或"VLC视频源"输入RTMP地址

4. 常见问题解决

  1. 连接被拒绝:

    • 检查服务器防火墙是否开放1935端口

    • sudo ufw allow 1935 (Ubuntu)

  2. 延迟高:

    • 在OBS中降低输出分辨率/比特率

    • 在FFmpeg中使用-preset ultrafast

  3. 认证问题:

    • 如果服务器配置了认证,需要在URL中添加参数:
      rtmp://服务器IP/live/流密钥?user=xxx&pass=xxx

通过以上方法,你就可以成功将视频流推送到自己搭建的Nginx RTMP服务器了。

  • 前面提到obs推流和ffmpeg推送,看懂了,但是这两个已经将流推出来了,那么nginx的推流服务器又是什么

您的问题非常好,这里确实需要明确区分几个概念。让我用更清晰的方式解释整个流程:


1. 角色分工

整个直播系统包含三个关键角色:

  • 推流客户端(OBS/FFmpeg):负责采集、编码并发送视频流

  • 流媒体服务器(Nginx RTMP):负责接收、中转和分发视频流

  • 播放客户端(VLC/播放器):负责接收并播放视频流


2. 为什么需要Nginx RTMP服务器?

当您直接用OBS/FFmpeg推流时,实际上可以直连播放端(点对点模式),但这样会有严重限制:

场景直连播放端通过Nginx RTMP中转
观众数量 只能1对1 支持1对多(成千上万观众)
网络穿透 需要复杂NAT配置 服务器有公网IP即可
协议转换 只能RTMP 可转HLS/DASH等多协议
录制功能 支持服务器录制
带宽压力 推流端直接承担 由服务器分担

3. 典型工作流程

Player3Player2Player1播放端(VLC/浏览器)Nginx RTMP服务器推流端(OBS/FFmpeg)Player3Player2Player1播放端(VLC/浏览器)Nginx RTMP服务器推流端(OBS/FFmpeg)推送RTMP流 (rtmp://server/live/streamkey)分发RTMP流分发RTMP流分发HLS流 (http://server/hls/stream.m3u8)


4. Nginx RTMP服务器的核心功能

您的nginx.conf中 rtmp {} 模块实现了:

  • 中继分发:将1路输入流复制给多个观众

  • 协议转换:可同时输出RTMP/FLV/HLS等多种格式

  • 访问控制:通过allow publish/play限制IP

  • 流管理:通过on_publish实现推流鉴权

  • 录制回放:record指令自动保存直播内容


5. 实际应用场景示例

案例:游戏主播直播

  1. 主播用OBS推流到 rtmp://your-server/live/game123

  2. Nginx服务器:

    • 给网页播放器提供HLS流 http://your-server/hls/game123.m3u8

    • 给手机APP提供RTMP流 rtmp://your-server/live/game123

    • 自动录制到 /videos/game123-20230801.flv

  3. 观众通过不同设备同时观看


6. 关键结论

  • Nginx不是推流源,而是流媒体中转站

  • 推流端和播放端都连接Nginx,由它做"交通调度"

  • 这种架构是直播平台的通用方案(类似Twitch/斗鱼的简化版)

如果需要测试,您可以:

  1. 在本地同时运行OBS和VLC

  2. 推流到 rtmp://localhost/live/test

  3. 用VLC播放同一个地址

  4. 此时Nginx就在默默完成流中转工作

配置 Nginx RTMP 服务器自动录像

在 Nginx RTMP 模块中配置自动录像功能非常简单,以下是详细的配置方法和相关说明:

基础录像配置

在您的 nginx.conf 文件中的 RTMP 应用部分添加录制指令:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        
        application live {
            live on;
            
            

高级录像配置选项

1. 分段录制

2. 只录制特定流

3. 不同录制格式

record_suffix -%Y%m%d%H%M%S.mp4;  

完整配置示例

rtmp {
    server {
        listen 1935;
        
        application live {
            live on;
            record all;
            record_path /var/rec;
            record_unique on;
            record_suffix _%Y%m%d_%H%M%S.flv;
            record_interval 1h;
            record_max_size 4G;
            
            

必要操作步骤

  1. 创建录像存储目录:

    sudo mkdir -p /var/rec
    sudo chown -R www-data:www-data /var/rec  
  2. 重新加载Nginx配置:

  3. 测试推流:

    ffmpeg -re -i test.mp4 -c copy -f flv rtmp://localhost/live/teststream

录像文件处理

录制完成后,您可以通过以下方式处理录像文件:

  1. 自动转码脚本示例 (/usr/local/bin/convert_recording.sh):

    #!/bin/bash
    INPUT=$1
    BASENAME=$2
    OUTPUT="/var/rec/converted/${BASENAME}.mp4"
    
    ffmpeg -i $INPUT -c:v libx264 -preset fast -c:a aac $OUTPUT
  2. 设置定时清理旧录像:

注意事项

  1. 确保磁盘空间充足,录像会占用大量空间

  2. FLV格式兼容性最好,MP4需要分段录制才能播放

  3. 录像会增加服务器CPU和IO负载

  4. 对于生产环境,建议将录像存储在独立磁盘或NAS上

这样配置后,您的Nginx RTMP服务器就会自动录制所有直播内容,并按您设定的规则存储和管理录像文件。

还有一个性能问题,发现rtmp延时稍大,有没有替代的方案,还有rtmp有时播放会卡不流传,影响因素是什么,怎样提高。

RTMP 延迟优化与替代方案

针对您提到的 RTMP 延迟和卡顿问题,我将从优化方案和替代协议两个角度为您分析解决方案。

一、RTMP 延迟优化方案

1. 降低延迟的核心参数调整(Nginx配置)

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        buflen 500ms;  

2. 推流端优化(OBS/FFmpeg)

OBS设置建议:

  • 输出模式 → 高级

  • 关键帧间隔 → 1秒

  • 预设 → 超快(ultrafast)

  • 编码器 → 硬件编码(NVENC/AMF/QSV)

  • 比特率 → 根据网络调整(建议测试确定)

FFmpeg推流示例:

ffmpeg -i input -c:v libx264 -preset ultrafast -tune zerolatency \
       -g 30 -x264-params keyint=30:min-keyint=30 \
       -c:a aac -f flv rtmp://server/app/stream

3. 网络优化方案

问题类型解决方案
带宽不足 降低分辨率(720p)→比特率(2000kbps)
网络抖动 推流端设置FEC(前向纠错)
服务器负载 增加worker_processes和worker_connections
跨运营商 部署CDN或边缘节点

二、RTMP卡顿的常见原因及排查

1. 问题诊断流程

OBS丢帧

正常

timeout

buffer full

CPU高

带宽满

出现卡顿

推流端查看

降低编码参数

服务器检查

nginx错误日志

调整keepalive

增加chunk_size

服务器负载

限制转码

扩容带宽

2. 关键指标监控命令

三、低延迟替代方案对比

1. 协议对比表

协议延迟兼容性适用场景实现方式
RTMP 3-5s 最好 传统直播 nginx-rtmp
WebRTC <1s 浏览器原生 视频会议 SRS/Janus
SRT 1-3s 需要客户端 专业直播 srt-live-server
HLS LL 3-10s 苹果生态 移动端 hls.js
HTTP-FLV 2-3s 网页端 Web直播 flv.js

2. 推荐替代方案实现

方案1:WebRTC超低延迟

方案2:SRT协议

方案3:低延迟HLS

application live {
    hls on;
    hls_path /tmp/hls;
    hls_fragment 1s;  

四、终极优化建议

  1. 硬件加速:

  2. 边缘计算架构:

    推流端 → 边缘节点(就近接入) → 中心集群 → CDN分发
  3. 智能码率适配:

    application live {
        exec_push ffmpeg -i rtmp://localhost/live/$name \
          -filter_complex "split=3[out1][out2][out3]" \
          -map "[out1]" -c:v:0 libx264 -b:v:0 2000k -f flv rtmp://localhost/live_high/$name \
          -map "[out2]" -c:v:1 libx264 -b:v:1 1000k -f flv rtmp://localhost/live_medium/$name;
    }

实际选择方案时,建议先通过ffmpeg -i your_stream分析具体瓶颈,再针对性优化。对于关键业务场景,建议使用WebRTC+SRT混合架构实现最优效果。