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

简介:
  ///   <summary>
    
///  解码回调函数
    
///  
    
///  typedef void (*DECODER_VIDEO_CAPTURE_CALLBACK)(UINT nChannelNumber, void *DataBuf,UINT width,UINT height,UINT nFrameNum,UINT nFrameTime, SYSTEMTIME *pFrameAbsoluteTime,void *context) 
    
///   </summary>
    
///   <param name="nChannelNumber"> 解码通道句柄 </param>
    
///   <param name="DataBuf"> 缓冲区地址 </param>
    
///   <param name="width"> 图像宽度 </param>
    
///   <param name="height"> 图像高度 </param>
    
///   <param name="nFrameNum"> 捕获的当前帧的序号 </param>
    
///   <param name="nFrameTime"> 捕获的当前帧的相对时间,单位:毫秒 </param>
    
///   <param name="pFrameAbsoluteTime"> 捕获的当前帧的绝对时间 </param>
    
///   <param name="context"> 设备上下文 </param>
     public   delegate   void  DECODER_VIDEO_CAPTURE_CALLBACK( uint  nChannelNumber, IntPtr DataBuf,  uint  width,  uint  height,  uint  nFrameNum,  uint  nFrameTime, SYSTEMTIME pFrameAbsoluteTime, IntPtr context);

    
///   <summary>
    
///  创建索引完成回调函数
    
///  
    
///  typedef void (*FILE_REF_DONE_CALLBACK)(UINT nChannel,UINT nSize)
    
///   </summary>
    
///   <param name="nChannel"> 通道号 </param>
    
///   <param name="nSize"> 索引大小(暂时无效,以后可以增加索引导出、导入功能)  </param>
     public   delegate   void  FILE_REF_DONE_CALLBACK( uint  nChannel,  uint  nSize);

    
#endregion



    
///   <summary>
    
///  DS40xxSDK.dll
    
