前言:
IPCAMM NVR寫了好久,我要設定一個里程碑,釋出第一個Alpha版本0.9.0.0。
釋出後,後續NVR的更新重心會放在測試、除錯上,新功能還會有一些,但基本上會收斂整個Scope。
同時,我會準備開始第二階段Dashboard的開發。
IPCAMM NVR可看成是我對於產品開發的全部Know-How,它基本上就是一整套軟體產品的全部內容,因為是Alpha版本還有很多bug,但這整個就是我對產品的完整認知,當然,未來我如果有其他產品開發,也會依循相同模式和設計進行,而這當然也包括第二階段Dashboard。
程式碼:
說明:
IPCAMM NVR包括的範圍很大。它的後端由多個Service專案組成,各個Service專案之間共用參照Shared.ooo專案。
它的前端由一個大專案NvrApplication包裹,但內部一樣是多個專案,每個專案都是單獨的前端元件或前端UI元件。
目前版本為 0.9.0.0 Alpha版本,這個版本不能用於正式環境,連測試環境都不能用,原因是它還有大量已知bug和未測試範圍,這個版本要嘗鮮試用,程式碼參考都沒問題。
IPCAMM NVR目前各個專案的README.md都不長,描述也不仔細,因為這整個專案範圍很大,因此我規劃另外建立一個 gitlab page 專門分類描述各個Service和元件的設計、資料結構,便於串接、開源新增功能。
IPCAMM NVR原則上是雙授權,AGPL-3.0 和 商業授權,但商業授權目前我還沒有管道與銷售模式,因此現階段以AGPL-3.0為主,不過,IPCAMM NVR我實做並開源了完整的授權啟用、檢查機制,License Server我還在想要如何開源。
授權檢查使用的 主機碼(Machine-ID) 產生機制、授權檔案的設計與加密簽章機制我也都開源了,只有加密的密鑰和簽章的公私鑰我自己保留了一組用於商業授權時使用,演算法和開源的密鑰、公私鑰都放上去了,可根據需要修改調整。
當然,因為是非強制性的,後端Streammer的appsettings.json有開關能啟用/禁用授權檢查,非常人性化,前端會根據不同設置和授權狀態顯示。
授權檢查使用的 主機碼(Machine-ID) 產生機制、授權檔案的設計與加密簽章機制我也都開源了,只有加密的密鑰和簽章的公私鑰我自己保留了一組用於商業授權時使用,演算法和開源的密鑰、公私鑰都放上去了,可根據需要修改調整。
當然,因為是非強制性的,後端Streammer的appsettings.json有開關能啟用/禁用授權檢查,非常人性化,前端會根據不同設置和授權狀態顯示。
商業授權設計有2種,綁定主機的授權檔案以及綁定USB的USB授權金鑰。
意思是,這版本我實做了USB授權的設計,可以做到插著USB有授權可以使用程式這件事情。
USB金鑰我用樹莓派Pico 1和Pico 2,兩者都能使用,Pico1和Pico2差異只有在SHA256使用軟體還是硬體,其他包括簽章運算都是軟體實做,沒區別。
USB金鑰在Pico很好做,按著BOOTSEL進入燒錄模式,就可以把韌體寫入,接著透過maker工具程式就能把授權上傳上去,就完成了。
當然,這裡要搭配License Server,我整理之後放個Simple版本,把核心API放上去。
這版本在看和使用時會有疑問,FileSubscriber和透過StreamBus的Recorder都能寫錄影檔案,差別在哪? 作用差異是什麼?
FileSubscriber 是用於行車記錄器這樣的使用場景,環境只要單一Streammer即可運作,不用UI。
Recorder 則是正統的 NVR 使用場景,因此主要以服務角度和跨服務使用場景,為典型的微服務架構。
已知Bug:
這版本目前有大量bug,
- 已知同時開啟RTSP與Onvif Event,Onvif Event斷線會影像到RTSP串流,錄影的瞬斷(小於40ms)會判斷為連續錄影,畫面表現會是灰畫面。
- EventBus沒測過外部MQTT Server,僅用Streammer內部MQTT Server模式測試。
- Go2RtcSubscriber還未測試。
- StreamBus的UDP功能移除,但程式碼保留,測試發現UDP有很多問題,甚至影響到設計(Packet傳輸方式),這個更動影響比較大,而且既有功能已經有NamePipe和TCP,因此UDP功能廢棄(程式碼留著)。
- AI操作目前Playback還沒測過,預期應該會有bug。
- WASM版本的影片播放,也就是瀏覽器的影片播放功能目前失能狀態,WebCodecs 在Linux上非常難測試,其他方式牽涉到轉碼(WebRTC / fMP4 <video> tag),還在初期功能測試階段,其他非播放功能的一般UI類,大多能正常使用。
- Playback和LiveView在一些Camera上面會有灰畫面或者嚴重瞬斷問題。
- AV1僅簡易測試,尤其未測試AV1硬體解碼與編碼(我手邊電腦不支援AV1硬解/編碼更不用看了)
- H264/H265未測試轉碼
- Microsoft SQL Server未測試,僅測試SQLite與PostgreSQL這兩種資料庫
- 後端Service未測試MacOS和Windows平台
下一步實做:
目前進入Debug階段,僅會進行幾樣開發,其他會轉做Dashboard和測試除錯。
- Installer安裝包
- Local Linux V4L2支援
- Recorder與Gateway支援多Streammer串接
NVR我預計要能支援3種場景:
- 傳統NVR場景
- 行車紀錄器 與 無人機場景
- 雲端場景
行車記錄器和無人機的目標,預計是支援 CSI 和 USB 界面的 Camera模塊,在Linux上也就是 V4L2,另一方面,我目前參考 Kite Ground Control ,它是串 FFMpeg 和 go2rtc,因此我這邊目標是透過介接 V4L2 ,讓像是 Kite Ground Control 這樣的地面站接我,我在轉到 go2rtc ,實現無縫串接進入 Kite Ground Control 工作流。
同時間,我正在survey無人機場景的界面樣式,考慮Dashboard是針對無人機設計,還是針對地圖設計。
雲端場景,我的目標是,把Recorder的RAID (Erasure Coding,簡稱 EC) 實做上去,加上多 Streammer 支援(含轉碼),那應該能做到橫向擴展 Streammer 和 Recorder 的能力,一旦 Streammer 與 Recorder 解耦具備橫向擴充能力之後,基本上應用在雲端和大規模可擴充場景
就沒問題了。
沒有留言:
張貼留言