網路攝影機整合筆記 1 - RTSP 與 ONVIF
| | | 1 | |
最近在研究居家監控用網路攝影機的整合應用,一腳踏進陌生新領域,加減記錄研究心得。
這篇說的網路攝影機俗稱 IPcam 或 Webcam,大家應該都有看過,幾百塊錢就有,插電連無線網路或直接拉有線網路走乙太網路供電(Power over Ethernet,簡稱PoE),大部分還有記憶卡錄影功能。

這類產品,查看畫面及回放錄影需使用廠商的專屬 App,有些還能遠端遙控旋轉、廣播,但前述操作仰賴廠商的伺服器與 App,若我們想將影像導入其他系統或自己寫程式整合,就必須認識 RTSP 通訊協定與 ONVIF 標準。
RTSP (Real-Time Streaming Protocol) 是一種應用層的網路控制協定,主要用於客戶端與伺服器之間建立、控制和管理多媒體串流會話(音訊、視訊直播或點播),RTSP 本身不負責傳輸實際媒體資料而是扮演遙控器的角色,告訴伺服器要「播放」「暫停」「快轉」或「結束」串流,真正的媒體資料則由 RTP (Real-time Transport Protocol) 或 SRTP 協定負責傳送。若網路攝影機支援 RTSP,我們便可透過 rtsp://<ip-addr>:554/steam-name 這種格式的 URI 連上攝影機,播放即時影像。而測試 RTSP 最好的工具,非萬能開源媒體播放器 - VLC Media Player 莫屬。點選選單「媒體 / 開啟網路串流」,輸入 rtsp://... URI,即可收看串流影像:


要測試 RTSP,還有兩個不可或缺的小伙伴 - MediaMTX 伺服器 以及地表最強影像轉檔工具 ffmpeg。
MediaMTX 是一個開箱即用且零依賴的即時媒體伺服器和媒體代理,可讀取、發布、代理、記錄和播放視訊和音訊串流,支援 SRT、WebRTC、RTSP、RTMP、HLS、MPEG-TS、RTP 等多種協定,可以把它想成一個「媒體路由器」,負責將媒體串流從一端路由到另一端。而 ffmpeg 可以將影片、USB 攝影機影像轉成 RTSP 送上 MediaMTX,再用 VLC 播放器開啟 RTSP 路徑接收。
以下是用 Docker 容器執行 MediaMTX 及 ffmpeg 工具,將 MP4 影片轉成 RTSP 的 docker-compose.yml 範例:
services:
rtsp-server:
image: bluenviron/mediamtx
ports:
- "554:8554" # RTSP
ffmpeg-push:
image: jrottenberg/ffmpeg
depends_on:
- rtsp-server
volumes:
- ./videos:/videos
command: >
-re -stream_loop -1
-i /videos/FullMoon.mp4
-c copy
-f rtsp
-rtsp_transport tcp
rtsp://rtsp-server:8554/mystream

另外,若要將 USB 攝影機影像轉成 RTSP,可先用 ffmpeg -list_devices true -f dshow -i dummy 列舉電腦上的可用視訊來源,再使用 ffmpeg -f dshow -rtbufsize 128M -i video="Logic Capture" -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://debian13:554/webcam 將指定訊息送上 MediaMTX 伺服器。
以上兩種做法可在沒有網路攝影機時,用影片或一般 USB 攝影機或筆電內建攝影機模擬 RTSP 來源進行測試。
ONVIF (Open Network Video Interface Forum,開放網路視訊介面論壇) 是 Axis Communications、Bosch Security Systems 及 Sony 等三家公司在 2008 年合作建立的全球開放性論壇,目標在於整合不同品牌之間的監控相關設備之間的可互通性,制定統一的國際標準使監控系統更容易整合。ONVIF 協議提供了一套共通且定義完整的 Web Service 介面,方便使用者整合不同品牌設備建置監控網絡系統,其功能包含網路配置、尋找設備、設備管理、PTZ控制,和影像分析... 等。ONVIF 包含多個不同的配置文件 (Profiles),例如:Profile A 適用於電子門禁系統、Profile C 適用站資訊、門禁控制以及事件和警報管理... 而與網路攝影機較相關的 Profile S 則規範基本的視訊串流和配置,主要支援 H.264 編碼,設備 PTZ 控制、音訊輸入等,而所謂 PTZ 是指 Pan 平移 / Tilt 傾斜 / Zoom 縮放,這意味著若設備支援 ONVIF,我們也可以直接控制網路攝影機旋轉、縮放。(參考:想自己打造監控系統? 先來認識ONVIF是什麼 by Kim.H)
要測試 ONVIF,開源軟體 iSpy (新版已改名 Agent DVR,個人使用免費)是不錯的選擇。

想用 C# / .NET 整合 RTSP、ONVIF,使用 .NET Framework 4.X 開發的 iSpy 開源專案雖已停止維護,但其功能應有盡有,是很好的參考範例。

Comments
# by James Tsai
等待複核中,留言將在稍後顯示 / The comment is awaiting review.