C# 视频监控系列(2):客户端——封装API (1)
正文
本章主要是贴封装好的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();
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();
本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586698,如需转载请自行联系原作者