///   </summary>
     public   class  HikVisionSDK
    {
        
///   <summary>
        
///  状态
        
///   </summary>
         public   static   readonly  List < string >  state  =   new  List < string > ( new   string []{
            
"" " 正在打开 " " 音频信号丢失 " " 视频信号丢失 " " 有物体移动 " // 0-4 
             " 自动分割录像 " " 开始录像 " " 停止录像 " " 启动声音监听 " " 停止声音监听 " // 5-9 
             " 启动视频预览 " " 停止视频预览 " " 启动录像 " " 停止录像 " " 启动视频报警 " // 10-14 
             " 关闭视频报警 " " 启动音频报警 " " 停止音频报警 " " 启动移动侦测 " " 停止移动侦测 " // 15-19 
             " 启动视频遮挡 " " 关闭视频遮挡 " " 开始屏幕输出 " " 停止屏幕输出 " " 启动视频LOGO " // 20-24 
             " 停止视频LOGO " " 开始视频OSD " " 停止视频OSD " " 切换为黑白视频 " " 切换为彩色视频 " // 25-29 
             " 切换为黑屏显示 " " 切换为白屏显示 " " 视频色彩复位 " " 启动全屏显示 " " 采集卡已经加载 " // 30-34 
             " 采集卡已经卸截 " " 视频服务启动成功 " " 视频服务已停止 " " 静音 " " 音量恢复 " // 35-39 
             " 云台控制命令发送 " " 系统出现未知错误 " " 录像文件大小 " " 配置端口号成功 " " 连接服务端成功 " // 40-44 
             " 正在连接 " " 开始接收图象 " " 异常退出 " " 接收完毕,退出 " " 无法联系服务端 " // 45-49 
             " 服务端拒绝访问 " " 无效 " " 停止客户端连接 " " 图像抓取成功 " " 初始化服务端网络连接成功 " // 50-54 
             " 视频服务启动失败 " " 退出全屏预览 " "" "" ""   // 55-59 
        });

        
// 可以用新版函数替代功能或者无效的API 
        
// GetTotalChannels:可用GetEncodeChannelCount替代 
        
// GetTotalDSPs:可用GetDspCount 替代 
        
// SetupDateTime:4.0版本起无效 
        
// HW_GetChannelNum:无效,请使用GetBoardDetail 
        
// HW_GetDeviceSerialNo:无效,请使用GetBoardDetail 
        
// HW_SetVideoOutStandard:无效,请使用SetDisplayStandard或SetDefaultVideoStandard 
        
// HW_SetDspDeadlockMsg:无效 
        
// HW_ResetDsp:无效 
        
// HW_SetDisplayPara:DISPLAY_PARA结构中bToVideoOut无效,MD卡模拟视频输出功能
        
// 已经整合到视频矩阵之中。 

        
#region  流类型宏定义

        
///   <summary>
        
///  视频流 
        
///  #define STREAM_TYPE_VIDEO 
        
///   </summary>
         private   const   int  STREAM_TYPE_VIDEO  =   1 ;
        
///   <summary>
        
///  音频流 
        
///  #define STREAM_TYPE_AUDIO   
        
///   </summary>
         private   const   int  STREAM_TYPE_AUDIO  =   2 ;
        
///   <summary>
        
///  音视频复合流 
        
///  #define STREAM_TYPE_AVSYNC 
        
///   </summary>
         private   const   int  STREAM_TYPE_AVSYNC  =   3 ;

        
#endregion

        
#region  1.板卡初始化及卸载

        
///   <summary>
        
///  1.1初始化DSP InitDSPs
        
///      说  明: 初始化系统中每一块板卡,应在应用软件程序启动时完成。如果返回值为0则表
        
///      明初始化失败,可能没有找到相应的DSP软件模块。
        
///  
        
///  int __stdcall InitDSPs()
        
///   </summary>
        
///   <returns> 系统内可用的编码通道个数。  </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  InitDSPs();


        
///   <summary>
        
///  1.2卸载DSP DeInitDSPs
        
///      说  明:  关闭每一块板卡上的功能,应在应用软件程序退出时调用。 
        
///  
        
///  int __stdcall DeInitDSPs()
        
///   </summary>
        
///   <returns> 0 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  DeInitDSPs();

        
#endregion

        
#region  2.板卡信息获取

        
///   <summary>
        
///  2.1获取系统中板卡的张数GetBoardCount 
        
///      说  明:  获取系统中所有板卡的张数,包含编码卡和解码卡。
        
///  
        
///  unsigned int __stdcall GetBoardCount() 
        
///   </summary>
        
///   <returns> 系统中板卡的总张数。 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   uint  GetBoardCount();

        
///   <summary>
        
///  2.2获取系统中DSP的个数GetDspCount 
        
///      说  明:  获取系统中所有板卡的DSP的个数。 
        
///      
        
///  unsigned int __stdcall GetDspCount()
        
///   </summary>
        
///   <returns> 系统中DSP的总个数 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   uint  GetDspCount();

        
///   <summary>
        
///  GetTotalDSPs:可用GetDspCount 替代
        
///  获得实际可用DSP
        
///   </summary>
        
///   <returns></returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  GetTotalDSPs();

        
///   <summary>
        
///  2.3获取系统中编码通道的个数GetEncodeChannelCount
        
///      说  明:  获取系统中所有编码卡的编码通道总个数,包含H系列和HC系列编码卡。
        
///  
        
///  unsigned int __stdcall GetEncodeChannelCount()
        
///   </summary>
        
///   <returns> 系统中编码通道的个数 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   uint  GetEncodeChannelCount();

        
///   <summary>
        
///  2.4获取系统中解码通道的个数GetDecodeChannelCount 
        
///      说  明:  获取系统中MD卡的解码通道个数 
        
///  
        
///  unsigned int __stdcall GetDecodeChannelCount() 
        
///   </summary>
        
///   <returns></returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   uint  GetDecodeChannelCount();

        
///   <summary>
        
///  2.5获取系统中解码显示通道的个数GetDisplayChannelCount
        
///      说  明:  获取系统中MD卡显示通道的个数,即模拟视频输出通道的个数
        
///  
        
///  unsigned int __stdcall GetDisplayChannelCount()
        
///   </summary>
        
///   <returns> 系统中显示通道的个数 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   uint  GetDisplayChannelCount();

        
///   <summary>
        
///  2.6获取板卡详细信息GetBoardDetail 
        
///      说  明:  获取某张板卡的详细信息 
        
///  
        
///  int __stdcall GetBoardDetail(UINT boardNum,DS_BOARD_DETAIL *pBoardDetail)
        
///   </summary>
        
///   <param name="boardNum"> 板卡索引 </param>
        
///   <param name="pBoardDetail"> 板卡信息 </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  GetBoardDetail( uint  boardNum,  ref  DS_BOARD_DETAIL pBoardDetail);

        
///   <summary>
        
///  2.7获取DSP详细信息GetDspDetail
        
///      说  明:  获取某个DSP的详细信息 
        
///  
        
///  int __stdcall GetDspDetail(UINT dspNum,DSP_DETAIL *pDspDetail)
        
///   </summary>
        
///   <param name="dspNum"> DSP索引 </param>
        
///   <param name="pDspDetail"> DSP信息 </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  GetDspDetail( uint  dspNum,  ref  DSP_DETAIL pDspDetail);

        
///   <summary>
        
///  2.8获取板卡型号及序列号信息GetBoardInfo
        
///      说  明:  获取板卡的型号及序列号信息
        
///  
        
///  int __stdcall GetBoardInfo(HANDLE hChannelHandle, ULONG *BoardType,  UCHAR *SerialNo)
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="BoardType"> 板卡型号 </param>
        
///   <param name="SerialNo">
        
///  板卡ID号, 内容为板卡序列号的ASCII的数值,次序为SerialNo[0] 对应最高位,
        
///  SerialNo[11]对应最低位。比如卡号为“40000002345”的值对应为 4,0,0,0,0,1,0,0,2,3,4,5 的整形数组。
        
///   </param>
        
///   <returns> 成功为0;失败返回错误号  </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  GetBoardInfo(IntPtr hChannelHandle,  ulong  BoardType,  byte [] SerialNo);


        
///   <summary>
        
///  2.9获取板卡特殊功能信息GetCapability
        
///      说  明:  获取板卡特殊功能信息
        
///  
        
///  int __stdcall GetCapability(HANDLE hChannelHandle,  CHANNEL_CAPABILITY *Capability) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="Capability"> 特殊功能  </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  GetCapability(IntPtr hChannelHandle, CHANNEL_CAPABILITY Capability);


        
///   <summary>
        
///  2.10获取板卡SDK信息GetSDKVersion
        
///      说  明:  获取当前所使用的DSP、Driver、SDK版本号
        
///  
        
///  int __stdcall GetSDKVersion(PVERSION_INFO VersionInfo) 
        
///   </summary>
        
///   <param name="VersionInfo"> 版本信息 </param>
        
///   <returns> 成功返回0;失败返回错误号。 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  GetSDKVersion( ref  PVERSION_INFO VersionInfo);

        
///   <summary>
        
///  2.11获取板卡SDK及DSP错误报告GetLastErrorNum*,此函数只对H卡有效
        
///      说  明:  获取SDK及DSP错误报告。此函数只对H卡有效,用于HC卡上返回0且无效
        
///  
        
///  int __stdcall GetLastErrorNum(HANDLE hChannelHandle, ULONG *DspError,  ULONG *SdkError) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="DspError"> DSP错误 </param>
        
///   <param name="SdkError"> SDK错误 </param>
        
///   <returns> DSP错误信息、SDK错误信息 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  GetLastErrorNum(IntPtr hChannelHandle,  ref   int  DspError,  ref   int  SdkError);

        
#endregion

        
#region  3.编码卡API

        
#region  3.1通道打开及关闭

        
///   <summary>
        
///  3.1.1打开通道ChannelOpen
        
///      说  明:  打开通道,获取编码通道的操作句柄,与通道相关的操作需使用相对应的句柄。 
        
///  
        
///  HANDLE __stdcall ChannelOpen(int ChannelNum) 
        
///   </summary>
        
///   <param name="ChannelNum"> 通道号(从0开始) </param>
        
///   <returns> 成功返回有效句柄(值可能为0);失败返回0xFFFFFFFF。 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern  IntPtr ChannelOpen( int  ChannelNum);

        
///   <summary>
        
///  3.1.2关闭通道ChannelClose
        
///      说  明:  关闭通道,释放相关资源 
        
///  
        
///  int __stdcall ChannelClose(HANDLE hChannelHandle) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  ChannelClose(IntPtr hChannelHandle);

        
#endregion

        
#region  3.2视频预览

        
#region  3.2.1 Overlay预览模式
        
//         释  义:  overlay预览模式 
        
// Overlay通常被称为重叠页面或者是覆盖层,是一种需要特定的硬件支持的页面,通常
        
// 被用于显示实时视频于主页面之上,而不需要Blit操作到主页面或用任何方法改变主页面的

        //内容。使用该方式进行预览可以提高预览的画质和降低CPU利用率。


本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586677,如需转载请自行联系原作者

相关文章
|
26天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
4月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
38 3
|
19天前
|
前端开发 BI API
API函数式组件封装逻辑
API函数式组件封装逻辑
13 0
|
19天前
|
API
[组件封装]API式调用-封装一个审核意见的组件Comments
[组件封装]API式调用-封装一个审核意见的组件Comments
11 0
|
2月前
|
编译器 API C++
【C++ 动态库设计】动态库中的模板函数:解决如果将模板函数封装成API库
【C++ 动态库设计】动态库中的模板函数:解决如果将模板函数封装成API库
50 0
|
2月前
|
前端开发 API 数据处理
uni-app 封装api请求
uni-app 封装api请求
16 0
|
3月前
|
缓存 监控 测试技术
ERP系统对接方案与API接口封装系列(高并发)
企业资源规划(ERP)系统是现代企业管理的核心,它集成了企业内部的各个部门和业务流程。为了实现ERP系统与其他外部系统或应用程序之间的数据交换和协作,需要对接方案。API(应用程序编程接口)是实现系统对接的常用方法之一。
|
14天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
14天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
14天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。