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

简介:

 

正文

     1.     HikServer.dll
 

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

namespace  HikServer
{

    
public   struct  PSERVER_VIDEOINFO
    {
        
///   <summary>
        
///  序列号
        
///  BYTE    m_datatype[64];
        
///   </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst  =   64 )]
        
public   byte [] m_datatype;
        
///   <summary>
        
///  系统的通道个数
        
///  BYTE    m_channum;
        
///   </summary>
         public   byte  m_channum;
        
///   <summary>
        
///  超时等待时间,1-300单位:分钟 
        
///  DWORD   m_waittime;
        
///   </summary>
         public   int  m_waittime;
        
///   <summary>
        
///  目前没有使用
        
///  DWORD   m_bufnum;
        
///   </summary>
         public   ulong  m_bufnum;
    }

    
// [StructLayout(LayoutKind.Sequential)]
    
// public struct PSERVER_VIDEOINFO
    
// {
    
//     public IntPtr m_datatype;   // 序列号  
    
//     public byte m_channum; // 系统的通道个数 
    
//     public int m_waittime; // 超时等待时间,1-300单位:分钟 
    
//     public int m_bufnum; // 目前没有使用 
    
// }

    
///   <summary>
    
///  通道数据类型
    
///   </summary>
     public   enum  ChannelDataType
    {
        NORMAL 
=   50 ,
        DIALING,
        SMALLPIC
    }

    
///   <summary>
    
///  VC++Demo:委托内调用SetIBPMode(ChannelHandle[port],211,2,2,framerat);
    
///   </summary>
    
///   <param name="port"></param>
    
///   <param name="framerat"></param>
     public   delegate   void  SetIBP( int  port,  int  framerat);

    
///   <summary>
    
///  VC++Demo:委托内调用CaptureIFrame(ChannelHandle[port]);
    
///   </summary>
    
///   <param name="port"></param>
     public   delegate   void  MakeIFrame( int  port);

    
///   <summary>
    
///  VC++Demo:委托内调用StartVideoCapture(ChannelHandle[port]);    
    
///   </summary>
    
///   <param name="nChannel"></param>
     public   delegate   void  StartCap( int  nChannel);

    
///   <summary>
    
///  VC++Demo:委托内调用StopVideoCapture(ChannelHandle[port]);
    
///   </summary>
    
///   <param name="nChannel"></param>
     public   delegate   void  StopCap( int  nChannel);

    
///   <summary>
    
///  验证用户名密码
    
///   </summary>
    
///   <param name="username"></param>
    
///   <param name="namelen"></param>
    
///   <param name="password"></param>
    
///   <param name="passlen"></param>
    
///   <returns></returns>
    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    
public   delegate   int  CheckPassword( string  username,  ushort  namelen,  string  password,  ushort  passlen);

    
///   <summary>
    
///  验证IP
    
///      VC++Demo:return 0;
    
///   </summary>
    
///   <param name="nChannel"></param>
    
///   <param name="nIP"></param>
    
///   <returns></returns>
    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    
public   delegate   int  CheckIP( int  nChannel,  string  nIP);

    
public   static   class  HikServer
    {
        
public   static   readonly   uint  WM_USER  =   0x0400 ;

        
///   <summary>
        
///  启动服务端
        
///      返回true表示成功,返回false表示失败
        
///   <code>
        
///  BOOL  __stdcall  MP4_ServerStart(PSERVER_VIDEOINFO videoinfo); 
        
///   </code>
        
///   </summary>
        
///   <param name="videoinfo"></param>
        
///   <returns></returns>
        [DllImport( " HikServer.dll " )]
        
public   static   extern   int  MP4_ServerStart( ref  PSERVER_VIDEOINFO videoinfo);

        
///   <summary>
        
///  停止服务端
        
///      返回true表示成功,返回false表示失败
        
///   <code>
        
///  BOOL  __stdcall  MP4_ServerStop(); 
        
///   </code>
        
///   </summary>
        
///   <returns></returns>
        [DllImport( " HikServer.dll " )]
        
public   static   extern   bool  MP4_ServerStop();

        
///   <summary>
        
///  获取服务器状态
        
///      返回true表示服务器已经启动,返回false表示服务器没有启动
        
///   <code>
        
///  BOOL  __stdcall  MP4_ServerGetState(WORD * clientnum); 
        
///  typedef unsigned short      WORD;
        
///   </code>
        
///   </summary>
        
///   <param name="clientnum"> 表示当前与服务器相连的客户端数据 </param>
        
///   <returns></returns>
        [DllImport( " HikServer.dll " )]
        
public   static   extern   bool  MP4_ServerGetState( out   ushort  clientnum);

        
///   <summary>
        
///  给客户端发送命令码
        
///      和函数MP4_ServerStringToClient不同,它给正连接在该通道上的所有客户端发送命令码。 
        
///      返回true表示成功,返回false表示失败 
        
///   <code>
        
///  BOOL  __stdcall  MP4_ServerCommandToClient(char cCommand,char nChannel); 
        
///   </code>
        
///   </summary>
        
///   <param name="cCommand"> 命令码 </param>
        
///   <param name="nChannel"> 通道号 </param>
        [DllImport( " HikServer.dll " )]
        
public   static   extern   void  MP4_ServerCommandToClient( int  cCommand,  int  nChannel);

        
///   <summary>
        
///  设置接收命令码的相关参数
        
///   <code>
        
///  void  __stdcall  MP4_ServerSetMessage(UINT nMessage,HWND hWnd); 
        
///   </code>
        
///   </summary>
        
///   <param name="nMessage"> 对应接收程序的消息 </param>
        
///   <param name="hWnd"> 应用程序窗口句柄 </param>
        [DllImport( " HikServer.dll " )]
        
public   static   extern   void  MP4_ServerSetMessage( uint  nMessage, IntPtr hWnd);

        
///   <summary>
        
///  设置是否进行IP验证。 
        
///      如果进行IP验证,调用该函数,那么每次客户端连接的时候,会调用CheckIP。 
        
///      如果不进行IP验证,不需要调用该函数。 
        
///      如果调用了MP4_ServerCheckIP之后,又想取消IP验证,只需要调用MP4_ServerCheckIP(NULL)。 
        
///   <code>
        
///  void  __stdcall MP4_ServerCheckIP(int(CALLBACK *CheckIP)(DWORD nChannel,char* nIP)); 
        
///  CheckIP函数说明:nChannel表示通道号,nIP表示客户端的IP地址。返回0表示验证通过,返回-1 
        
///  表示验证没有通过。 
        
///   </code>
        
///   </summary>
        [DllImport( " HikServer.dll " )]
        
public   static   extern   void  MP4_ServerCheckIP(CheckIP cip);

        
///   <summary>
        
///  设置是否进行用户身份验证。 
        
///      使用同MP4_ServerCheckIP。 
        
///      目前namelen和password两个值无效,都是50,并不表示用户名和密码的实际长度。用户名和密码必须小于50个字节。 
        
///  说明: 
        
///      1>因为开发包对用户名和密码不做任何处理,只是简单地分别发送50字节的数据到服务端,所以在验证
        
///        的实现过程中,用户可以通过设置标志位的方法来确定用户名和密码的实际长度。 
        
///      2>也可以同时进行IP验证和用户身份验证。在开发包中先进行用户身份验证,再进行IP验证。 
        
///   <code>
        
///  7. void  __stdcall  MP4_ServerCheckPassword(int(CALLBACK *CheckPassword)(char *username,WORD namelen,char *password,WORD passlen)); 
        
///  CheckPassword函数说明:username表示用户名,namelen表示用户名字符串长度,password表示密码,passlen表示密码字符串长度。
        
///   </code>
        
///   </summary>
        
///   <param name="nMessage"></param>
        
///   <param name="hWnd"></param>
        [DllImport( " HikServer.dll " )]
        
public   static   extern   void  MP4_ServerCheckPassword(CheckPassword cp);

        
///   <summary>
        
///  往发送缓存写数据。 
        
///      网络开发包通过这个接口获得板卡的数据。 
        
///  说明: 
        
///      现在开发包内部不会直接调用StartVideoCapture和StopVideoCapture函数,而是通过StartCap和StopCap
        
///      来启动和停止捕获数据。如果用户调用StopVideoCapture或者停止调用MP4_ServerWriteData都会使客户
        
///      端无法收到数据。
        
///   <code>
        
///  8. void  __stdcall  MP4_ServerWriteData(DWORD nChannel,UCHAR *pPacketBuffer, DWORD  nPacketSize, int frameType, int breakable); 
        
///  typedef unsigned long       DWORD;
        
///  typedef unsigned char UCHAR;
        
///   </code>
        
///   </summary>
        
///   <param name="nChannel"> 通道号。 </param>
        
///   <param name="pPacketBuffer"> 缓冲区指针。 </param>
        
///   <param name="nPacketSize"> 缓冲区长度。  </param>
        
///   <param name="frameType"> 帧类型。 </param>
        
///   <param name="breakable"> ReadStreamData的返回值 </param>
        [DllImport( " HikServer.dll " )]
        
public   static   extern   void  MP4_ServerWriteData( ulong  nChannel,  string  pPacketBuffer,  ulong  nPacketSize,  int  frameType,  int  breakable);


本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586668,如需转载请自行联系原作者
相关文章
|
24天前
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
|
27天前
|
缓存 测试技术 API
从零到一:构建高效的 RESTful API 服务器
在当今的软件开发环境中,RESTful API 是实现系统间数据交互的关键组件。本文探讨了如何从头开始构建一个高效的 RESTful API 服务器,包括技术选型、架构设计、性能优化等方面的内容。我们将以 Python 的 Flask 框架为例,展示如何设计一个可扩展且高性能的 API 服务器,并提供实际代码示例来说明最佳实践。
|
7天前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
29 0
|
2月前
|
开发框架 缓存 NoSQL
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
|
2月前
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
|
2月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
|
23天前
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
|
2月前
|
开发框架 JSON 前端开发
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
|
23天前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
5天前
|
存储 弹性计算 运维
阿里云日常运维-购买服务器
这篇文章是关于如何在阿里云购买和配置云服务器ECS的教程。
25 6
阿里云日常运维-购买服务器
下一篇
DDNS