前言
本章主要是在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参数类型仍然是不对的,请大家注意了!!