新增串流轉發方案(MediaMTX/ffmpeg)突破單一RTSP連線限制

This commit is contained in:
Timmy
2026-06-21 09:23:47 +08:00
parent 19d68c5653
commit 22277f8f2c
3 changed files with 75 additions and 0 deletions

View File

@@ -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)
## 摘要

14
mediamtx.yml Normal file
View File

@@ -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

60
串流轉發.md Normal file
View File

@@ -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` 轉推。