开源倾情奉献:基于.NET打造IP智能网络视频监控系统(四)服务端介绍

摘要:
DVCDPSMPSServiceDiscoveryServiceSVD服务实现WCFDiscovery,在服务联机时接收注册,并提供通过服务接口检索指定类型服务的功能。1[ServiceContract]2[ManagedServiceContract]3公共接口IServiceDiscoveryService4{5[Fault Contract]6[OperationContract]7GetServicesResponseGetServices;8}DeviceConnectorServiceDVC服务负责提供接口创建、连接和保持摄像机设备的活动。使用Gimela.Data.MagpieDatabase文档数据库访问本地数据。使用Gimela.Media.Video创建媒体流数据。

本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载。

开源倾情奉献系列链接

服务端介绍

目前在服务端实现了 4 个 WCF 服务:

  • ServiceDiscovery(简称 SVD)
  • DeviceConnector(简称 DVC)
  • DeviceProfile(简称 DPS)
  • MediaPublisher(简称 MPS)

服务建议启动顺序

  1. SVD - 服务发现目前有时后启动不太稳定,暂时没有调试这个问题。
  2. DVC
  3. DPS
  4. 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 服务负责提供接口创建、连接、保活摄像机设备。

  1. 使用 Gimela.Data.MagpieDatabase 文档数据库进行本地数据存取。
  2. 使用 Gimela.Media.Video 进行媒体流数据的建立。
  3. 使用 Gimela.Net.Rtp 进行媒体流的封装。
  4. 使用 Gimela.Net.Sockets 进行媒体流的传输。
开源倾情奉献:基于.NET打造IP智能网络视频监控系统(四)服务端介绍第1张开源倾情奉献:基于.NET打造IP智能网络视频监控系统(四)服务端介绍第2张
  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   }
View Code

Device Profile Service

DPS 服务暴露简洁的接口,对外提供摄像机的基本信息,主要用以屏蔽或代理 DVC 服务。

开源倾情奉献:基于.NET打造IP智能网络视频监控系统(四)服务端介绍第1张开源倾情奉献:基于.NET打造IP智能网络视频监控系统(四)服务端介绍第4张
 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   }
View Code

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智能网络视频监控系统(四)服务端介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux线程属性总结24、Windows派遣函数(2)Windows驱动开发详解笔记,直接读写方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Layui 之自定义验证

一、验证radio、checkbox form.verify({ mustradio: function (value, item) { //单选按钮必选 var val = $(item).parent().find("input[name='answer']:checked").val();...

C#(4):XML序列化

一、使用 System.Xml.Serialization类 1、定义元数据 引入System.Xml.Serialization命名空间。 XML序列化常用属性: XmlRoot XmlType XmlText XmlEnum [Serializable] [XmlRoot] public class Product { public int...

vue-scroller的使用 &amp;amp;&amp;amp; 开发自己的 scroll 插件

vue-scroller的使用    在spa开发过程中,难免会遇到使用scroll的情况,比如下面的:         即,当用户选择好商品之后,点击购物车,就会有一个购物车弹窗,如果选择的商品小于三个,刚好合适,如果多余三个,我们就需要使其滚动了。       而 vue-scroller  就可以很好的实现滚动上面的问题。   这个文件可以很容易进行...

初学 Java Script (数据类型)

简介:JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。Javascript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。 数据类型: JavaScript(以下简称JS)数据类型有简单数据类型和复杂数据类型,这里我只介绍...

C#枚举(一)使用总结以及扩展类分享

0.介绍 枚举是一组命名常量,其基础类型为任意整型。 如果没有显式声明基础类型, 则为Int32 在实际开发过程中,枚举的使用可以让代码更加清晰且优雅。 最近在对枚举的使用进行了一些总结与整理,也发现了一些很有意思的知识盲区。 接下来先简单为大家介绍枚举在开发过程中的常用内容以及扩展类的分享。如果喜欢直接看代码的可以查看最后的样例源码。 1. 参考资料 官...

C# 枚举、字符串、值的相互转换

using  System;class  Program{    public   enum  Color   {      Red  =   0xff0000 ,      Orange  =   0xFFA500 ,      Yellow  =   0xFFFF00 ,      Lime  =   0x00FF00 ,      Cyan  =  ...