C# 视频监控系列(7):服务器端——封装API(下)(1)

2024-05-17 16:45:05

前言

写系列文章的时候[前言]部分变得无言了,可能来得顺利了点吧: ) 本章中提供的封装均是我用笨办法从<<Hikvision 板卡网络开发包编程手册V4.7>>和<<DS-4000HC、HCS、HC+、HF、HS、MD卡的Windows编程指南V4.3>>中拷贝出来并参照VC++代码进行整理的,主要是针对HikServer.dll和DS40xxSDK.dll的调用封装。

注意

本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心、实现以及其他能够贴出来的代码我都会贴出来,并且争取尽所能的回答留言里的每一个问题,感谢大家关注,欢迎交流 :)

系列

1.     C# 视频监控系列(1):准备

2.     C# 视频监控系列(2):客户端——封装API

3.     C# 视频监控系列(3):客户端——连接服务器

4.     C# 视频监控系列(4):客户端——音频接收和抓图

5.     C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)

6.     C# 视频监控系列(6):服务器端——封装API(上) [HikServer.dll]

7.     C# 视频监控系列(7):服务器端——封装API(下) [DS40xxSDK.dll]

正文

1.     DS40xxSDK.dll

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;usingSystem.Drawing;namespaceHikServer.DS40xxSDK
{
#regionenum///<summary>///板卡类型///</summary>publicenumBOARD_TYPE_DS :uint{
        DS400XM
=0,//M卡DS400XH=1,//H卡DS4004HC=2,//4004HCDS4008HC=3,//4008HCDS4016HC=4,//4016HCDS4001HF=5,//4001HFDS4004HF=6,//4004HFDS4002MD=7,//4002MDDS4004MD=8,//4004MDDS4016HCS=9,//4016HCSDS4002HT=10,//4002HTDS4004HT=11,//4004HTDS4008HT=12,//4008HTDS4004HC_PLUS=13,//4004HC+DS4008HC_PLUS=14,//4008HC+DS4016HC_PLUS=15,//4016HC+DS4008HF=16,//4008HFDS4008MD=17,//4008MDDS4008HS=18,//4008HSDS4016HS=19,//4016HSINVALID_BOARD_TYPE=0xffffffff,
    }
///<summary>///视频预览格式///</summary>publicenumTypeVideoFormat
    {
        vdfRGB8A_233
=0x00000001,
        vdfRGB8R_332
=0x00000002,
        vdfRGB15Alpha
=0x00000004,///<summary>///16位RGB视频压缩格式///</summary>vdfRGB16=0x00000008,///<summary>///24位RGB视频压缩格式///</summary>vdfRGB24=0x00000010,
        vdfRGB24Alpha
=0x00000020,

vdfYUV420Planar=0x00000040,///<summary>///YUV422视频压缩格式///</summary>vdfYUV422Planar=0x00000080,
        vdfYUV411Planar
=0x00000100,
        vdfYUV420Interspersed
=0x00000200,
        vdfYUV422Interspersed
=0x00000400,
        vdfYUV411Interspersed
=0x00000800,
        vdfYUV422Sequence
=0x00001000,/*U0, Y0, V0, Y1:  For VO overlay*/vdfYUV422SequenceAlpha=0x00002000,/*U0, Y0, V0, Y1:  For VO overlay, with low bit for alpha blending*/vdfMono=0x00004000,/*8 bit monochrome*/vdfYUV444Planar=0x00008000,
    };
///<summary>///视频制式///</summary>publicenumVideoStandard_t :uint{///<summary>///无视频信号///</summary>StandardNone=0x80000000,///<summary>///NTSC制式///</summary>StandardNTSC=0x00000001,///<summary>///PAL制式///</summary>StandardPAL=0x00000002,
        StandardSECAM
=0x00000004,
    } ;
///<summary>///编码图像分辨率///</summary>publicenumPictureFormat_t
    {
        ENC_CIF_FORMAT
=0,
        ENC_QCIF_FORMAT
=1,
        ENC_2CIF_FORMAT
=2,
        ENC_4CIF_FORMAT
=3,
        ENC_QQCIF_FORMAT
=4,
        ENC_CIFQCIF_FORMAT
=5,
        ENC_CIFQQCIF_FORMAT
=6,
        ENC_DCIF_FORMAT
=7};///<summary>///码流控制方式///</summary>publicenumBitrateControlType_t
    {
///<summary>///变码率///</summary>brCBR=0,///<summary>///恒定码率///</summary>brVBR=1,
    };
publicenumFrameType_t
    {
        PktError
=0,
        PktIFrames
=0x0001,
        PktPFrames
=0x0002,
        PktBBPFrames
=0x0004,
        PktAudioFrames
=0x0008,
        PktMotionDetection
=0x00010,
        PktDspStatus
=0x00020,
        PktOrigImage
=0x00040,
        PktSysHeader
=0x00080,
        PktBPFrames
=0x00100,
        PktSFrames
=0x00200,
        PktSubIFrames
=0x00400,
        PktSubPFrames
=0x00800,
        PktSubBBPFrames
=0x01000,
        PktSubSysHeader
=0x02000};#endregion#regionstruct///<summary>///板卡信息结构体///</summary>publicstructDS_BOARD_DETAIL
    {
///<summary>///板卡类型///</summary>BOARD_TYPE_DS type;///<summary>///序列号///BYTE sn[16];///</summary>[MarshalAs(UnmanagedType.ByValArray, SizeConst=16)]byte[] sn;///<summary>///板卡包含的DSP个数///</summary>uintdspCount;///<summary>///板卡上第一个DSP的索引///</summary>uintfirstDspIndex;///<summary>///板卡包含的编码通道个数///</summary>uintencodeChannelCount;///<summary>///板卡上第一个编码通道的索引///</summary>uintfirstEncodeChannelIndex;///<summary>///板卡包含的解码通道个数///</summary>uintdecodeChannelCount;///<summary>///板卡上第一个解码通道的索引///</summary>uintfirstDecodeChannelIndex;///<summary>///板卡包含的视频输出通道个数///</summary>uintdisplayChannelCount;///<summary>///板卡上第一个视频输出通道的索引///</summary>uintfirstDisplayChannelIndex;uintreserved1;uintreserved2;uintreserved3;///<summary>///硬件版本,format:major.minor.build,major:bit 16-19,minor: bit 8-15,build: bit 0-7///</summary>uintversion;
    }
///<summary>///DSP信息结构体///</summary>publicstructDSP_DETAIL
    {
///<summary>///此DSP所包含的编码通道个数///</summary>uintencodeChannelCount;///<summary>///此DSP上第一个编码通道在所有编码通道中的索引///</summary>uintfirstEncodeChannelIndex;///<summary>///此DSP所包含的解码通道个数///</summary>uintdecodeChannelCount;///<summary>///此DSP上第一个解码通道在所有解码通道中的索引///</summary>uintfirstDecodeChannelIndex;///<summary>///此DSP包含的显示通道个数///</summary>uintdisplayChannelCount;///<summary>///此DSP上第一个显示通道在所有显示通道中的索引///</summary>uintfirstDisplayChannelIndex;uintreserved1;uintreserved2;uintreserved3;uintreserved4;
    }
///<summary>///特殊功能结构体///</summary>publicstructCHANNEL_CAPABILITY
    {
///<summary>///音频预览///</summary>byte[] bAudioPreview;///<summary>///报警信号///</summary>byte[] bAlarmIO;///<summary>///看家狗///</summary>byte[] bWatchDog;
    }
///<summary>///版本信息///</summary>publicstructPVERSION_INFO
    {
///<summary>///DSP版本号,DSP的BUILD号,用于软件升级时标明该版本的最后修改时间///</summary>ulongDspVersion, DspBuildNum;///<summary>///Driver版本号,Driver的BUILD号,用于软件升级时标明该版本的最后修改时间///</summary>ulongDriverVersion, DriverBuildNum;///<summary>///SDK版本号,SDK的BUILD号,用于软件升级时标明该版本的最后修改时间///</summary>ulongSDKVersion, SDKBuildNum;
    }
///<summary>///显示窗口内的矩形区域///</summary>//[StructLayout(LayoutKind.//public struct RECT//{//public long left;//public long top;//public long right;//public long bottom;//}///<summary>///帧统计信息结构体///</summary>publicstructPFRAMES_STATISTICS
    {
///<summary>///视频帧///</summary>ulongVideoFrames;///<summary>///音频帧///</summary>ulongAudioFrames;///<summary>///丢失帧///</summary>ulongFramesLost;///<summary>///丢失的码流(字节)///</summary>ulongQueueOverflow;///<summary>///当前的帧率(bps)///</summary>ulongCurBps;
    }
///<summary>///版本信息结构体///</summary>publicstructPHW_VERSION
    {
///<summary>///DSP程序的版本号和Build号///</summary>ulongDspVersion, DspBuildNum;///<summary>///驱动程序的版本号和Build号///</summary>ulongDriverVersion, DriverBuildNum;///<summary>///SDK 的版本号和Build号///</summary>ulongSDKVersion, SDKBuildNum;
    }
///<summary>///系统时间///</summary>publicstructSYSTEMTIME
    {
ushortwYear;ushortwMonth;ushortwDayOfWeek;ushortwDay;ushortwHour;ushortwMinute;ushortwSecond;ushortwMilliseconds;
    }
#endregion#regiondelegate///<summary>///原始图像流设置//////typedef void (*IMAGE_STREAM_CALLBACK)(UINT channelNumber,void *context);///</summary>///<param name="channelNumber">通道号</param>///<param name="context">设备上下文</param>publicdelegatevoidIMAGE_STREAM_CALLBACK(uintchannelNumber, IntPtr context);///<summary>///编码数据流直接读取回调函数//////typedef int (*STREAM_DIRECT_READ_CALLBACK)(ULONG channelNumber,void *DataBuf,DWORD Length,int FrameType,void *context);///</summary>///<param name="channelNumber">通道号</param>///<param name="DataBuf">缓冲区地址</param>///<param name="Length">缓冲区长度</param>///<param name="FrameType">缓冲区数据帧类型</param>///<param name="context">设备上下文</param>///<returns></returns>[UnmanagedFunctionPointer(CallingConvention.Cdecl)]//public delegate int STREAM_DIRECT_READ_CALLBACK(uint channelNumber, byte[] DataBuf, uint Length, FrameType_t FrameType, IntPtr context);publicdelegateintSTREAM_DIRECT_READ_CALLBACK(intchannelNumber, IntPtr DataBuf,intLength, FrameType_t FrameType, IntPtr context);//public unsafe delegate int STREAM_DIRECT_READ_CALLBACK(uint channelNumber, void * DataBuf, uint Length, int FrameType, IntPtr context);///<summary>///直接读取码流回调函数//////typedef int (*STREAM_READ_CALLBACK)(ULONG channelNumber, void *context)///</summary>///<param name="channelNumber">通道号</param>///<param name="context">设备上下文</param>///<returns></returns>publicdelegateintSTREAM_READ_CALLBACK(ulongchannelNumber, IntPtr context);///<summary>///移动侦测结果回调函数//////typedef void (*MOTION_DETECTION_CALLBACK)(ULONG channelNumber, BOOL bMotionDetected,void *context)///</summary>///<param name="channelNumber">通道号</param>///<param name="bMotionDetected">///移动侦测发生标志,如果当前通道所设置的移动侦测///区域内产生了移动侦测,则被置为True;如果当前通道所设置的移动侦测区域内自上///一次产生移动侦测后delay秒内没有发生移动侦测,则被置为False。///</param>///<param name="context">设备上下文</param>publicdelegatevoidMOTION_DETECTION_CALLBACK(ulongchannelNumber,boolbMotionDetected, IntPtr context);///<summary>///画图回调函数//////#define DRAWFUN(x)   void  (CALLBACK* x)(long nPort,HDC hDc,LONG nUser)///</summary>///<param name="nPort">通道号</param>///<param name="HDC">offscreen表面设备上下文,相当于显示窗口中的DC</param>///<param name="nUser">用户数据</param>publicdelegatevoidDrawFun(longnPort, IntPtr HDC,longnUser);

转载于:https://blog.51cto.com/over140/586675

C# 视频监控系列(7):服务器端——封装API(下)(1)相关推荐

  1. C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll]

    前言 当你认真的写完客户端和服务器端的时候可能不需要再继续往下看关于播放器的代码和说明,因为你已经掌握了如何转换VC++代码的技巧了,加上GOOGLE再来完成这个播放器应该算小菜了.但是作为我的系列, ...

  2. C# 视频监控系列(9):服务器端——数据捕获(抓图 + 录像)

    前言 录像功能是监控系统中最重要的功能之一,除了本文的功能实现外,还需要你自己考虑合适的存储策略:存储大小.时间段.存储盘符等. 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码 ...

  3. C# 视频监控系列(13):H264播放器——控制播放和截图

    C# 视频监控系列(13):H264播放器--控制播放和截图 前言 本该把这部分和上一篇合成一篇的,无奈挣扎半天,还是想对称起来,客户端3篇.服务器端3篇--所有播放器也勉强凑3篇吧(封装API的文章 ...

  4. C# 视频监控系列(14):总结贴——VC++代码转成C#小结

    前言 关键字:c++ to C# 原计划是再写一篇H264播放器转换AVI的文章才开始写总结的,至今未能成功,由于时间问题并且也暂时没有这个需求,所以决定从原计划中去掉这一章节直接进入总结贴,然后结束 ...

  5. C# 视频监控系列(15):总结贴——可能用到的C# WinForm技术小结

    前言 本章主要把可能用到的C# WinForm 功能性代码在这里汇总一下,以备实现其他功能来满足客户的其他需求,或者方便自己开发. 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代 ...

  6. C# 视频监控系列(6):服务器端——封装API(上)(1)

    前言 写系列文章的时候[前言]部分变得无言了,可能来得顺利了点吧: ) 本章中提供的封装均是我用笨办法从<<Hikvision 板卡网络开发包编程手册V4.7>>和<&l ...

  7. C# 视频监控系列(2):客户端——封装API

    前言 本章主要是在C#封装的海康DVR客户端SDK 的代码上修改的,并参考<Hikvision 板卡网络开发包编程手册V4.7.pdf>补上更完整的注释,并且参照VC++源码做了小部分修改 ...

  8. C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)

    前言 这几天加紧赶工写服务器端的程序,所有系列文章更新较慢,见谅: ) 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心.实现以及其他能够贴 ...

  9. C# 视频监控系列(10):服务器端——验证、设置画面质量、字幕叠加、板卡序列号...

    C# 视频监控系列(10):服务器端--验证.设置画面质量.字幕叠加.板卡序列号 豆豆网   技术应用频道   2009年04月08日  [字号:小 中 大] 收藏本文 被过滤广告 关键字: NetB ...

最新文章

  1. 几行代码实现神奇移动的过渡动画
  2. 想学新的编程语言?考虑下Go吧
  3. 看上华科,这家公司与其成立联合AI实验室
  4. (七)OpenStack---M版---双节点搭建---Dashboard安装和配置
  5. git使用的基本流程_这 7 个免费的 Git 教程,适合所有程序员
  6. .NET Core/.NET之Stream简介
  7. .NET Core 2.0及.NET Standard 2.0
  8. 最短路径——Floyd算法HDU Today(hdu2112)
  9. zabbix使用zabbix-java-gateway监控jvm/tomcat性能
  10. 深度缓冲区,RenderQueue、ZWrite和ZTest
  11. (十四)Struts2 验证框架
  12. 阿里巴巴的图标库 -------------本地使用
  13. 在mysql中,涉及到金钱的数据类型一般是什么?
  14. 德银天下招股书再度“失效”,陕汽控股集团提前“套现”约5亿元
  15. Linux修改fstab引起系统无法启动问题的解决方法
  16. 电商时代得流量者得天下,思域流量要怎么做
  17. 轴承剥离型故障对应的特征频率
  18. torch.cat()函数的官方解释,详解以及例子
  19. 《哲学史讲演录》——思辨节选---智者派
  20. QWebEngine集成Netron可视化模型

热门文章

  1. 【直播回放】80分钟剖析GAN如何从各个方向提升图像的质量
  2. 【每周NLP论文推荐】 知识图谱重要论文介绍
  3. 【AI-1000问】人脸的4个方向,你还分的清楚吗?
  4. 【技术综述】计算机审美,学的怎么样了?
  5. 全球及中国冠状动脉内支架行业运行现状与十四五发展状况分析报告2022版
  6. VS Code 的常用快捷键和插件
  7. Python3 系列之 可变参数和关键字参数
  8. 【软件构造】第二章 软件构建的过程和工具(2)
  9. 消息系统kafka原理解析
  10. redis 持久化之 rdb 快照持久化