Ubuntu x Docker x nginx-rtmp:架設 RTMP 串流伺服器不求人!快速安裝啟動教學,附贈錄影功能!

2023/05/28 801 0 多媒體 , 作業系統 , 伺服器 , Linux , Ubuntu , 串流錄製 , ,

RTMP(Real-Time Messaging Protocol,即時訊息傳送通訊協定)是一種用於串流媒體的通訊協定,基於 TCP,預設使用 1935 埠的「明文」協定,現今廣泛用於影音串流等用途,這次我要自行在機器上架設 RTMP 串流伺服器,也能解決電腦攝影機鏡頭畫面只能給一個軟體使用的限制,串流就代表可以多方送給其他程式或遠端機器上,用途變得非常廣泛。首先我作業環境是 Ubuntu,並且已經安裝好 Docker 及 Docker-Compose,接著就是用站長我處理好的快速啟動包(已經上 GitHub)來進行以下流程,我使用 WSL 進行操作示範。


▲ 首先我在根目錄 / 下直接 git clone https://github.com/qwe987299/nginx-rtmp.git,接著 cd nginx-rtmpls 會看到以下檔案:

📁 recordings - 存放錄影檔案的子目錄
📄chmod.sh - 協助調整 recordings 權限為 777 的腳本,透過 sh chmod.sh 執行(請優先執行這個)
📄docker-compose.yml - Docker 容器服務配置檔
📄nginx.conf - nginx-rtmp 配置檔,錄影在這裡設定

來看兩個最重要的檔案:

📄docker-compose.yml

version: '3'
services:
  nginx-rtmp:
    container_name: nginx-rtmp
    image: tiangolo/nginx-rtmp
    restart: always
    ports:
      - 1935:1935
    volumes:
      - ./recordings:/recordings
      - ./nginx.conf:/etc/nginx/nginx.conf
    environment:
      - TZ=Asia/Taipei

這個配置檔案是使用 Docker 定義了一個服務,該服務使用了 tiangolo/nginx-rtmp 映像(image)來運行一個名為 nginx-rtmp 的容器。以下是各個配置的解釋:
- `version: '3'`:這是 Docker Compose 文件的版本。在這個配置中,使用的是版本 3。
- `services`:這是定義服務的部分。在這個配置中,只有一個服務,即 `nginx-rtmp`。
- `nginx-rtmp`:這是服務的名稱。
- `container_name: nginx-rtmp`:這是容器的名稱,設為 "nginx-rtmp"。
- `image: tiangolo/nginx-rtmp`:這是用於建立容器的 Docker 映像。在這個配置中,使用的是 `tiangolo/nginx-rtmp` 映像。
- `restart: always`:這是容器的重啟策略,設為 "always",表示無論何時容器停止,Docker 都會自動重啟它。
- `ports: - 1935:1935`:這是將容器內的端口轉發到主機上的端口。在這個配置中,將容器的 1935 端口轉發到主機的 1935 端口,這是 RTMP(Real-Time Messaging Protocol)使用的端口,用於串流影音。
- `volumes: - ./recordings:/recordings - ./nginx.conf:/etc/nginx/nginx.conf`:這是將主機的目錄或文件掛載到容器內的目錄。在這個配置中,將主機的 `./recordings` 目錄掛載到容器內的 `/recordings` 目錄,以及將主機的 `./nginx.conf` 文件掛載到容器內的 `/etc/nginx/nginx.conf` 文件。這些掛載可以用於設置容器的配置文件或進行數據永久化。
- `environment: - TZ=Asia/Taipei`:這是設定容器環境變量的部分。在這個配置中,設定了一個環境變數 `TZ`,其值為 `Asia/Taipei`,用於指定容器所在的時區為台北時區。

📄nginx.conf

worker_processes auto;
rtmp_auto_push on;
events {}
rtmp {
    server {
        listen 1935;
        listen [::]:1935 ipv6only=on;


        application live {
            live on;
            
    # 錄影設定
            record all;
            record_path /recordings;
            record_unique off;
            record_interval 300s;
            record_suffix -%Y%m%d_%H%M%S.mp4;
            record_max_frames 0;
            record_notify on;
        }
    }
}

以上配置檔設定了一個 RTMP 伺服器,並在名為 "live" 的應用程式中啟用了直播功能。該伺服器會監聽 1935 端口,並將所有的直播流進行錄影,錄影檔案儲存在 "/recordings" 路徑下,以每 300 秒(5 分鐘)為間隔進行一次錄影。錄影檔案的命名格式使用日期和時間。

docker-compose up -d 可將 RTMP 伺服器運行起來,錄影功能要正常請執行 sh chmod.sh


▲ 在 OBS 設定中可找到「串流」,伺服器設置為「rtmp://位址/live」,串流金鑰可自訂,這邊設為「test」,接著就能開始串流了!

▲ 開始串流後就能在 recordings 子目錄中看到錄影檔案(WSL 路徑為 \\wsl.localhost\Ubuntu\nginx-rtmp\recordings),透過支援 RTMP 的播放器(這邊用 PotPlayer),也能使用「rtmp://位址/live/自訂的串流金鑰」查看串流畫面。

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