前言:
上一篇提到在開發NVR,到今天2026-06-28,目前推測進度在85%~90%之間,這篇就把目前的開發進展貼出來展示。
近況:
Server端大致上都差不多了,但目前根據前端還會修改。
最近主要在處理Playback和Video Decoder/Rendering的部份,這兩塊比較難處理,Playback部份可能還會改到後端Recorder和Gateway的CMD模式。
目前前端特色是,我實際上實做了Linux/MacOS/Windows的硬體解碼器操作以及各平台的Rendering。
Linux硬體解碼器使用VA-API,Rendering實做3種:
- vasurface: VA-API的Surface直出,從解碼器-螢幕成像直通,CPU和GPU使用率最低,但會有穩定性問題
- glrender: 解碼器用VA-API解碼,顯示的部份使用UNO Platform的OpenGL元件,中間是切開的,會有CPU操作,但解碼和成像都是GPU。處理是直接YUV處理。
skiarender: 解碼器用VA-API解碼,顯示的部份直接是UNO Platform的SkCanvas元件,解碼是GPU,其他都是CPU。處理是RGB(VA-API轉出RGB)。
MacOS硬體解碼器使用Video ToolBox,Rendering實做2種:
- glrender: 解碼器用Video ToolBox,顯示的部份使用UNO Platform的OpenGL元件,同Linux的glrender,不同的是,MacOS的OpenGL使用OpenGL ES 3.0。處理是直接RGB處理。
- nsviewrender: 解碼器用Video ToolBox,顯示的部份使用MacOS的原生NSView,NSView上面疊CGImage顯示。處理是直接RGB處理。
Windows硬體解碼器使用DXVA2(D3D11),Rendering目前實做1種:
- glrender: 解碼器用D3D11,顯示部份使用UNO Platform的OpenGL元件,同Linux的glrender。處理是直接YUV處理。
我手上這台Windows的電腦太舊了,Microsoft Media Foundation(後面簡稱MF)沒有硬體解碼器的驅動程式,只有DXVA2(D3D11)的硬體解碼器驅動程式。Windows的硬體解碼器最新的是MF,前一代是D3D11,D3D11前一代是DXVA2,DVXA2前一代是DXVA。目前DXVA已經廢棄,D3D11一般也會叫做DXVA2或DXVA。目前Windows實做有MF和D3D11版本,但MF無法測試,D3D11版本 + glrender正常顯示。至於像是vasurface或是nsviewrender這樣的直出,目前還沒時間處理。
Browser版本,目前有點難產,Browser的硬體解碼器挑硬體,不一定會有,我手邊的電腦Chrome都無法正常驅動WebCodecs的軟解和硬解。我目前找到H265的軟體解碼器可以解,但要Rendering是另一個麻煩點,因為UNO Platform是單一個WebGL Canvas整塊成像,它有自己實做MediaPlayerElement,但原理是專門針對MediaPlayerElement挖空讓<video>顯示,這部份還在嘗試突破。
AI功能,目前AI功能已經實做了,可以參考主要功能Demo影片,目前實做了一個AI對話框,能夠直接跟AI對話,架構設計上,AI串接在後端LLM Gateway Service,LLM Gateway裡面設定要使用的AI Model和OpenAI EndPoint以及API Key,API Key設定在後端,不用擔心前端偷走。
前端應用程式在程式中定義了能夠使用的function calling,包括2種,一種是把function calling當成system prompt,這種專門適用於Gemma Model,另一種是標準的function calling呼叫。
流程上,前端會發送API把具備的function calling註冊到LLM Gateway,之後在AI對話框對話時,AI就能知道有哪些function calling能夠使用,並能呼叫工具操作。
目前NvrApp(前端)包括Camera的列出、放置到LiveView、最大化、頁籤切換、目前有哪些Event,計畫中但還沒完成的,把Camera放置到Playback、跳到指定日期時間、播放。
其中Event(已經完成)比較特別,AI的Event function calling包括2種,一種是目前NvrApp收到的Event,另一種則是NvrApp透過後端API查詢資料庫中的歷史Event。
API Model主要用智譜的GLM-4.7測試,但它的API主要相容Claude的Anthropic API協定,包括有所謂的深度思考,目前實做和測試都OK。
License的設定頁面目前是假資料,其他都是真實能運作的。
Demo影片:
主要功能Demo(Linux平台應用程式):
Linux各Rendering效能比較:
Browser WASM現況:
沒有留言:
張貼留言