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

  • Post author:
  • Post category:其他



前言

本章主要是在

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参数类型仍然是不对的,请大家注意了!!