C# 海康DVR-DVS 客户端SDK封装教程

4星 · 超过85%的资源 需积分: 9 25 下载量 95 浏览量 更新于2024-09-21 收藏 36KB TXT 举报
"C# 封装的海康DVR-DVS 客户端SDK 类提供了在C#环境下与海康硬盘录像机交互的能力。由于海康的API函数是用C++编写的,因此不能直接在C#项目中使用。这个SDK封装允许开发者通过C#调用海康设备的相关功能,如视频流处理、音频处理和串口通信等。" 在C#中开发海康DVR-DVS客户端时,主要涉及以下几个关键知识点: 1. **封裝(Encapsulation)**: C#的封裝是面向对象编程的一个核心概念,用于隐藏类的内部实现细节并提供公共接口给外部使用。在这个案例中,C#的类(如`HIK`命名空间中的各种委托和结构体)封装了海康的C++ API,使得C#开发者无需关心底层实现,只需调用封装好的方法即可。 2. **委托(Delegates)**: 委托是C#中的一种类型,它代表一个方法。在SDK中,`fVoiceDataCallBack`、`SerialDataCallBack`、`DrawFun`、`RealDataCallBack`和`PlayDataCallBack`都是委托类型,用于定义回调函数。这些回调函数在特定事件发生时(如接收到语音数据或串行数据)会被调用,提供事件驱动的编程模型。 3. **互操作性(Interop)**: 由于海康的API是用C++编写的,C#需要通过.NET框架的互操作性服务(如`DllImport`特性)来调用这些函数。在示例代码中,`UnmanagedType`和`MarshalAs`属性用于指定如何在C#和C++之间转换数据类型,确保跨语言调用的正确性。 4. **数据结构(Structs)**: `NET_DVR_DEVICEINFO`结构体表示了海康设备的信息,如设备地址和状态。通过`[StructLayout]`和`[FieldOffset]`等特性,可以控制内存布局以匹配C++的结构体。`[MarshalAs(UnmanagedType.ByValArray, SizeConst=...)]`用于数组类型的转换,确保数据大小和顺序的一致。 5. **图形处理(Graphics)**: `DrawFun`委托接收一个`System.Drawing.Graphics`对象,这表明SDK可能支持在C#的图形上下文中绘制实时视频帧,如在窗体或控件上显示视频流。 6. **流处理(Stream Processing)**: `RealDataCallBack`和`PlayDataCallBack`用于处理实时数据流和播放数据流,它们接收缓冲区和数据类型参数,这表明SDK能够处理来自海康设备的视频和音频数据。 7. **用户自定义数据(User Data)**: 在各个回调函数的参数中,`dwUser`通常用于传递用户自定义的数据,这在处理多线程或多个设备连接时非常有用,因为它允许开发者传递额外的信息到回调函数中。 该SDK为C#开发者提供了一个方便的接口,以便在C#环境中与海康的DVR-DVS设备进行通信,包括但不限于视频流的获取、音频处理、串口通信以及自定义事件的处理。通过这些功能,开发者可以构建定制化的监控客户端应用程序。
904 浏览量
#region using System; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Threading; using SocketLibrary; #endregion namespace HkwsSDK { /// /// 在海康威视的SDK包上,再进行封装,供简单直接的调用. /// 目前可以控制硬盘录像机和解码器,需要两者密码一样. /// public class HKWS : IDisposable { #region (0)变量定义 /// /// 发现的文件信息结构 /// private readonly NetSDK.NET_DVR_FIND_DATA[] FindData = new NetSDK.NET_DVR_FIND_DATA[1000]; /// /// 远程录像状态 /// public int _StatusSaveMp4; /// /// 功能:设定播放延迟和流畅。 /// 调节播放的延时和流畅程度,如果buffNum值越大,播放的流畅性越好, /// 相应的延时比较大,buffNum值越小,播放的延时很小, /// 但是当网络不太顺畅的时候,会有丢帧现象,感觉播放不会很流畅。 /// 一般设置的帧缓冲大于等于6帧时,音频预览才会正常, /// 如果不需要音频预览,只需要视频实时性则这个值可以设置的更小。 /// public int buffNum = 10; public int bytesReturned; public int channel = 1; public int channelCount = 5; // 共8个通道 public int channelStart = 1; /// /// 客户端信息结构 /// public NetSDK.NET_DVR_CLIENTINFO ClientInfo; /// /// 解码器通道信息 /// public NetSDK.NET_DVR_MATRIX_DEC_CHAN_INFO dci; /// /// 解码器设备配置信息结构 /// public NetSDK.NET_DVR_DEVICECFG DecoderDeviceCfg; /// /// 解码器设备信息结构体结构实体化 /// public NetSDK.NET_DVR_DEVICEINFO DecoderDeviceInfo; /// /// 解码器信息结构体实例化 /// public Server_Info DecoderInfo; /// /// 解码器登录用户id /// public int decoderUserID; /// /// 硬盘录像机设备配置信息结构 /// public NetSDK.NET_DVR_DEVICECFG DvrDeviceCfg; /// /// 硬盘录像机设备信息结构体结构