diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..20b658d --- /dev/null +++ b/CLAUDE.md @@ -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.04,systemd 服務名 `mediamtx`,設定檔 `/usr/local/etc/mediamtx.yml`,內容須與本 repo 的 `mediamtx.yml` 一致)。 +- **對外路徑命名**:`cam`(主碼流) / `cam-sub`(子碼流)。⚠️ 此命名須符合 .103 線上實況——近期 commit 曾在 `cam`↔`ipc150` 間改動,改名時務必同步 `mediamtx.yml`、`串流轉發.md`、README 三處及 .103 上的設定檔。 + +## 慣例 + +- 一律用繁體中文撰寫文件。 +- 文件區分「已實測驗證」與「規格查證/推測」——研究報告刻意標註哪些是 ffplay 實測、哪些是廠商資料,新增內容請延續這個區分,不要把未驗證的當成事實。 diff --git a/mediamtx.yml b/mediamtx.yml index 0ec2a02..44f2756 100644 --- a/mediamtx.yml +++ b/mediamtx.yml @@ -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: diff --git a/串流轉發.md b/串流轉發.md index 5e030ad..c474164 100644 --- a/串流轉發.md +++ b/串流轉發.md @@ -75,6 +75,15 @@ MediaMTX v1.19.1 已實際架在 `192.168.42.103`(Ubuntu 24.04,systemd 服 ⚠️ 此 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` 後秒斷)。只影響 RTSP,HLS/WebRTC 不受影響。 + +弱端(手機/wifi)建議直接看子碼流 `cam-sub`(H.264 704×576),碼率低不會塞。 + ## 選哪個 - 只是想多人/多端看 → **MediaMTX**,三行設定搞定,支援 RTSP/HLS/WebRTC 全包。