C# 视频监控系列(2):客户端——封装API

简介:

前言

     本章主要是在C#封装的海康DVR客户端SDK 的代码上修改的,并参考《Hikvision 板卡网络开发包编程手册V4.7.pdf》补上更完整的注释,并且参照VC++源码做了小部分修改。

 

参考

     1.     C#封装的海康DVR客户端SDK

 

系列

     1.     C# 视频监控系列(1):准备

     2.     C# 视频监控系列(2):客户端——封装API

 

注意

     本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心、实现以及其他能够贴出来的代码我都会贴出来,并且争取尽所能的回答评论里的每一个问题,感谢大家关注,欢迎交流 :)

 

正文

     本章主要是贴封装好的API调用代码,所以直接就贴代码了。

 

     代码说明:

          1.     C#调用VC++写好的DLL在这里就不介绍了,重点和难点在于参数数据类型对应,下一章将有所总结。

          2.     注释比较详尽,注释里summary节点里有函数的VC++原型。

 

复制代码
using  System;
using  System.Runtime.InteropServices;

namespace  HikClient
{
    
#region  struct

    
///   <summary>
    
///  客户端的参数结构
    
///  说明:如果将m_bUserCheck置为FALSE,则把用户名和密码作为空指针发送到服务器。虽然用户名和密
    
///  码的内容不能超过50字节,但是用户名和密码缓冲区长度必须大于等于50,因为内部操作的时候直接从
    
///  用户名或密码缓冲区拷贝50字节到发送缓冲区里。 
    
///   </summary>
     public   struct  CLIENT_VIDEOINFO
    {
        
///   <summary>
        
///  对应服务端的的通道号
        
///   </summary>
         public   byte  m_bRemoteChannel;
        
///   <summary>
        
///  网络连接方式
        
///   </summary>
         public   byte  m_bSendMode;
        
///   <summary>
        
///  图像格式,0为服务端主通道的图像 ;1为服务端子通道的图像
        
///   </summary>
         public   byte  m_nImgFormat;
        
///   <summary>
        
///  服务端的IP地址
        
///   </summary>
         public   string  m_sIPAddress;
        
///   <summary>
        
///  用户名 
        
///   </summary>
         public   string  m_sUserName;
        
///   <summary>
        
///  密码 
        
///   </summary>
         public   string  m_sUserPassword;
        
///   <summary>
        
///  是否需要发送用户名和密码
        
///   </summary>
         public   bool  m_bUserCheck;
        
///   <summary>
        
///  显示区域
        
///   </summary>
         public  System.IntPtr m_hShowVideo;
    }

    
#endregion

    
#region  enum

    
///   <summary>
    
///  网络连接方式
    
///   </summary>
     public   enum  SEND_MODE
    {
        
///   <summary>
        
///  UDP方式
        
///   </summary>
        UDPMODE  =   0 ,
        
///   <summary>
        
///  TCP方式
        
///   </summary>
        TCPMODE,
        
///   <summary>
        
///  多播方式
        
///   </summary>
        MULTIMODE,
        
///   <summary>
        
///  电话线方式
        
///   </summary>
        DIALING,
        
///   <summary>
        
///  音频流畅模式
        
///   </summary>
        AUDIODETACH
    };

    
///   <summary>
    
///  显示模式
    
///   </summary>
     public   enum  DISP_MODE
    {
        
///   <summary>
        
///  可以同时显示多个窗口,但对显卡有一定要求
        
///   </summary>
        NORMALMODE  =   0 ,
        
///   <summary>
        
///  只能同时显示一个窗口,但是对显卡没有什么要求
        
///   </summary>
        OVERLAYMODE
    };

    
#endregion

    
#region  delegate

    
///   <summary>
    
///  读实时数据回调。用于读取数据流。如果ReadDataCallBack为null,表示不需要读取数据流
    
///  
    
///  Void(CALLBACK*ReadDataCallBack)(DWORD nChannel,UCHAR *pPacketBuffer,DWORD nPacketSize)); 
    
///   </summary>
    
///   <param name="nChannel"> 表示通道号 </param>
    
///   <param name="pPacketBuffer"> 数据缓存指针 </param>
    
///   <param name="nPacketSize"> 数据个数 </param>
     public   delegate   void  ReadDataCallBack( ulong  nChannel, [MarshalAs(UnmanagedType.LPArray)]  byte [] pPacketBuffer,  ulong  nPacketSize);

    
///   <summary>
    
///  捕图回调
    
///  
    
///  void (CALLBACK* CapPicFun)(long StockHandle, char * pBuf, long nSize, long nWidth, long nHeight, long nStamp, long nType, long nReceaved)
    
///   </summary>
    
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
    
///   <param name="pBuf"> 返回图像数据 </param>
    
///   <param name="nSize"> 返回图像数据大小 </param>
    
///   <param name="nWidth"> 画面宽,单位像素 </param>
    
///   <param name="nHeight"> 画面高 </param>
    
///   <param name="nStamp"> 时标信息,单位毫秒 </param>
    
///   <param name="nType"> 数据类型, T_RGB32,T_UYVY详见宏定义说明。 </param>
    
///   <param name="nReceaved"> 保留 </param>
     public   delegate   void  CapPicFun( int  StockHandle, IntPtr pBuf,  int  nSize,  int  nWidth,  int  nHeight,  int  nStamp,  int  nType,  int  nReceaved);

    
///   <summary>
    
///  画
    
///   </summary>
     public   delegate   void  DrawFun( int  StockHandle, System.Drawing.Graphics hDc,  int  nUser);


    
#endregion

    
///   <summary>
    
///  hikclient.dll   HikClient
    
///   </summary>
     public   class  PcHikClient
    {

        
public   static   readonly   uint  WM_USER  =   0x0400 ;

        
#region  客户端函数

        
///   <summary>
        
///  对客户端初始化
        
///      注:在调用所有其他客户端函数之前调用。
        
///  
        
///  1.  BOOL  __stdcall MP4_ClientStartup(UINT nMessage,HWND hWnd);
        
///   </summary>
        
///   <param name="nMessage"> 表示对应接收程序的消息。 </param>
        
///   <param name="hWnd"> 表示应用程序窗口句柄。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientStartup( uint  nMessage, IntPtr hWnd);

        
///   <summary>
        
///  结束调用客户端函数。
        
///      注:调用MP4_ClientCleanup()后不能再调用其他客户端函数。
        
///  
        
///  2.  BOOL  __stdcall MP4_ClientCleanup();
        
///   </summary>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientCleanup();

        
///   <summary>
        
///  启动客户端
        
///      注 :MP4_ClientStart返回成功,并不表示已经成功连接服务端。您需要通过MP4_ClientGetState函数 
        
///      去获得网络连接的状态 
        
///  
        
///  3.  LONG __stdcall MP4_ClientStart(PCLIENT_VIDEOINFO pClientinfo, Void(CALLBACK*ReadDataCallBack)(DWORD nChannel,UCHAR *pPacketBuffer,DWORD nPacketSize));
        
///   </summary>
        
///   <param name="pClientinfo"></param>
        
///   <param name="rdcb"> 用来读取数据流。如果ReadDataCallBack为NULL,表示不需要读取数据流。  </param>
        
///   <returns> 返回-1表示失败,其他值表示成功。作为后续操作的参数。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   int  MP4_ClientStart( ref  CLIENT_VIDEOINFO pClientinfo, ReadDataCallBack rdcb);

        
///   <summary>
        
///  停止客户端。
        
///  
        
///  4.  BOOL  __stdcall MP4_ClientStop(LONG StockHandle); 
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientStop( long  StockHandle);

        
///   <summary>
        
///  获取客户端状态
        
///      -1  :   无效
        
///      1   :   连接
        
///      2   :   开始接收图像
        
///      3   :   异常退出
        
///      4   :   接收完毕,退出
        
///      5   :   无法联系服务器
        
///      6   :   服务器拒绝访问
        
///  
        
///  5.LONG  __stdcall MP4_ClientGetState(LONG StockHandle);
        
///   </summary>
        
///   <param name="StockHandle"> 成功返回的值 </param>
        
///   <returns></returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   int  MP4_ClientGetState( long  StockHandle);

        
///   <summary>
        
///  开始客户端的数据捕获(回调方式,使用MP4_ClientStart中的ReadDataCallBack函数)。
        
///  
        
///  6.BOOL __stdcall MP4_ClientStartCapture(LONG StockHandle);
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientStartCapture( long  StockHandle);

        
///   <summary>
        
///  开始客户端的数据捕获(直接写文件方式)。
        
///  
        
///  7.BOOL  __stdcall MP4_ClientStartCaptureFile(LONG StockHandle, LPTSTR FileName);
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="FileName"> 文件名。  </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientStartCaptureFile( int  StockHandle,  string  FileName);

        
///   <summary>
        
///  停止客户端的数据捕获。
        
///      对MP4_ClientStartCapture和MP4_ClientStartCaptureFile都有效。 
        
///  
        
///  8.BOOL __stdcall MP4_ClientStopCapture(LONG StockHandle); 
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientStopCapture( int  StockHandle);
        
        
///   <summary>
        
///  获取服务端的通道数。
        
///  
        
///  9.WORD  __stdcall MP4_ClientGetServerChanNum(LPCTSTR m_sIPAddress);
        
///   </summary>
        
///   <param name="m_sIPAddress"> 服务端的IP地址。 </param>
        
///   <returns> 返回0表示失败,其他值表示通道数。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   ushort  MP4_ClientGetServerChanNum( string  m_sIPAddress);

        
///   <summary>
        
///  给服务器发送字符串
        
///  
        
///  10.BOOL  __stdcall MP4_ClientCommandtoServer(LPCTSTR m_lAddrIP, char *m_sCommand,WORD m_wLen)
        
///   </summary>
        
///   <param name="m_lAddrIP"> 服务器IP地址 </param>
        
///   <param name="m_sCommand"> 消息缓冲指针 </param>
        
///   <param name="m_wLen"> 消息缓冲长度,必须小于900个字节 </param>
        
///   <returns> 返回0表示失败,其他值表示通道数。  </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientCommandtoServer( string  m_lAddrIP,  string  m_sCommand,  ushort  m_wLen);

        
///   <summary>
        
///  对服务端的nChannel通道网络连接初始化,结束当前所有用户对它的访问。
        
///  
        
///  11.BOOL  __stdcall MP4_ClientShut(LPCTSTR m_lAddrIP,char nChannel);
        
///   </summary>
        
///   <param name="m_lAddrIP"> 表示服务端的IP地址。 </param>
        
///   <param name="cChannel"> 表示服务端通道号。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。  </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientShut( string  m_lAddrIP,  char  cChannel);

        
///   <summary>
        
///  读取服务端消息。
        
///      读取服务端MP4_ServerStringToClient函数发送过来的消息。(不超过900字节)
        
///  
        
///  12.  void  __stdcall MP4_ClientReadLastMessage(char * m_sIP ,char *m_sCommand,WORD *m_wLen); 
        
///   </summary>
        
///   <param name="m_sIP"> 消息来自哪个IP地址。 </param>
        
///   <param name="m_sCommand"> 消息缓冲区指针。  </param>
        
///   <param name="m_wLen"> 消息缓冲区长度。 </param>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   void  MP4_ClientReadLastMessage( string  m_sIP,  out   string  m_sCommand,  out   ushort  m_wLen);

        
///   <summary>
        
///  设置当前播放器音量。
        
///  
        
///  13.BOOL  __stdcall MP4_ClientAudioVolume(WORD wVolume); 
        
///   </summary>
        
///   <param name="wVolume"> 音量值(0-0xffff)  </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientAudioVolume( ushort  wVolume);

        
///   <summary>
        
///  选定某个播放器播放声音,其他播放器静止。
        
///  
        
///  14.  BOOL  __stdcall MP4_ClientAudioStart(LONG StockHandle);
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientAudioStart( long  StockHandle);

        
///   <summary>
        
///  停止播放声音
        
///  
        
///  15.  BOOL  __stdcall MP4_ClientAudioStop();
        
///   </summary>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。  </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientAudioStop();

        
///   <summary>
        
///  功能同MP4_ClientCommandtoServer,只是第一个参数使用了MP4_ClientStart成功返回的值。
        
///  
        
///  16. BOOL __stdcall MP4_ClientCommandtoServer_Handle(LONG StockHandle,char *m_sCommand, WORD m_wLen); 
        
///   </summary>
        
///   <param name="StockHandle"></param>
        
///   <param name="m_sCommand"></param>
        
///   <param name="m_wLen"></param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientCommandtoServer_Handle( int  StockHandle,  out   string  m_sCommand,  ushort  m_wLen);

        
///   <summary>
        
///  系统是否支持网络播放器(在显示模式设为NORMALMODE的情况下)。
        
///  
        
///  17.int   __stdcall MP4_ClientIsSupport(); 
        
///   </summary>
        
///   <returns> 返回值的低8位每位表示一个信息。每一位的定义如上所示,0表示不支持,1表示支持。 
        
///  如果SUPPORT_DDRAW、SUPPORT_BLT、SUPPORT_CPU其中有一个为0,表示播放器根本无法播放; 
        
///  如果SUPPORT_BLTFOUR、SUPPORT_BLTSHRINKX、SUPPORT_BLTSHRINKY、 
        
///  SUPPORT_BLTSTRETCHX、SUPPORT_BLTSTRETCHY其中有一个为0,表示播放器虽然能够播放,但
        
///  是效率很低,有可能因为CPU利用率太高而无法显示。 
        
///  播放器必须在增强色(16位),或者真彩色(32位)模式下运行。如果出现SUPPORT_BLTFOURCC、 
        
///  SUPPORT_BLTSHRINKX、SUPPORT_BLTSHRINKY、SUPPORT_BLTSTRETCHX、 
        
///  SUPPORT_BLTSTRETCHY其中有一个为0,会采用软件显示方式,这时候必须在真彩色(32位)模式下才
        
///  能运行。 
        
///   </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   int  MP4_ClientIsSupport();

        
///   <summary>
        
///  增加接收缓冲区大小。
        
///      说明:WBufNum值每增加1,表示接收缓冲区增加1帧的数据量。如果以5帧/秒的帧率播放,那么WbufNum=5,表示增加了5帧的缓冲区。 
        
///  
        
///  18.  BOOL  __stdcall MP4_ClientSetBufferNum(LONG StockHandle,WORD wBufNum);
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="wBufNum"> 增加缓冲区个数,0-50。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSetBufferNum( long  StockHandle,  ushort  wBufNum);

        
///   <summary>
        
///  设置服务端的网络端口号和客户端的网络端口号。同MP4_ServerSetNetPort
        
///  
        
///  19.  BOOL  __stdcall MP4_ClientSetNetPort(WORD dServerPort,WORD dClientPort); 
        
///   </summary>
        
///   <param name="dServerPort"> 服务端的起始网络端口号。 </param>
        
///   <param name="dClientPort"> 客户端的网络端口号。 </param>
        
///   <returns></returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSetNetPort( ushort  dServerPort,  ushort  dClientPort);

        
///   <summary>
        
///  设置多播的TTL参数。
        
///  
        
///  20.  BOOL     __stdcall MP4_ClientSetTTL(unsigned char cTTLVal);
        
///   </summary>
        
///   <param name="cTTLVal"> TTL值。1-255,默认32。  </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSetTTL( char  cTTLVal);

        
///   <summary>
        
///  接收多少数据后才开始播放。 
        
///  
        
///  21.  BOOL  __stdcall MP4_ClientSetPlayDelay(LONG StockHandle,WORD DelayLen); 
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="DelayLen"> 预先接收的数据量。单位:K。范围:0-600 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSetPlayDelay( long  StockHandle,  ushort  DelayLen);

        
///   <summary>
        
///  设置连接服务端的等待时间和尝试次数。参数说明同MP4_ServerSetWait。
        
///  
        
///  22.  BOOL  __stdcall MP4_ClientSetWait(DWORD dEachWaitTime,DWORD dTrynum);
        
///   </summary>
        
///   <param name="dEachWaitTime"></param>
        
///   <param name="dTrynum"></param>
        
///   <returns></returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSetWait( ulong  dEachWaitTime,  ulong  dTrynum);

        
///   <summary>
        
///  设置播放器的显示模式。
        
///  
        
///  23.  BOOL  __stdcall MP4_ClientSetShowMode(DWORD dShowType,COLORREF colorKey);
        
///   </summary>
        
///   <param name="dShowType"> 显示模式。NORMALMODE或者OVERLAYMODE。 </param>
        
///   <param name="colorKey"> 用户设置的透明色,透明色相当于一层透视膜,显示的画面只能穿过这种颜色,而其他的颜色
        
///  将挡住显示的画面。用户应该在显示窗口中涂上这种颜色,那样才能看到显示画面。一般应该使用一种不
        
///  常用的颜色作为透明色。这是一个双字节值0x00rrggbb,最高字节为0,后三个字节分别表示r,g,b的值。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
// public static extern bool MP4_ClientSetShowMode(UInt32 dShowType, System.Drawing.Color colorKey);
         public   static   extern   bool  MP4_ClientSetShowMode( ulong  dShowType,  int  colorKey);

        
///   <summary>
        
///  设置图象质量。
        
///      说明:设置图像质量,当设置成高质量时画面效果好,但CPU利用率高。在支持多路播放时,可以设为
        
///      低质量(LOWQUALITY),以降低CPU利用率;当某路放大播放时将该路设置成高质量(HIGHQUALITY),
        
///      以达到好的画面效果。 
        
///  
        
///  24.  BOOL  __stdcall MP4_ClientSetQuality(LONG StockHandle,WORD wPicQuality);
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="wPicQuality"> 图象质量。LOWQUALITY表示低图象质量,HIGHQUALITY表示高图象质量。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSetQuality( long  StockHandle,  ushort  wPicQuality);

        
///   <summary>
        
///  设置抓图回调函数。
        
///      注意要尽快返回,如果要停止回调,可以把回调函数指针CapPicFun设为NULL。一旦设置回调函数,则
        
///      一直有效,直到程序退出。
        
///  
        
///  25.  BOOL __stdcall MP4_ClientSetCapPicCallBack(LONG StockHandle,  void (CALLBACK* CapPicFun)(long StockHandle, char * pBuf, long nSize, long nWidth, long nHeight, long nStamp, long nType, long nReceaved)); 
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="x"></param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSetCapPicCallBack( int  StockHandle, CapPicFun x);

        
///   <summary>
        
///  将抓图得到的图像数据保存成BMP文件。
        
///      保存函数需要占用的较多cpu资源,如果不需要保存图片,则不要调用。
        
///  
        
///  26.BOOL __stdcall  MP4_ClientSavePicFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName); 
        
///   </summary>
        
///   <param name="pBuf"> 返回图像数据 </param>
        
///   <param name="nSize"> 返回图像数据大小 </param>
        
///   <param name="nWidth"> 画面宽,单位像素 </param>
        
///   <param name="nHeight"> 画面高 </param>
        
///   <param name="nType"> 数据类型, T_RGB32,T_UYVY详见宏定义说明。 </param>
        
///   <param name="sFileName"> 要保存的文件名 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSavePicFile(IntPtr pBuf,  int  nSize,  int  nWidth,  int  nHeight,  int  nType,  string  sFileName);


        
///   <summary>
        
///  设置解码时丢弃B帧的个数。
        
///      说明: 丢弃的B帧个数越多,CPU利用率越低,动画感越明显。
        
///  
        
///  27.BOOL  __stdcall MP4_ClientThrowBFrame(LONG StockHandle,DWORD dNum);
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。  </param>
        
///   <param name="dNum"> 丢弃的帧个数。(0,1,2) </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。  </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientThrowBFrame( long  StockHandle,  ulong  dNum);

        
///   <summary>
        
///  获取已经解码的总帧数。 
        
///  
        
///  28. DWORD  __stdcall MP4_ClientGetFrameNum(LONG StockHandle); 
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <returns> 返回帧数值。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   ulong  MP4_ClientGetFrameNum( int  StockHandle);

        
///   <summary>
        
///  获取版本号。
        
///  
        
///  29.DWORD  __stdcall  MP4_ClientGetSdkVersion() 
        
///   </summary>
        
///   <returns></returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   uint  MP4_ClientGetSdkVersion();

        
///   <summary>
        
///  30.设置播放声音的模式。
        
///      1> SINGLEAUDIO模式下只能调用 MP4_ClientAudioStart和MP4_ClientAudioStop。 
        
///      2> MULTIAUDIO模式下只能调用 MP4_ClientAudioStartShare和MP4_ClientAudioStopShare。 
        
///      3>两种模式下都可以调用MP4_ClientAudioVolume。 
        
///      4>在客户端软件运行过程中,用户可以在关闭所有播放器的声音之后,可以调用该函数修改播放模式。但
        
///      是建议用户最好在客户端软件初始化的时候设置一次播放模式,之后不再修改。 
        
///  
        
///  30.BOOL  __stdcall MP4_ClientAudioMode(WORD wMode) 
        
///   </summary>
        
///   <param name="wMode"> 有两个选项。默认使用SINGLEAUDIO。
        
///  SINGLEAUDIO:开发包原来的模式。在一个客户端软件中,同时最多只有一个播放器可以播放声音;
        
///  MULTIAUDIO:新增加的模式。在一个客户端软件中,同时可以有多个播放器播放声音。 
        
///   </param>
        
///   <returns></returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientAudioMode( ushort  wMode);

        
///   <summary>
        
///  开始播放某一路声音。MULTIAUDIO模式下使用。
        
///  
        
///  31. BOOL  __stdcall MP4_ClientAudioStartShare(LONG StockHandle)
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientAudioStartShare( long  StockHandle);

        
///   <summary>
        
///  停止播放声音。MULTIAUDIO模式下使用。
        
///  
        
///  32. BOOL  __stdcall MP4_ClientAudioStopShare(LONG StockHandle) 
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientAudioStopShare( long  StockHandle);

        
///   <summary>
        
///  设置多播组地址和网络端口号。 
        
///  说明: 
        
///      1>目前的多播组采用了两种方式:一是开发包内部分配,用户不需要考虑多播组参数细节,默认采用这种
        
///      方式;另一种是调用MP4_ClientCastGroup设置多播组参数。 
        
///      2>该函数在MP4_ClientStart或MP4_ClientStart_Card之后调用。 
        
///      3>每个多播组会占用wPort开始的4个端口。 
        
///  
        
///  33.BOOL  __stdcall MP4_ClientCastGroup(LONG StockHandle,char *sIP,WORD wPort)
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="sIP"> 多播组地址。 </param>
        
///   <param name="wPort"> 多播组网络端口号。  </param>
        
///   <returns></returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientCastGroup( long  StockHandle,  out   string  sIP,  ushort  wPort);

        
///   <summary>
        
///  设置叠加字幕的回调函数。
        
///  
        
///  34. BOOL  __stdcall  MP4_ClientRigisterDrawFun(LONG StockHandle, void (CALLBACK* DrawFun)(LONG StockHandle,HDC hDc,LONG nUser),LONG nUser).
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="x"> DC句柄。 </param>
        
///   <param name="nUser"> 保留。设置成NULL。 </param>
        
///   <returns></returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientRigisterDrawFun( long  StockHandle, DrawFun x,  long  nUser);

        
///   <summary>
        
///  清除数据缓冲区。包括客户端和服务端
        
///  
        
///  35.BOOL __stdcall MP4_ClientCleanBuffer(LONG nPort,int nCleanType)
        
///   </summary>
        
///   <param name="nPort"> MP4_ClientStart的返回值。  </param>
        
///   <param name="nCleanType">
        
///  清除类型。 nCleanType为0只清除客户端缓冲区,nCleanType为1只清除服务端缓冲区,
        
///  nCleanType为2清除客户端/服务端缓冲区。 
        
///   </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientCleanBuffer( long  nPort,  int  nCleanType);

        
///   <summary>
        
///  设置视频参数。
        
///  
        
///  36.BOOL  MP4_ClientSetVideoPara(LONG StockHandle,DWORD nRegionNum, int nBrightness, int nContrast, int nSaturation, int nHue) 
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="nRegionNum"> 暂时不用,设置成0。 </param>
        
///   <param name="nBrightness"> 亮度,默认64; 范围0-128; </param>
        
///   <param name="nContrast"> 对比度,默认64; 范围0-128; </param>
        
///   <param name="nSaturation"> 饱和度,默认64; 范围0-128; </param>
        
///   <param name="nHue"> 色调,默认64; 范围0-128; </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。  </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientSetVideoPara( long  StockHandle,  ulong  nRegionNum,  int  nBrightness,  int  nContrast,  int  nSaturation,  int  nHue);

        
///   <summary>
        
///  获取视频参数。
        
///  
        
///  37.BOOL  MP4_ClientGetVideoPara(LONG StockHandle,DWORD nRegionNum, int *pBrightness, int *pContrast, int *pSaturation, int *pHue) 
        
///   </summary>
        
///   <param name="StockHandle"> MP4_ClientStart成功返回的值。 </param>
        
///   <param name="nRegionNum"> 暂时不用,设置成0。  </param>
        
///   <param name="pBrightness"> 亮度,默认64; 范围0-128; </param>
        
///   <param name="pContrast"> 对比度,默认64; 范围0-128; </param>
        
///   <param name="pSaturation"> 饱和度,默认64; 范围0-128; </param>
        
///   <param name="pHue"> 色调,默认64; 范围0-128; </param>
        
///   <returns> 返回TRUE表示成功,返回FALSE表示失败。 </returns>
        [DllImport( " hikclient.dll " )]
        
public   static   extern   bool  MP4_ClientGetVideoPara( long  StockHandle,  ulong  nRegionNum,  out   int  pBrightness,  out   int  pContrast,  out   int  pSaturation,  out   int  pHue);

        
#endregion
    }
}
复制代码

 

修改记录

          1.     2009-2-27,截图函数有问题

               1.1     委托CapPicFun的参数pBuf数据类型改为IntPtr

                    改前代码:public delegate void CapPicFun(int StockHandle, [MarshalAs(UnmanagedType.LPArray, SizeConst = 152064)] byte[] pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReceaved);

                    改后代码:public delegate void CapPicFun(int StockHandle, IntPtr pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReceaved);

               1.2     截图函数参数

                    改前代码:public static extern bool MP4_ClientSavePicFile([MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int nSize, int nWidth, int nHeight, int nType,

string sFileName);

                    改后代码:public static extern bool MP4_ClientSavePicFile(IntPtr pBuf, int nSize, int nWidth, int nHeight, int nType, string sFileName);

          2.     2009-3-4,客户端的数据捕获(录像)

               2.1     开始录像

                    改前代码:public static extern bool MP4_ClientStartCaptureFile(long StockHandle, string FileName);

                    改后代码:public static extern bool MP4_ClientStartCaptureFile(int StockHandle, string FileName);

               2.2     停止录像

                    改前代码:public static extern bool MP4_ClientStopCapture(long StockHandle);

                    改后代码:public static extern bool MP4_ClientStopCapture(int StockHandle);


结束

     我的客户端主要实现的功能是播放视频和音频,有些API都没有用到,我估计有些API参数类型仍然是不对的,请大家注意了!!



转载:http://www.cnblogs.com/over140/archive/2009/02/18/1390890.html

目录
相关文章
|
19天前
|
前端开发 JavaScript API
基于React的简易REST API客户端设计与实现
基于React的简易REST API客户端设计与实现
17 3
|
6月前
|
存储 网络协议 Java
UDP,TCP特点对比,DatagramPacket,SocketAddress的使用 ,UDP的API,如何编写一个简单的回显服务器及客户端,详细解释(本文内容较难,建议多次阅读,自己敲一敲)
UDP,TCP特点对比,DatagramPacket,SocketAddress的使用 ,UDP的API,如何编写一个简单的回显服务器及客户端,详细解释(本文内容较难,建议多次阅读,自己敲一敲)
|
3月前
|
JSON Java API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
86 0
|
4月前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
22 0
|
4月前
|
Java API
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
74 0
|
4月前
|
存储 Java API
ZooKeeper【客户端的API操作、写数据流程】
ZooKeeper【客户端的API操作、写数据流程】
|
5月前
|
Java API
Java 11中引入的HTTP客户端API是什么?如何使用它进行HTTP请求?
Java 11中引入的HTTP客户端API是什么?如何使用它进行HTTP请求?
|
缓存 API
|
7天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
14天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。

热门文章

最新文章