基於.NET打造IP智能網絡視頻監控系統
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
OptimalVision網絡視頻監控系統
OptimalVision(OV)網絡視頻監控系統(Video Surveillance System),是一套基於.NET、C#、WCF、WPF等技術構建的IP網絡視頻監控系統。設計與實現該系統的初衷是希望在家用電腦中部署該系統,連接本地或局域網設備,通過瀏覽器或手機客戶端瀏覽寶寶實時視頻,也就是俗稱的“寶寶在線”或“家庭看護”。
但由於業余時間總是有限,完成系統中的服務、配置、采集、傳輸和桌面GUI部分后,繼續完成后續移動客戶端的動力與興趣明顯減弱,尤其是寶寶出生后的很長一段時間內基本沒有進展,逐漸地演變為演練和測試所關注技術和模式的實驗性項目。
開源傾情奉獻系列鏈接
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(一)開放源代碼
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(二)基礎類庫介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(三)命令行工具集
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(四)服務端介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(五)客戶端介紹
目錄
OV系統的設計要求
- 系統平台要求部署在Windows操作系統,適宜家庭用戶安裝使用。
- 系統服務需要支持自啟動、自發現、自組網功能,方便用戶使用。
- 系統桌面客戶端需簡單易用,配置與瀏覽多路視頻方便。
- 系統支持連接USB攝像頭、WebCam、JPEG攝像機、MJPEG攝像機等。
- 攝像機可部署和接入在不同的主機電腦上,由桌面客戶端進行配置管理。
- 系統提供基於HTTP發布的視頻和圖片,支持瀏覽器、移動客戶端訪問。
OV系統的技術選擇
- 系統平台基於.NET/C#構建
- 系統服務間采用WCF技術通信
- 系統桌面客戶端采用WPF技術構建
- 系統直接采用裸圖對幀率要求極低
- 系統采用RTP封裝視頻數據包UDP傳輸
- 系統提供HTTP REST API服務
- 系統采用文件數據庫存儲數據
- 系統支持瀏覽器和移動客戶端訪問
OV系統架構設計
OV系統已實現的服務
OV系統主要業務流程
OV桌面客戶端架構
OV桌面客戶端截圖
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
================================================================================================
開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(一)開放源代碼
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
開源傾情奉獻系列鏈接
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(一)開放源代碼
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(二)基礎類庫介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(三)命令行工具集
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(四)服務端介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(五)客戶端介紹
這是什么系統?
OptimalVision(OV)網絡視頻監控系統(Video Surveillance System),是一套基於.NET、C#、WCF、WPF等技術構建的IP網絡視頻監控系統。設計與實現該系統的初衷是希望在家用電腦中部署該系統,連接本地或局域網設備,通過瀏覽器或手機客戶端瀏覽寶寶實時視頻,也就是俗稱的“寶寶在線”或“家庭看護”。
詳情參考博文《基於.NET打造IP智能網絡視頻監控系統》。
更多系統截圖請參考博文《基於.NET打造IP智能網絡視頻監控系統》。
為什么開源?
由於業余時間總是有限,完成系統中的服務、配置、采集、傳輸和桌面GUI部分后,繼續完成后續移動客戶端的動力與興趣明顯減弱,尤其是寶寶出生后的很長一段時間內基本沒有進展,逐漸地演變為演練和測試所關注技術和模式的實驗性項目。
總結了幾點開放源代碼的原因:
- 社區分享。獨樂樂不如眾樂樂,孤獨腐朽的代碼沒有意義,與社區分享和探討也是一種樂趣。
- 精力有限。利用業余時間構建,擠占的是陪家人和孩子的時間,要不也不會積累了三年。
- 知識積累。據說自己查看六個月前寫的代碼,如果感覺需要改進,則就成長了。
- 拓展視野。個人的視角總是短視,接受更多人的批評與指正,可以促進學習和拓展視野。
代碼在哪里?
代碼托管在 GitHub 網站,所有代碼基於 Microsoft .NET Framework 4.0 編譯。
代碼目錄結構
下面是源代碼目錄結構:
- assets - 系統使用到的資源,例如圖片等
- bin - 系統編譯輸出目錄
- Debug - Debug模式輸出目錄
- build - 編譯系統腳本
- docs - 系統設計和文檔
- lib - 系統引用的類庫
- src - 系統代碼
- Crust - MVVM模式框架(改編自 MVVM Light Toolkit)
- Foundation - 系統基礎類庫(參考《開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(二)基礎類庫介紹》)
- Knifer - 命令行工具集(參考《開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(三)命令行工具集》)
- Rukbat - 視頻監控系統代碼
- Common - 前端和后端通用代碼
- Service - WCF服務代碼(參考《開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(四)服務端介紹》)
- GUI - WPF客戶端代碼(參考《開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(五)客戶端介紹》)
- tests- 各種測試
- tools - 各種工具,例如清理編譯目錄腳本等
參考了哪些類庫?
下面羅列了系統所學習、引用、參考、改編、摘抄的開源類庫的不完全列表。
- AForge.NET
- Accord.NET
- NAudio
- nVLC
- Speex
- C# WebServer
- FFmpeg
- FFmpeg.NET
- Flowplayer
- iSpy
- ZoneMinder
- ONVIF Device Manager
- Google GData
- GMap.NET
- Json.NET
- Dynamic Json
- Hammock
- AutoMapper
- SocialKit / LightRest
- Microsoft Enterprise Library
- Microsoft Unity
- System.Data.SQLite
- RavenDB
- RaptorDB
- MongoDB
- MongoDB C# Driver
- Windows Presentation Foundation (WPF)
- MVVM Light Toolkit
- Caliburn.Micro
- MEFedMVVM
- MVVM Foundation
- Phoenix MVVM
- WPF MediaKit
- WPF Multiple Document Interface (MDI)
- MDI Container for WPF
- AvalonDock
- WPF Google Map Control
- WPFSpark
- WPF 3DTools
- Odyssey WPF Controls
- Extended WPF Toolkit™ Community Edition
- Calendar Control in WPF
- patterns & practices: Prism
- Facebook Developer Toolkit
- Microsoft Health Common User Interface (CUI)
- Mahapps.Metroa UI Toolkit for WPF
- Spark View Engine
- ReactiveUI
- CommonServiceLocator
- Ninject
- StructureMap
- NetMQ
- FunnelWeb
- Quartz.NET
- Task Scheduler Engine
- SuperSocket
- CommonLibrary.NET
- NSubstitute
GitHub 本周上榜,感謝各位朋友的支持。
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
=========================================================================================================
開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(二)基礎類庫介紹
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
開源傾情奉獻系列鏈接
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(一)開放源代碼
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(二)基礎類庫介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(三)命令行工具集
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(四)服務端介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(五)客戶端介紹
基礎類庫介紹
基礎類庫目錄結構及名空間內容描述
- Foundation
- Common
- Gimela.Common.Configuration - 配置文件處理
- Gimela.Common.Consts - 系統常用恆量
- Gimela.Common.Cultures - 系統 Culture 封裝
- Gimela.Common.ExceptionHandling - 通用 Excepton 處理封裝
- Gimela.Common.Logging - 通用 Logging 封裝
- Data
- Gimela.Data.DataStructures - 二叉樹,B+數實現,參考《你曾實現過二叉樹嗎》,參考 RaptorDB
- Gimela.Data.Json - Json 序列化實現,參考 RaptorDB
- Gimela.Data.JsonExtension - Dynamic Json 移植
- Gimela.Data.MagpieDatabase - NoSQL 文檔數據庫,參考 RaptorDB
- Gimela.Data.Mapping - AutoMapper 移植
- Gimela.Data.Repository - Repository 模式,參考《EntityFramework用法探索(四)Repository和UnitOfWork》
- Gimela.Data.SparrowDatabase - 文件數據庫,參考《C#實現文件數據庫》
- Infrastructure
- Gimela.Infrastructure.AsyncModel - 異步模型實現
- Gimela.Infrastructure.Messaging - MVVM 消息通信機制
- Gimela.Infrastructure.Patterns - 模式實現,包括 Flyweight,SmartQueue,WeakAction, Singleton 等
- Gimela.Infrastructure.ResourceLocation - Service Locator 模式實現,參考《Service Locator 模式》
- Gimela.Infrastructure.Serialization - 常用序列化實現
- Management
- Gimela.Management - WMI 實現
- Media
- Gimela.Media.Imaging - AForge.NET 移植
- Gimela.Media.Utilities - AForge.NET 移植
- Gimela.Media.Video - AForge.NET 移植
- Gimela.Media.Video.DirectShow - AForge.NET 移植
- Gimela.Media.Video.VFW - AForge.NET 移植
- Gimela.Media.Vision.Motion - AForge.NET 移植
- Net
- Gimela.Net.Http - Http Server 實現,C# WebServer 移植
- Gimela.Net.Rtp - RTP(RFC3550)實現
- Gimela.Net.Sockets - TCP/UDP 通信實現
- Presentation
- Gimela.Presentation.Controls - WPF 通用控件實現
- Gimela.Presentation.Shapes - 常用 WPF XMAL 形狀
- Gimela.Presentation.Skins - WPF 皮膚實現
- Gimela.Presentation.Transitions - WPF View 轉換實現
- Gimela.Presentation.Windows - WPF Window 窗體的實現
- Security
- Gimela.Security - 加密及隨機數
- ServiceModel
- Gimela.ServiceModel.ChannelManagement - WCF 通道管理
- Gimela.ServiceModel.ManagedDiscovery - WCF 服務自發現(WCF Discovery)
- Gimela.ServiceModel.ManagedHosting - WCF 服務宿主
- Gimela.ServiceModel.ManagedService - WCF 托管服務
- Streaming
- Gimela.Streaming.MJpegStreamingServer - MJPEG流化處理,參考《C#開源實現MJPEG流傳輸》
- Tasks
- Gimela.Tasks - 任務調度,包括基於 Linux CronTab 模式的實現,參考 Quartz.NET
- Text
- Gimela.Text - 基於文本的處理
- Gimela.Text.Validation - 文本驗證規則
- Common
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
=========================================================================================================
開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(三)命令行工具集
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
開源傾情奉獻系列鏈接
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(一)開放源代碼
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(二)基礎類庫介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(三)命令行工具集
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(四)服務端介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(五)客戶端介紹
命令行工具
為便於平時代碼管理和一些特殊需求,伴隨系統開發了一系列命令行工具,主要參考 Linux 系統 shell 命令實現。
- addtext - 在文件的初始位置添加文本
- base64 - 將字符串轉換為 Base64 編碼
- cat - 顯示文件內容
- checksum - 檢查文本或文件的校驗和
- count - 檢索目錄中指定類型文件的數量
- encode - 將文件編碼或更改編碼
- env - 顯示系統環境變量信息
- extract - 在所有文件中抽取符合模式匹配規則的文本
- find - 在目錄中查找文件
- grep - 在文件中查找符合模式匹配規則的行
- head - 顯示文件內容的前幾行
- join - 將多個文件合並成一個文件
- kill - 殺掉進程
- ls - 顯示目錄中的內容
- ps - 顯示進程狀態
- rm - 刪除文件
- rmdir - 刪除目錄
- rename - 重命名指定文件
- replace - 在文件中替換文本
- select - 在目錄中查找指定類型的文件
- sort - 將文件中的文本排序
- split - 將一個文件分割成多個文件
- tail - 顯示文件的尾部內容
- uniq - 移除文件中的重復行
擴展參考《C#開源文件實時監控工具Tail&TailUI》
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
=====================================================================================================
開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(四)服務端介紹
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
開源傾情奉獻系列鏈接
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(一)開放源代碼
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(二)基礎類庫介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(三)命令行工具集
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(四)服務端介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(五)客戶端介紹
服務端介紹
目前在服務端實現了 4 個 WCF 服務:
- ServiceDiscovery(簡稱 SVD)
- DeviceConnector(簡稱 DVC)
- DeviceProfile(簡稱 DPS)
- MediaPublisher(簡稱 MPS)
服務建議啟動順序
- SVD - 服務發現目前有時后啟動不太穩定,暫時沒有調試這個問題。
- DVC
- DPS
- MPS
Service Discovery Service
SVD 服務實現 WCF Discovery ,當有服務上線時接收注冊,並通過服務接口實現向外提供檢索指定類型服務的功能。
1 [ServiceContract(SessionMode = SessionMode.Allowed)] 2 [ManagedServiceContract] 3 public interface IServiceDiscoveryService 4 { 5 [FaultContract(typeof(ServiceDiscoveryServiceFault))] 6 [OperationContract] 7 GetServicesResponse GetServices(GetServicesRequest request); 8 }
Device Connector Service
DVC 服務負責提供接口創建、連接、保活攝像機設備。
- 使用 Gimela.Data.MagpieDatabase 文檔數據庫進行本地數據存取。
- 使用 Gimela.Media.Video 進行媒體流數據的建立。
- 使用 Gimela.Net.Rtp 進行媒體流的封裝。
- 使用 Gimela.Net.Sockets 進行媒體流的傳輸。

