調校 MediaMTX 抗閃爍:加大寫入佇列、強制 RTSP 走 TCP

實況偶發「閃一下」,查 journalctl 為應用層問題(非網路):
- reader is too slow → 加 writeQueueSize: 1024(預設 512)吸收瞬時卡頓
- UDP decode errors → rtspTransports: [tcp] 杜絕 UDP 掉包花屏
.103 線上設定已同步並重啟驗證;另補上 init 產生的 CLAUDE.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-22 20:54:28 +08:00
parent 50ccd12837
commit ce4f9f19bd
3 changed files with 41 additions and 0 deletions

27
CLAUDE.md Normal file
View File

@@ -0,0 +1,27 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 這是什麼
純研究/文件記錄 repo主題是 TP-Link **TL-IPC42EW-4** 網路攝影機(`192.168.42.150`)。沒有應用程式原始碼、沒有建置/測試/lint 流程——內容是 Markdown 文件加一份 MediaMTX 設定檔。
檔案:
- `TL-IPC42EW-4-研究報告.md` — 裝置身分、開放埠、RTSP/Web 探測結果(事實來源)
- `串流轉發.md` — 用 MediaMTX 突破單一 RTSP 連線限制的方案說明
- `mediamtx.yml` — 上述方案實際用的設定檔
- `README.md` — 兩份文件的索引與摘要
## 必須跨多檔一致的關鍵事實
這幾項貫穿三份文件,改一處就要同步其餘:
- **RTSP 匿名可看**`/stream1`(H.265 1080p) 與 `/stream2`(H.264 704×576) 兩條碼流皆**無需帳密**。
- **併發限制**:直連 RTSP 實測只剩 1 個空檔,多連線會撞 `406 Not Acceptable`這是「剩餘空檔」非確定的硬上限見研究報告的判定方法。MediaMTX 用 `sourceOnDemand` 只佔 1 條來源連線再對外複製。
- **已部署實況**MediaMTX v1.19.1 跑在 **CT103 / `192.168.42.103`**Ubuntu 24.04systemd 服務名 `mediamtx`,設定檔 `/usr/local/etc/mediamtx.yml`,內容須與本 repo 的 `mediamtx.yml` 一致)。
- **對外路徑命名**`cam`(主碼流) / `cam-sub`(子碼流)。⚠️ 此命名須符合 .103 線上實況——近期 commit 曾在 `cam``ipc150` 間改動,改名時務必同步 `mediamtx.yml``串流轉發.md`、README 三處及 .103 上的設定檔。
## 慣例
- 一律用繁體中文撰寫文件。
- 文件區分「已實測驗證」與「規格查證/推測」——研究報告刻意標註哪些是 ffplay 實測、哪些是廠商資料,新增內容請延續這個區分,不要把未驗證的當成事實。

View File

@@ -1,5 +1,10 @@
# MediaMTX 設定:把攝影機唯一的 RTSP 串流轉發給多個觀看端
# 用法mediamtx ./mediamtx.yml
# 全域:避免觀看端瞬時吃不下 1080p H.265 時直接丟幀造成的閃爍
writeQueueSize: 1024 # 預設 512加大寫入佇列吸收瞬時卡頓
rtspTransports: [tcp] # 強制 RTSP 走 TCP杜絕 UDP 掉包導致的 H.265 花屏/閃爍
paths:
# 主碼流 H.265 1080p → 對外路徑 /cam
cam:

View File

@@ -75,6 +75,15 @@ MediaMTX v1.19.1 已實際架在 `192.168.42.103`Ubuntu 24.04systemd 服
⚠️ 此 MediaMTX 為全開放HTTP API 9997 與認證皆關閉),任何能連到 .103 的人都能觀看/推流。對外或不信任網段請開啟認證。
### 抗閃爍調校2026-06-22
實況曾偶發「閃一下」,查 `journalctl -u mediamtx` 為應用層而非網路問題,已在 [`mediamtx.yml`](./mediamtx.yml) 加兩個全域設定(.103 已同步並重啟驗證):
- `writeQueueSize: 1024`(預設 512— 觀看端瞬時吃不下 1080p H.265 時原本佇列塞爆會直接丟幀log: `reader is too slow, discarding N frames``i/o timeout` 斷線);加大佇列吸收瞬時卡頓。
- `rtspTransports: [tcp]` — 強制 RTSP 只走 TCP杜絕 UDP 掉包造成的 H.265 花屏log: UDP session `decode errors` 後秒斷)。只影響 RTSPHLS/WebRTC 不受影響。
弱端(手機/wifi建議直接看子碼流 `cam-sub`(H.264 704×576),碼率低不會塞。
## 選哪個
- 只是想多人/多端看 → **MediaMTX**,三行設定搞定,支援 RTSP/HLS/WebRTC 全包。