首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

流媒體服務器搭建實戰:RTMP + Nginx + OBS 推流 + VLC/瀏覽器拉流,秒級延遲方案

     編輯:Java 綜合教學

技術選型對比

協議延遲適用場景成熟度
RTMP1-3 秒直播、互動教學極高(Nginx/SRS/Simple-RTMP-Server)
RTSP< 1 秒視訊會議、監控中(Live555 需改源碼支援推流)
HLS10-30 秒點播、大規模分發高(原生 HTTP,CDN 友好)
WebRTC< 500ms實時通話、遠程桌面高(複雜度高,需信令服務器)

結論:直播首選 RTMP,Nginx-rtmp-module 部署最簡單、效能最強。

架構流程

┌─────────┐     RTMP 推流      ┌──────────────┐     RTMP/HTTP-FLV/HLS 拉流      ┌─────────┐
│  OBS    │ ─────────────────▶ │ Nginx-RTMP   │ ──────────────────────────────▶ │  觀衆端  │
│ 推流端  │  rtmp://ip/live/   │  推流/轉碼/   │  flv.js / VLC / SRS Player       │  拉流端  │
└─────────┘     stream_key     │  錄製/轉封裝  │                                 └─────────┘
                              └──────────────┘

一、服務端部署(Ubuntu 20.04/22.04)

1. 編譯安裝 Nginx + rtmp 模組

# 安裝依賴
sudo apt update && sudo apt install -y build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev git

# 下載源碼
wget https://nginx.org/download/nginx-1.24.0.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git

# 編譯安裝
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module
make && sudo make install

2. 核心配置 nginx.conf

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;                    # 開啟直播
            record off;                 # 關閉錄製(或按需開啟)
            # 錄製範例:
            # record all;
            # record_path /data/record;
            # record_unique on;

            # 轉碼範例(需 ffmpeg):
            # exec ffmpeg -i rtmp://localhost/live/$name
            #   -c:v libx264 -preset veryfast -tune zerolatency -c:a aac
            #   -f flv rtmp://localhost/hls/$name;
        }

        application hls {
            live on;
            hls on;                     # 啟用 HLS
            hls_path /data/hls;
            hls_fragment 3s;
            hls_playlist_length 60s;
        }
    }
}

http {
    server {
        listen 80;
        location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; }
        location /stat.xsl { root /usr/local/nginx/html; }
        location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } add_header Cache-Control no-cache; }
    }
}

3. 啟動與驗證

sudo /usr/local/nginx/sbin/nginx
# 檢查端口
netstat -ntlp | grep -E '80|1935'
# 查看統計頁
curl https://localhost/stat

二、推流端:OBS Studio

  1. 下載安裝 OBS(Linux: sudo add-apt-repository ppa:obsproject/obs-studio && sudo apt install obs-studio)
  2. 設置 → 流 → 服務:自定義 → 服務器:rtmp://你的服務器IP/live → 流密鑰:test123
  3. 來源:+ → 「螢幕捕獲」(桌面)/「視頻捕獲設備」(攝像頭)/「媒體源」(視頻文件)
  4. 音頻:+ → 「音頻輸入捕獲」(麥克風)/「音頻輸出捕獲」(系統聲音)
  5. 點擊「開始推流」→ 右下角計時器運行即成功

三、拉流端驗證

1. 瀏覽器(HTTP-FLV,延遲 1-2 秒,推薦)

打開 SRS Player → URL 填入 https://你的服務器IP/live/test123.flv → 播放

2. VLC(RTMP,延遲 3-5 秒)

媒體 → 打開網絡串流 → 輸入 rtmp://你的服務器IP/live/test123 → 播放

3. ffplay(命令行,最低延遲)

ffplay -fflags nobuffer -flags low_delay -framedrop -strict experimental rtmp://IP/live/test123

四、生產環境強化

  • HTTPS/WSS:配置 SSL 證書,啟用 rtmps、https-flv
  • 鑑權:on_publish 回調驗證 stream_key 合法性
  • 轉碼/多碼率:ffmpeg 轉碼推送至 live_hd、live_sd,播放端自適應切換
  • 集群/負載均衡:Nginx 反向代理 + Redis 共享狀態,或使用 SRS 集群模式
  • 監控:Prometheus 抓取 /stat 指標(連接數、帶寬、幀率)+ Grafana 儀表板
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved