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

简介:

正文

     1.     DS40xxSDK.dll

 

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Runtime.InteropServices;
using  System.Drawing;

namespace  HikServer.DS40xxSDK
{
    
#region  enum

    
///   <summary>
    
///  板卡类型
    
///   </summary>
     public   enum  BOARD_TYPE_DS :  uint
    {
        DS400XM 
=   0 ,         // M卡
        DS400XH  =   1 ,         // H卡
        DS4004HC  =   2 ,         // 4004HC
        DS4008HC  =   3 ,         // 4008HC
        DS4016HC  =   4 ,         // 4016HC
        DS4001HF  =   5 ,         // 4001HF
        DS4004HF  =   6 ,         // 4004HF
        DS4002MD  =   7 ,         // 4002MD
        DS4004MD  =   8 ,         // 4004MD
        DS4016HCS  =   9 ,         // 4016HCS
        DS4002HT  =   10 ,     // 4002HT
        DS4004HT  =   11 ,     // 4004HT
        DS4008HT  =   12 ,     // 4008HT
        DS4004HC_PLUS  =   13 ,     // 4004HC+
        DS4008HC_PLUS  =   14 ,     // 4008HC+
        DS4016HC_PLUS  =   15 ,     // 4016HC+
        DS4008HF  =   16 ,     // 4008HF
        DS4008MD  =   17 ,     // 4008MD
        DS4008HS  =   18 ,     // 4008HS
        DS4016HS  =   19 ,     // 4016HS
        INVALID_BOARD_TYPE  =   0xffffffff ,
    }

    
///   <summary>
    
///  视频预览格式
    
///   </summary>
     public   enum  TypeVideoFormat
    {
        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>
     public   enum  VideoStandard_t :  uint
    {
        
///   <summary>
        
///  无视频信号
        
///   </summary>
        StandardNone  =   0x80000000 ,
        
///   <summary>
        
///  NTSC制式
        
///   </summary>
        StandardNTSC  =   0x00000001 ,
        
///   <summary>
        
///  PAL制式
        
///   </summary>
        StandardPAL  =   0x00000002 ,
        StandardSECAM 
=   0x00000004 ,
    } ;

    
///   <summary>
    
///  编码图像分辨率
    
///   </summary>
     public   enum  PictureFormat_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>
     public   enum  BitrateControlType_t
    {
        
///   <summary>
        
///  变码率
        
///   </summary>
        brCBR  =   0 ,
        
///   <summary>
        
///  恒定码率
        
///   </summary>
        brVBR  =   1 ,
    };

    
public   enum  FrameType_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

    
#region  struct

    
///   <summary>
    
///  板卡信息结构体 
    
///   </summary>
     public   struct  DS_BOARD_DETAIL
    {
        
///   <summary>
        
///  板卡类型
        
///   </summary>
        BOARD_TYPE_DS type;
        
///   <summary>
        
///  序列号
        
///  BYTE sn[16];        
        
///   </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst  =   16 )]
        
byte [] sn;
        
///   <summary>
        
///  板卡包含的DSP个数
        
///   </summary>
         uint  dspCount;
        
///   <summary>
        
///  板卡上第一个DSP的索引
        
///   </summary>
         uint  firstDspIndex;
        
///   <summary>
        
///  板卡包含的编码通道个数
        
///   </summary>
         uint  encodeChannelCount;
        
///   <summary>
        
///  板卡上第一个编码通道的索引
        
///   </summary>
         uint  firstEncodeChannelIndex;
        
///   <summary>
        
///  板卡包含的解码通道个数
        
///   </summary>
         uint  decodeChannelCount;
        
///   <summary>
        
///  板卡上第一个解码通道的索引
        
///   </summary>
         uint  firstDecodeChannelIndex;
        
///   <summary>
        
///  板卡包含的视频输出通道个数
        
///   </summary>
         uint  displayChannelCount;
        
///   <summary>
        
///  板卡上第一个视频输出通道的索引
        
///   </summary>
         uint  firstDisplayChannelIndex;
        
uint  reserved1;
        
uint  reserved2;
        
uint  reserved3;
        
///   <summary>
        
///  硬件版本,format:major.minor.build,major:bit 16-19,minor: bit 8-15,build: bit 0-7
        
///   </summary>
         uint  version;
    }

    
///   <summary>
    
///  DSP信息结构体 
    
///   </summary>
     public   struct  DSP_DETAIL
    {
        
///   <summary>
        
///  此DSP所包含的编码通道个数
        
///   </summary>
         uint  encodeChannelCount;
        
///   <summary>
        
///  此DSP上第一个编码通道在所有编码通道中的索引
        
///   </summary>
         uint  firstEncodeChannelIndex;
        
///   <summary>
        
///  此DSP所包含的解码通道个数
        
///   </summary>
         uint  decodeChannelCount;
        
///   <summary>
        
///  此DSP上第一个解码通道在所有解码通道中的索引
        
///   </summary>
         uint  firstDecodeChannelIndex;
        
///   <summary>
        
///  此DSP包含的显示通道个数
        
///   </summary>
         uint  displayChannelCount;
        
///   <summary>
        
///  此DSP上第一个显示通道在所有显示通道中的索引
        
///   </summary>
         uint  firstDisplayChannelIndex;
        
uint  reserved1;
        
uint  reserved2;
        
uint  reserved3;
        
uint  reserved4;
    }

    
///   <summary>
    
///  特殊功能结构体
    
///   </summary>
     public   struct  CHANNEL_CAPABILITY
    {
        
///   <summary>
        
///  音频预览
        
///   </summary>
         byte [] bAudioPreview;
        
///   <summary>
        
///  报警信号
        
///   </summary>
         byte [] bAlarmIO;
        
///   <summary>
        
///  看家狗
        
///   </summary>
         byte [] bWatchDog;
    }

    
///   <summary>
    
///  版本信息
    
///   </summary>
     public   struct  PVERSION_INFO
    {
        
///   <summary>
        
///  DSP版本号,DSP的BUILD号,用于软件升级时标明该版本的最后修改时间 
        
///   </summary>
         ulong  DspVersion, DspBuildNum;
        
///   <summary>
        
///  Driver版本号,Driver的BUILD号,用于软件升级时标明该版本的最后修改时间 
        
///   </summary>
         ulong  DriverVersion, DriverBuildNum;
        
///   <summary>
        
///  SDK版本号,SDK的BUILD号,用于软件升级时标明该版本的最后修改时间 
        
///   </summary>
         ulong  SDKVersion, SDKBuildNum;
    }

    
///   <summary>
    
///  显示窗口内的矩形区域
    
///   </summary>
     // [StructLayout(LayoutKind.
    
// public struct RECT
    
// {
    
//     public long left;
    
//     public long top;
    
//     public long right;
    
//     public long bottom;
    
// }

    
///   <summary>
    
///  帧统计信息结构体 
    
///   </summary>
     public   struct  PFRAMES_STATISTICS
    {
        
///   <summary>
        
///  视频帧
        
///   </summary>
         ulong  VideoFrames;
        
///   <summary>
        
///  音频帧
        
///   </summary>
         ulong  AudioFrames;
        
///   <summary>
        
///  丢失帧
        
///   </summary>
         ulong  FramesLost;
        
///   <summary>
        
///  丢失的码流(字节)
        
///   </summary>
         ulong  QueueOverflow;
        
///   <summary>
        
///  当前的帧率(bps)
        
///   </summary>
         ulong  CurBps;
    }

    
///   <summary>
    
///  版本信息结构体 
    
///   </summary>
     public   struct  PHW_VERSION
    {
        
///   <summary>
        
///  DSP程序的版本号和Build号 
        
///   </summary>
         ulong  DspVersion, DspBuildNum;
        
///   <summary>
        
///  驱动程序的版本号和Build号 
        
///   </summary>
         ulong  DriverVersion, DriverBuildNum;
        
///   <summary>
        
///  SDK 的版本号和Build号 
        
///   </summary>
         ulong  SDKVersion, SDKBuildNum;
    }

    
///   <summary>
    
///  系统时间
    
///   </summary>
     public   struct  SYSTEMTIME
    {
        
ushort  wYear;
        
ushort  wMonth;
        
ushort  wDayOfWeek;
        
ushort  wDay;
        
ushort  wHour;
        
ushort  wMinute;
        
ushort  wSecond;
        
ushort  wMilliseconds;
    }

    
#endregion

    
#region  delegate

    
///   <summary>
    
///  原始图像流设置
    
///  
    
///  typedef void (*IMAGE_STREAM_CALLBACK)(UINT channelNumber,void *context);
    
///   </summary>
    
///   <param name="channelNumber"> 通道号 </param>
    
///   <param name="context"> 设备上下文 </param>
     public   delegate   void  IMAGE_STREAM_CALLBACK( uint  channelNumber, 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);
     public   delegate   int  STREAM_DIRECT_READ_CALLBACK( int  channelNumber, IntPtr DataBuf,  int  Length, 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>
     public   delegate   int  STREAM_READ_CALLBACK( ulong  channelNumber, 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>
     public   delegate   void  MOTION_DETECTION_CALLBACK( ulong  channelNumber,  bool  bMotionDetected, 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>
     public   delegate   void  DrawFun( long  nPort, IntPtr HDC,  long  nUser);


本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586675,如需转载请自行联系原作者
相关文章
|
7天前
|
缓存 监控 测试技术
ERP系统对接方案与API接口封装系列(高并发)
企业资源规划(ERP)系统是现代企业管理的核心,它集成了企业内部的各个部门和业务流程。为了实现ERP系统与其他外部系统或应用程序之间的数据交换和协作,需要对接方案。API(应用程序编程接口)是实现系统对接的常用方法之一。
|
2月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
20 3
|
2月前
|
监控 安全 Linux
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(3)
高并发服务器模型-poll poll介绍   poll跟select类似, 监控多路IO, 但poll不能跨平台。其实poll就是把select三个文件描述符集合变成一个集合了。
27 0
|
2月前
|
API C++
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(1)
前言   本文旨在学习socket网络编程这一块的内容,epoll是重中之重,后续文章写reactor模型是建立在epoll之上的。
25 0
|
2月前
|
前端开发 JavaScript 小程序
【uniapp】十分钟带你封装uniapp的api请求
【uniapp】十分钟带你封装uniapp的api请求
|
2月前
|
Ubuntu 应用服务中间件 API
将网易云API通过宝塔布署到云服务器
将网易云API通过宝塔布署到云服务器
|
3月前
|
API 开发工具 开发者
通过解析封装关键词搜索速卖通商品列表数据接口,速卖通API接口
通过解析封装关键词搜索速卖通商品列表数据接口,速卖通API接口
25 0
|
3月前
|
开发框架 安全 JavaScript
解密IIS服务器API跨域问题的终极解决方案
解密IIS服务器API跨域问题的终极解决方案
|
3月前
|
XML JSON 安全
uni-app API请求封装:让接口调用更加简单高效
在进行uni-app开发时,网络请求是必不可少的环节。为了方便开发,我们可以封装一些网络请求方法,以便在多个页面中复用,并且可以统一处理错误信息等问题,提高开发效率和代码质量。本文将介绍如何封装网络请求方法。
98 0
uni-app API请求封装:让接口调用更加简单高效

热门文章

最新文章

相关产品

  • 云迁移中心