# 用轉發伺服器突破「單一 RTSP 連線」限制 ## 為什麼需要 TL-IPC42EW-4 同時只接受極少的 RTSP 連線(實測只剩 1 個空檔)。多個觀看端直連會撞 `406 Not Acceptable`。 **解法**:架一台轉發(restream / proxy)伺服器。它只用**那 1 條** RTSP 去拉流一次,再對外複製成任意數量的 RTSP / HLS / WebRTC,給無限個觀看端。 ``` 攝影機 ──(1 條 RTSP)──> 轉發伺服器 ──┬─> 觀看端 A (VLC/RTSP) ├─> 觀看端 B (瀏覽器/HLS) ├─> 觀看端 C (手機/WebRTC) └─> ... 不限數量 ``` ## 方案一:MediaMTX(推薦,單一執行檔、免寫程式) ### 安裝(macOS) ```sh brew install mediamtx # 或到 https://github.com/bluenviron/mediamtx/releases 下載對應平台的 binary ``` ### 啟動 用本 repo 附的 [`mediamtx.yml`](./mediamtx.yml): ```sh mediamtx ./mediamtx.yml ``` ### 觀看(把 `<本機IP>` 換成跑 MediaMTX 那台的 IP) | 協定 | 網址 | 用途 | |------|------|------| | RTSP | `rtsp://<本機IP>:8554/cam` | VLC、ffplay、NVR | | HLS | `http://<本機IP>:8888/cam` | 瀏覽器直接看(延遲較高) | | WebRTC | `http://<本機IP>:8889/cam` | 瀏覽器低延遲 | `/cam` = 主碼流(H.265 1080p),`/cam-sub` = 子碼流(H.264 704×576)。 `sourceOnDemand: yes` 的好處:沒人看時 MediaMTX 不連攝影機,會把那唯一的連線槽還回去;有人看才連,且多人看也只佔 1 條。 > 註:HLS 不支援 H.265,瀏覽器用 HLS 看請改走 `/cam-sub`(H.264);WebRTC 視瀏覽器而定。VLC/ffplay 走 RTSP 則 H.265 沒問題。 ## 方案二:ffmpeg 直接轉推(已有 RTMP/HLS 伺服器時) ```sh # 拉一次,轉推到你既有的 RTMP 伺服器(如 nginx-rtmp) ffmpeg -rtsp_transport tcp -i rtsp://192.168.42.150:554/stream1 \ -c copy -f flv rtmp://<你的伺服器>/live/cam ``` `-c copy` 不轉碼、不吃 CPU。要產生 HLS 切片也可 `-f hls output.m3u8`。 ## 已部署(CT103 / 192.168.42.103) MediaMTX v1.19.1 已實際架在 `192.168.42.103`(Ubuntu 24.04,systemd 服務 `mediamtx`,設定檔 `/usr/local/etc/mediamtx.yml`,內容同本 repo 的 [`mediamtx.yml`](./mediamtx.yml))。 **觀看網址**: **觀看網址**: | 串流 | RTSP(VLC/ffplay) | HLS(瀏覽器) | WebRTC(低延遲) | |------|------|------|------| | 主碼流 H.265 1080p | `rtsp://192.168.42.103:8554/cam` | `http://192.168.42.103:8888/cam`(註:HLS 不支援 H.265) | `http://192.168.42.103:8889/cam` | | 子碼流 H.264 704×576 | `rtsp://192.168.42.103:8554/cam-sub` | `http://192.168.42.103:8888/cam-sub` | `http://192.168.42.103:8889/cam-sub` | **驗證結果**: - 主碼流 → HEVC 1920×1080@15fps + PCM A-law 音訊 ✓ - 子碼流 → H.264 704×576@15fps + PCM A-law 音訊 ✓ - **6 條連線同時看主碼流,6/6 全部成功**(攝影機端只佔 1 條,406 問題解除)。 ⚠️ 此 MediaMTX 為全開放(HTTP API 9997 與認證皆關閉),任何能連到 .103 的人都能觀看/推流。對外或不信任網段請開啟認證。 ## 選哪個 - 只是想多人/多端看 → **MediaMTX**,三行設定搞定,支援 RTSP/HLS/WebRTC 全包。 - 已經有 RTMP/HLS 基礎設施、想接進去 → ffmpeg `-c copy` 轉推。