暫時停滯 2024年3月 - 2024年4月
端到端區網區控系統
基於 Client-Server 架構的局域網監控系統,透過 Socket 通訊與 OpenCV 技術實現即時影像串流與音訊擷取,適用於宿舍監控與家庭安防場景。
LAN Media Stream Python OpenCV Socket
專案簡介
End-to-End LAN Monitor Application 是一個局域網音視訊監控系統,旨在實現區域網路內的遠端監控功能。專案採用 Client-Server 雙角色架構,允許使用者透過 LAN 連接遠端存取攝影機與麥克風,適用於宿舍監控、家庭安防等場景。系統基於 Socket 通訊與 OpenCV 視訊處理技術,提供即時影像串流與音訊擷取能力。
核心理念
- 雙角色系統設計:Agent(被監控端)與 Monitor(監控端)職責分離
- 即時串流傳輸:基於 TCP/IP 的可靠影像與音訊數據傳輸
- 輕量化實作:使用 Python 標準庫與成熟的開源工具,降低開發與部署成本
我的職責
作為專案的唯一開發者,我負責:
系統架構設計
- 設計 Agent-Monitor 雙角色架構,實現角色分離與模組化
- 建立基於 Socket 的 TCP 通訊協議,確保數據傳輸可靠性
- 實作自定義封包格式:9 位元組標頭(序列號 + 資料類型 + 長度)+ 數據載荷
核心功能實作
- 視訊擷取與編碼:使用 OpenCV 擷取攝影機畫面,JPEG 壓縮後透過 Socket 傳輸
- 網路通訊協議:實作 ACK 確認機制、序列號管理(0-65535 循環)、封包分塊傳輸(8192 bytes/chunk)
- 輸入驗證系統:正則表達式驗證 IPv4 位址、端口範圍檢查(1024-49151)、端口佔用偵測
- 錯誤處理與日誌:使用 Python logging 模組記錄連接狀態、ACK 遺失、解碼錯誤等異常
測試與除錯
- 解決 Socket 連接穩定性問題(進行中)
- 測試 LAN 內不同網段的連接可靠性
- 優化視訊品質與傳輸延遲
核心功能
1. Agent(被監控端)
- 視訊擷取:透過 OpenCV VideoCapture 存取本地攝影機
- 數據編碼:JPEG 壓縮影像幀,降低網路頻寬需求
- Socket 伺服器:監聽指定端口,接受 Monitor 連接請求
- ACK 機制:等待接收端確認封包,確保數據完整性
- 序列號管理:16-bit 序列號循環(0-65535),追蹤封包順序
2. Monitor(監控端)
- Socket 客戶端:連接至指定 IP 與端口的 Agent
- 數據接收:解析 9 位元組標頭,重組分塊數據
- 影像解碼:將 JPEG 字節流解碼為 NumPy 陣列
- 即時顯示:使用 OpenCV imshow 顯示影像流(計畫中)
3. 輸入驗證與錯誤處理
- IPv4 正則驗證:
^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}...$ - 端口範圍檢查:限制 1024-49151(已註冊端口範圍)
- 端口佔用偵測:嘗試綁定 localhost 檢查端口是否被佔用
- 異常處理:ValueError(無效輸入)、OSError(端口佔用)、ConnectionError(連接中斷)
4. 封包格式設計
[2 bytes] 序列號 (Sequence Number) [5 bytes] 資料類型 (Data Type: 'VIDEO', 'AUDIO', etc.) [2 bytes] 數據長度 (Payload Length) [N bytes] 數據載荷 (Payload Data)
使用技術
核心函式庫
- OpenCV (4.9.0.80):視訊擷取與影像編解碼
- NumPy (1.21.4):陣列操作與數值計算
- PyAudio (0.2.14):音訊擷取(整合中)
- Socket (標準庫):TCP/IP 網路通訊
系統架構
- Python 3.x:核心開發語言
- Client-Server 模式:雙向通訊架構
- 多執行緒設計:視訊/音訊擷取與網路傳輸分離(計畫中)
開發工具
- Visual Studio:專案管理(.pyproj, .sln)
- logging:除錯日誌記錄(agent.log, monitor.log)
- Git:版本控制
專案狀態
當前版本:開發中(pipeline 分支)
- 核心功能狀態:視訊擷取與 Socket 傳輸已實作
- 已知問題:Socket 連接穩定性需修復、視訊品質待優化
功能完成度
- ✅ 已完成:
- Agent/Monitor 角色分離架構
- Socket TCP 通訊協議
- OpenCV 視訊擷取
- 自定義封包格式與 ACK 機制
- 輸入驗證系統
- 🔄 進行中:
- 音訊擷取整合(PyAudio)
- Socket 連接穩定性修復
- 視訊品質優化
- 📋 計畫中:
- 從終端升級至圖形介面(GUI)
- 更多自動化功能
- 連接請求批准機制
開發挑戰與收穫
1. Socket 通訊協議設計
挑戰:如何確保 LAN 內影像數據的可靠傳輸?
解決方案:
- 設計自定義封包格式(標頭 + 載荷)
- 實作 ACK 確認機制,封包遺失時自動重傳
- 使用序列號追蹤封包順序,避免亂序問題
收穫:
- 深入理解 TCP/IP 協議原理
- 學習封包設計的權衡(標頭大小 vs. 可擴展性)
- 掌握多執行緒同步與異常處理
2. OpenCV 影像編碼優化
挑戰:原始影像幀過大(640x480 RGB 約 900KB),造成網路延遲。
解決方案:
- 使用 JPEG 壓縮(cv2.imencode)將單幀降至 20-50KB
- 調整幀率(0.1 秒間隔)平衡流暢度與頻寬
待優化:
- 動態調整 JPEG 品質參數
- 實作 H.264 硬體編碼支援
收穫:
- 理解影像壓縮演算法的權衡
- 學習網路頻寬管理技巧
3. 端口與 IP 驗證系統
挑戰:使用者可能輸入無效 IP 或已佔用的端口,導致連接失敗。
解決方案:
- 正則表達式嚴格驗證 IPv4 格式
- 嘗試綁定 localhost 檢查端口可用性
- 循環提示直到輸入有效
收穫:
- 掌握正則表達式複雜模式
- 理解 Socket 綁定與端口衝突機制
- 提升使用者體驗設計意識
4. ACK 機制實作
挑戰:如何確保接收端正確收到每個封包?
解決方案:
- 發送端等待 2 位元組 ACK(包含序列號)
- 若 ACK 不匹配或超時,重新發送封包
- 最多重試 3 次,避免無限等待
收穫:
- 理解可靠傳輸協議設計(類似 TCP 的 ACK)
- 學習超時處理與重試策略
未來規劃
短期目標
- 修復 Socket 連接穩定性問題
- 整合 PyAudio 音訊擷取功能
- 優化視訊品質(動態 JPEG 參數)
中期目標
- 開發圖形使用者介面(可能使用 Tkinter 或 PyQt)
- 實作連接請求批准機制(安全性)
- 支援多 Monitor 同時連接單一 Agent
長期目標
- 加入運動偵測自動錄影
- 支援雲端儲存整合(如 Google Drive)
- 行動裝置 App 開發(跨平台監控)
專案亮點
技術創新
- ✅ 自定義封包格式與 ACK 機制,確保數據可靠性
- ✅ Agent/Monitor 角色分離,易於擴展與維護
- ✅ 輕量化設計,僅依賴少量成熟函式庫
實用價值
- ✅ 解決宿舍/家庭遠端監控需求
- ✅ 完全基於 LAN,無需雲端服務,保護隱私
- ✅ 低成本實作(純軟體方案,無需硬體投資)
學習成果
- ✅ 深入實作網路程式設計(Socket, TCP/IP)
- ✅ 掌握影像處理與編碼技術(OpenCV, JPEG)
- ✅ 理解分散式系統設計(Client-Server 架構)
程式語言:Python 3.x
程式碼規模:約 300-400 行(不含註解)
主要模組:Roles/Agent.py (103 行), Roles/Monitor.py, End_to_end_LAN_Monitor_Application.py (78 行)
開發狀態:進行中(pipeline 分支)