From 22277f8f2ce867d910d201dfd89d375d990f10d9 Mon Sep 17 00:00:00 2001 From: Timmy Date: Sun, 21 Jun 2026 09:23:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=B2=E6=B5=81=E8=BD=89?= =?UTF-8?q?=E7=99=BC=E6=96=B9=E6=A1=88(MediaMTX/ffmpeg)=E7=AA=81=E7=A0=B4?= =?UTF-8?q?=E5=96=AE=E4=B8=80RTSP=E9=80=A3=E7=B7=9A=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + mediamtx.yml | 14 ++++++++++++ 串流轉發.md | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 mediamtx.yml create mode 100644 串流轉發.md diff --git a/README.md b/README.md index 094a823..091899e 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ TL-IPC42EW-4 網路攝影機(`192.168.42.150`)的研究記錄。 ## 內容 - [TL-IPC42EW-4-研究報告.md](./TL-IPC42EW-4-研究報告.md) — 裝置身分、規格、網路埠探測、RTSP/Web 操作方式 +- [串流轉發.md](./串流轉發.md) — 用 MediaMTX 突破單一 RTSP 連線限制,供多端觀看(附 [`mediamtx.yml`](./mediamtx.yml)) ## 摘要 diff --git a/mediamtx.yml b/mediamtx.yml new file mode 100644 index 0000000..0ec2a02 --- /dev/null +++ b/mediamtx.yml @@ -0,0 +1,14 @@ +# MediaMTX 設定:把攝影機唯一的 RTSP 串流轉發給多個觀看端 +# 用法:mediamtx ./mediamtx.yml +paths: + # 主碼流 H.265 1080p → 對外路徑 /cam + cam: + source: rtsp://192.168.42.150:554/stream1 + rtspTransport: tcp + sourceOnDemand: yes # 沒人看時不連攝影機,自動釋放那唯一的連線槽 + + # 子碼流 H.264 704×576 → 對外路徑 /cam-sub(手機/縮圖用) + cam-sub: + source: rtsp://192.168.42.150:554/stream2 + rtspTransport: tcp + sourceOnDemand: yes diff --git a/串流轉發.md b/串流轉發.md new file mode 100644 index 0000000..84431a7 --- /dev/null +++ b/串流轉發.md @@ -0,0 +1,60 @@ +# 用轉發伺服器突破「單一 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`。 + +## 選哪個 + +- 只是想多人/多端看 → **MediaMTX**,三行設定搞定,支援 RTSP/HLS/WebRTC 全包。 +- 已經有 RTMP/HLS 基礎設施、想接進去 → ffmpeg `-c copy` 轉推。