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,如需转载请自行联系原作者

相关文章
|
5月前
|
JSON 监控 API
在线网络PING接口检测服务器连通状态免费API教程
接口盒子提供免费PING检测API,可测试域名或IP的连通性与响应速度,支持指定地域节点,适用于服务器运维和网络监控。
|
6月前
|
数据采集 Java API
深度解析:爬虫技术获取淘宝商品详情并封装为API的全流程应用
本文探讨了如何利用爬虫技术获取淘宝商品详情并封装为API。首先介绍了爬虫的核心原理与工具,包括Python的Requests、BeautifulSoup和Scrapy等库。接着通过实战案例展示了如何分析淘宝商品页面结构、编写爬虫代码以及突破反爬虫策略。随后讲解了如何使用Flask框架将数据封装为API,并部署到服务器供外部访问。最后强调了在开发过程中需遵守法律与道德规范,确保数据使用的合法性和正当性。
|
4月前
|
人工智能 API 定位技术
MCP 开发实战:手把手教你封装高德地图与 arXiv API
本教程为 MCP(Model Context Protocol)开发实战第二阶段,带你从零封装第三方 API 为 AI 模型可用工具。通过高德地图地理编码与 arXiv 论文检索两个实例,涵盖项目搭建、工具声明、资源定义、错误处理等核心内容,助你快速上手 MCP 开发并集成至 Claude 使用。
|
设计模式 开发框架 安全
C# 一分钟浅谈:GraphQL API 与 C#
本文介绍了 GraphQL API 的基本概念及其优势,并通过 C# 实现了一个简单的 GraphQL 服务。GraphQL 是一种高效的 API 查询语言,允许客户端精确请求所需数据,减少不必要的数据传输。文章详细讲解了如何使用 `GraphQL.NET` 库在 C# 中创建和配置 GraphQL 服务,并提供了常见问题的解决方案和代码示例。
313 4
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
523 7
|
9月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
9月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
645 17
|
设计模式 API C#
C# 一分钟浅谈:GraphQL 服务器端实现
本文通过C#语言从零开始构建一个简单的GraphQL服务器端实现,介绍了环境准备、项目创建、定义Schema、配置GraphQL等步骤。同时,探讨了常见问题如数据源问题、类型定义不一致、性能问题和权限控制,提供了相应的解决方法。希望帮助读者更好地理解和应用GraphQL。
166 3
|
负载均衡 数据可视化 API
像素流送api ue多人访问需要什么显卡服务器
本文总结了关于像素流送技术的五大常见问题,包括是否支持Unity模型推流、UE多人访问的最大并发数、所需服务器配置、稳定性问题及API支持情况,旨在帮助开发者更好地理解和应用这一技术。
442 1
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!

热门文章

最新文章