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-rtmp
,ls
會看到以下檔案:
📁 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/自訂的串流金鑰」查看串流畫面。
留言區 / Comments
萌芽論壇