1 [ManagedServiceContractAttribute] 2 [ServiceContract(SessionMode = SessionMode.Allowed, CallbackContract = typeof(IDeviceConnectorCallbackService))] 3 public interface IDeviceConnectorService 4 { 5 /// <summary> 6 /// 獲取攝像機源列表 7 /// </summary> 8 /// <param name="request"></param> 9 /// <returns></returns> 10 [OperationContract] 11 [FaultContract(typeof(DeviceConnectorServiceFault))] 12 GetCameraFiltersResponse GetCameraFilters(GetCameraFiltersRequest request); 13 14 /// <summary> 15 /// 獲取桌面源列表 16 /// </summary> 17 /// <param name="request"></param> 18 /// <returns></returns> 19 [OperationContract] 20 [FaultContract(typeof(DeviceConnectorServiceFault))] 21 GetDesktopFiltersResponse GetDesktopFilters(GetDesktopFiltersRequest request); 22 23 /// <summary> 24 /// 獲取指定的攝像機 25 /// </summary> 26 /// <param name="request"></param> 27 /// <returns></returns> 28 [OperationContract] 29 [FaultContract(typeof(DeviceConnectorServiceFault))] 30 GetCameraResponse GetCamera(GetCameraRequest request); 31 32 /// <summary> 33 /// 獲取全部的攝像機 34 /// </summary> 35 /// <param name="request"></param> 36 /// <returns></returns> 37 [OperationContract] 38 [FaultContract(typeof(DeviceConnectorServiceFault))] 39 GetCamerasResponse GetCameras(GetCamerasRequest request); 40 41 /// <summary> 42 /// 創建攝像機 43 /// </summary> 44 /// <param name="request"></param> 45 /// <returns></returns> 46 [OperationContract] 47 [FaultContract(typeof(DeviceConnectorServiceFault))] 48 CreateCameraResponse CreateCamera(CreateCameraRequest request); 49 50 /// <summary> 51 /// 修改攝像機 52 /// </summary> 53 /// <param name="request"></param> 54 /// <returns></returns> 55 [OperationContract] 56 [FaultContract(typeof(DeviceConnectorServiceFault))] 57 UpdateCameraResponse UpdateCamera(UpdateCameraRequest request); 58 59 /// <summary> 60 /// 刪除攝像機 61 /// </summary> 62 /// <param name="request"></param> 63 /// <returns></returns> 64 [OperationContract] 65 [FaultContract(typeof(DeviceConnectorServiceFault))] 66 DeleteCameraResponse DeleteCamera(DeleteCameraRequest request); 67 68 /// <summary> 69 /// 檢測攝像機 70 /// </summary> 71 /// <param name="request"></param> 72 /// <returns></returns> 73 [OperationContract] 74 [FaultContract(typeof(DeviceConnectorServiceFault))] 75 PingCameraResponse PingCamera(PingCameraRequest request); 76 77 /// <summary> 78 /// 獲取攝像機最新的快照圖像 79 /// </summary> 80 /// <param name="request"></param> 81 /// <returns></returns> 82 [OperationContract] 83 [FaultContract(typeof(DeviceConnectorServiceFault))] 84 GetCameraSnapshotResponse GetCameraSnapshot(GetCameraSnapshotRequest request); 85 86 /// <summary> 87 /// 獲取已發布攝像機的信息 88 /// </summary> 89 /// <param name="request"></param> 90 /// <returns></returns> 91 [OperationContract] 92 [FaultContract(typeof(DeviceConnectorServiceFault))] 93 GetPublishedCamerasResponse GetPublishedCameras(GetPublishedCamerasRequest request); 94 95 /// <summary> 96 /// 發布攝像機視頻流至指定接收器 97 /// </summary> 98 /// <param name="request"></param> 99 /// <returns></returns> 100 [OperationContract] 101 [FaultContract(typeof(DeviceConnectorServiceFault))] 102 PublishCameraResponse PublishCamera(PublishCameraRequest request); 103 104 /// <summary> 105 /// 取消發布攝像機視頻流 106 /// </summary> 107 /// <param name="request"></param> 108 /// <returns></returns> 109 [OperationContract] 110 [FaultContract(typeof(DeviceConnectorServiceFault))] 111 UnpublishCameraResponse UnpublishCamera(UnpublishCameraRequest request); 112 113 /// <summary> 114 /// 發布的攝像機保活機制 115 /// </summary> 116 /// <param name="request">攝像機保活機制請求消息</param> 117 /// <returns>攝像機保活機制響應消息</returns> 118 [OperationContract] 119 [FaultContract(typeof(DeviceConnectorServiceFault))] 120 KeepPublishedCameraAliveResponse KeepPublishedCameraAlive(KeepPublishedCameraAliveRequest request); 121 }
Device Profile Service
DPS 服務暴露簡潔的接口,對外提供攝像機的基本信息,主要用以屏蔽或代理 DVC 服務。

1 /// <summary> 2 /// 設備信息服務接口 3 /// </summary> 4 [ManagedServiceContractAttribute] 5 [ServiceContract(SessionMode = SessionMode.Allowed)] 6 public interface IDeviceProfileService 7 { 8 /// <summary> 9 /// 獲取全部攝像機的信息 10 /// </summary> 11 /// <param name="request">獲取全部攝像機的請求信息</param> 12 /// <returns>全部攝像機的響應信息</returns> 13 [OperationContract] 14 [FaultContract(typeof(DeviceProfileServiceFault))] 15 GetCamerasResponse GetCameras(GetCamerasRequest request); 16 17 /// <summary> 18 /// 獲取攝像機的信息 19 /// </summary> 20 /// <param name="request">獲取攝像機的請求信息</param> 21 /// <returns>攝像機的響應信息</returns> 22 [OperationContract] 23 [FaultContract(typeof(DeviceProfileServiceFault))] 24 GetCameraResponse GetCamera(GetCameraRequest request); 25 }
Media Publisher Service
MPS 服務負責配置攝像機的媒體流的發布。
1 [ManagedServiceContractAttribute] 2 [ServiceContract(SessionMode = SessionMode.Allowed)] 3 public interface IMediaPublisherService 4 { 5 /// <summary> 6 /// 獲取已發布攝像機的信息 7 /// </summary> 8 /// <param name="request"></param> 9 /// <returns></returns> 10 [OperationContract] 11 [FaultContract(typeof(MediaPublisherServiceFault))] 12 GetPublishedCamerasResponse GetPublishedCameras(GetPublishedCamerasRequest request); 13 14 /// <summary> 15 /// 發布攝像機視頻流至指定接收器 16 /// </summary> 17 /// <param name="request"></param> 18 /// <returns></returns> 19 [OperationContract] 20 [FaultContract(typeof(MediaPublisherServiceFault))] 21 PublishCameraResponse PublishCamera(PublishCameraRequest request); 22 23 /// <summary> 24 /// 取消發布攝像機視頻流 25 /// </summary> 26 /// <param name="request"></param> 27 /// <returns></returns> 28 [OperationContract] 29 [FaultContract(typeof(MediaPublisherServiceFault))] 30 UnpublishCameraResponse UnpublishCamera(UnpublishCameraRequest request); 31 }
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
=============================================================================================
開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(五)客戶端介紹
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
開源傾情奉獻系列鏈接
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(一)開放源代碼
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(二)基礎類庫介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(三)命令行工具集
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(四)服務端介紹
- 開源傾情奉獻:基於.NET打造IP智能網絡視頻監控系統(五)客戶端介紹
客戶端介紹
系統 C/S 架構客戶端采用 WPF 技術並基於 MVVM 模式實現。
主要分為 3 部分:
- Common - 通用控件、驗證規則等
- Modules - 業務功能模塊
- Applications - 最終呈現應用
業務功能模塊
- UIMessage - MVVM 模式中的消息傳遞
- Navigation - 系統導航菜單
- SkinConfiguration - UI 皮膚設置
- UserManagement - 系統登錄和用戶管理
- DeviceConfiguration - 設備管理
- LiveVideo - 實時視頻
- PublishMedia - 媒體流發布
- Widgets - 小部件,例如 About 頁面
服務連接
GUI 通過調用服務發現接口來獲取需要的服務連接。
1 namespace Gimela.Rukbat.ServiceDiscovery.Contracts.ServiceContracts 2 { 3 [ManagedServiceContractAttribute] 4 [ServiceContract(SessionMode = SessionMode.Allowed)] 5 public interface IServiceDiscoveryService 6 { 7 [OperationContract] 8 [FaultContract(typeof(ServiceDiscoveryServiceFault))] 9 GetServicesResponse GetServices(GetServicesRequest request); 10 } 11 }
例如連接調用 DVC 服務:
1 GetCamerasResponse response = 2 ServiceProvider.GetService<IDeviceConnectorService, IDeviceConnectorCallbackService>( 3 ViewModelLocator.ServiceClient, 4 ViewModelLocator.SelectedService.HostName, 5 ViewModelLocator.SelectedService.Uri.ToString() 6 ).GetCameras(request);
本文為 Dennis Gao 原創技術文章,發表於博客園博客,未經作者本人允許禁止任何形式的轉載。
出處:https://www.cnblogs.com/gaochundong/tag/Video%20Surveillance/