您的位置:首页 > 编程语言 > C#

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

2009-02-18 13:43 465 查看
前言

本章主要是在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参数类型仍然是不对的,请大家注意了!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: