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,如需转载请自行联系原作者
相关文章
|
18天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
3月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
37 3
|
3月前
|
API C++
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(1)
前言   本文旨在学习socket网络编程这一块的内容,epoll是重中之重,后续文章写reactor模型是建立在epoll之上的。
36 0
|
3月前
|
监控 安全 Linux
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(3)
高并发服务器模型-poll poll介绍   poll跟select类似, 监控多路IO, 但poll不能跨平台。其实poll就是把select三个文件描述符集合变成一个集合了。
36 0
|
1月前
|
前端开发 API 数据处理
uni-app 封装api请求
uni-app 封装api请求
15 0
|
2月前
|
缓存 监控 测试技术
ERP系统对接方案与API接口封装系列(高并发)
企业资源规划(ERP)系统是现代企业管理的核心,它集成了企业内部的各个部门和业务流程。为了实现ERP系统与其他外部系统或应用程序之间的数据交换和协作,需要对接方案。API(应用程序编程接口)是实现系统对接的常用方法之一。
|
3月前
|
前端开发 JavaScript 小程序
【uniapp】十分钟带你封装uniapp的api请求
【uniapp】十分钟带你封装uniapp的api请求
129 0
|
3月前
|
Ubuntu 应用服务中间件 API
将网易云API通过宝塔布署到云服务器
将网易云API通过宝塔布署到云服务器
|
4月前
|
API 开发工具 开发者
通过解析封装关键词搜索速卖通商品列表数据接口,速卖通API接口
通过解析封装关键词搜索速卖通商品列表数据接口,速卖通API接口
33 0