网站备案 快递,公司变更流程,外贸网站建设昆明,石家庄个人建站模板前言 本章主要是在C#封装的海康DVR客户端SDK 的代码上修改的#xff0c;并参考《Hikvision 板卡网络开发包编程手册V4.7.pdf》补上更完整的注释#xff0c;并且参照VC源码做了小部分修改。 参考 1. C#封装的海康DVR客户端SDK 系列 1. C# 视频监控系列#xff08;1并参考《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 namenChannel表示通道号/param /// param namepPacketBuffer数据缓存指针/param /// param namenPacketSize数据个数/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 nameStockHandleMP4_ClientStart成功返回的值。/param /// param namepBuf返回图像数据/param /// param namenSize返回图像数据大小/param /// param namenWidth画面宽单位像素/param /// param namenHeight画面高/param /// param namenStamp时标信息单位毫秒/param /// param namenType数据类型 T_RGB32T_UYVY详见宏定义说明。/param /// param namenReceaved保留/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 namenMessage表示对应接收程序的消息。/param /// param namehWnd表示应用程序窗口句柄。/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 namepClientinfo/param /// param namerdcb用来读取数据流。如果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 nameStockHandleMP4_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 : 服务器拒绝访问 /// /// 5LONG __stdcall MP4_ClientGetState(LONG StockHandle) /// /summary /// param nameStockHandle成功返回的值/param /// returns/returns [DllImport(hikclient.dll)] public static extern int MP4_ClientGetState(long StockHandle); /// summary /// 开始客户端的数据捕获(回调方式使用MP4_ClientStart中的ReadDataCallBack函数)。 /// /// 6BOOL __stdcall MP4_ClientStartCapture(LONG StockHandle); /// /summary /// param nameStockHandleMP4_ClientStart成功返回的值。/param /// returns返回TRUE表示成功返回FALSE表示失败。/returns [DllImport(hikclient.dll)] public static extern bool MP4_ClientStartCapture(long StockHandle); /// summary /// 开始客户端的数据捕获(直接写文件方式)。 /// /// 7BOOL __stdcall MP4_ClientStartCaptureFile(LONG StockHandle, LPTSTR FileName); /// /summary /// param nameStockHandleMP4_ClientStart成功返回的值。/param /// param nameFileName文件名。 /param /// returns返回TRUE表示成功返回FALSE表示失败。/returns [DllImport(hikclient.dll)] public static extern bool MP4_ClientStartCaptureFile(int StockHandle, string FileName); /// summary /// 停止客户端的数据捕获。 /// 对MP4_ClientStartCapture和MP4_ClientStartCaptureFile都有效。 /// /// 8BOOL __stdcall MP4_ClientStopCapture(LONG StockHandle); /// /summary /// param nameStockHandleMP4_ClientStart成功返回的值。/param /// returns返回TRUE表示成功返回FALSE表示失败。/returns [DllImport(hikclient.dll)] public static extern bool MP4_ClientStopCapture(int StockHandle); /// summary /// 获取服务端的通道数。 /// /// 9WORD __stdcall MP4_ClientGetServerChanNum(LPCTSTR m_sIPAddress); /// /summary /// param namem_sIPAddress服务端的IP地址。/param /// returns返回0表示失败其他值表示通道数。/returns [DllImport(hikclient.dll)] public static extern ushort MP4_ClientGetServerChanNum(string m_sIPAddress); /// summary /// 给服务器发送字符串 /// /// 10BOOL __stdcall MP4_ClientCommandtoServer(LPCTSTR m_lAddrIP, char *m_sCommand,WORD m_wLen) /// /summary /// param namem_lAddrIP服务器IP地址/param /// param namem_sCommand消息缓冲指针/param /// param namem_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通道网络连接初始化结束当前所有用户对它的访问。 /// /// 11BOOL __stdcall MP4_ClientShut(LPCTSTR m_lAddrIP,char nChannel); /// /summary /// param namem_lAddrIP表示服务端的IP地址。/param /// param namecChannel表示服务端通道号。/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 namem_sIP消息来自哪个IP地址。/param /// param namem_sCommand消息缓冲区指针。 /param /// param namem_wLen消息缓冲区长度。/param [DllImport(hikclient.dll)] public static extern void MP4_ClientReadLastMessage(string m_sIP, out string m_sCommand, out ushort m_wLen); /// summary /// 设置当前播放器音量。 /// /// 13BOOL __stdcall MP4_ClientAudioVolume(WORD wVolume); /// /summary /// param namewVolume音量值(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 nameStockHandleMP4_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 nameStockHandle/param /// param namem_sCommand/param /// param namem_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的情况下)。 /// /// 17int __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帧/秒的帧率播放那么WbufNum5表示增加了5帧的缓冲区。 /// /// 18. BOOL __stdcall MP4_ClientSetBufferNum(LONG StockHandle,WORD wBufNum); /// /summary /// param nameStockHandleMP4_ClientStart成功返回的值。/param /// param namewBufNum增加缓冲区个数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 namedServerPort服务端的起始网络端口号。/param /// param namedClientPort客户端的网络端口号。/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 namecTTLValTTL值。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 nameStockHandleMP4_ClientStart成功返回的值。/param /// param nameDelayLen预先接收的数据量。单位: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 namedEachWaitTime/param /// param namedTrynum/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 namedShowType显示模式。NORMALMODE或者OVERLAYMODE。/param /// param namecolorKey用户设置的透明色透明色相当于一层透视膜显示的画面只能穿过这种颜色而其他的颜色 /// 将挡住显示的画面。用户应该在显示窗口中涂上这种颜色那样才能看到显示画面。一般应该使用一种不 /// 常用的颜色作为透明色。这是一个双字节值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 nameStockHandleMP4_ClientStart成功返回的值。/param /// param namewPicQuality图象质量。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 nameStockHandleMP4_ClientStart成功返回的值。/param /// param namex/param /// returns返回TRUE表示成功返回FALSE表示失败。/returns [DllImport(hikclient.dll)] public static extern bool MP4_ClientSetCapPicCallBack(int StockHandle, CapPicFun x); /// summary /// 将抓图得到的图像数据保存成BMP文件。 /// 保存函数需要占用的较多cpu资源如果不需要保存图片则不要调用。 /// /// 26BOOL __stdcall MP4_ClientSavePicFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName); /// /summary /// param namepBuf返回图像数据/param /// param namenSize返回图像数据大小/param /// param namenWidth画面宽单位像素/param /// param namenHeight画面高/param /// param namenType数据类型 T_RGB32T_UYVY详见宏定义说明。/param /// param namesFileName要保存的文件名/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利用率越低动画感越明显。 /// /// 27BOOL __stdcall MP4_ClientThrowBFrame(LONG StockHandle,DWORD dNum); /// /summary /// param nameStockHandleMP4_ClientStart成功返回的值。 /param /// param namedNum丢弃的帧个数。(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 nameStockHandleMP4_ClientStart成功返回的值。/param /// returns返回帧数值。/returns [DllImport(hikclient.dll)] public static extern ulong MP4_ClientGetFrameNum(int StockHandle); /// summary /// 获取版本号。 /// /// 29DWORD __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在客户端软件运行过程中用户可以在关闭所有播放器的声音之后可以调用该函数修改播放模式。但 /// 是建议用户最好在客户端软件初始化的时候设置一次播放模式之后不再修改。 /// /// 30BOOL __stdcall MP4_ClientAudioMode(WORD wMode) /// /summary /// param namewMode有两个选项。默认使用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 nameStockHandleMP4_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 nameStockHandleMP4_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个端口。 /// /// 33BOOL __stdcall MP4_ClientCastGroup(LONG StockHandle,char *sIP,WORD wPort) /// /summary /// param nameStockHandleMP4_ClientStart成功返回的值。/param /// param namesIP多播组地址。/param /// param namewPort多播组网络端口号。 /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 nameStockHandleMP4_ClientStart成功返回的值。/param /// param namexDC句柄。/param /// param namenUser保留。设置成NULL。/param /// returns/returns [DllImport(hikclient.dll)] public static extern bool MP4_ClientRigisterDrawFun(long StockHandle, DrawFun x, long nUser); /// summary /// 清除数据缓冲区。包括客户端和服务端 /// /// 35BOOL __stdcall MP4_ClientCleanBuffer(LONG nPort,int nCleanType) /// /summary /// param namenPortMP4_ClientStart的返回值。 /param /// param namenCleanType /// 清除类型。 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 /// 设置视频参数。 /// /// 36BOOL MP4_ClientSetVideoPara(LONG StockHandle,DWORD nRegionNum, int nBrightness, int nContrast, int nSaturation, int nHue) /// /summary /// param nameStockHandleMP4_ClientStart成功返回的值。/param /// param namenRegionNum暂时不用设置成0。/param /// param namenBrightness亮度默认64 范围0-128/param /// param namenContrast对比度默认64 范围0-128/param /// param namenSaturation饱和度默认64 范围0-128/param /// param namenHue色调默认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 /// 获取视频参数。 /// /// 37BOOL MP4_ClientGetVideoPara(LONG StockHandle,DWORD nRegionNum, int *pBrightness, int *pContrast, int *pSaturation, int *pHue) /// /summary /// param nameStockHandleMP4_ClientStart成功返回的值。/param /// param namenRegionNum暂时不用设置成0。 /param /// param namepBrightness亮度默认64 范围0-128/param /// param namepContrast对比度默认64 范围0-128/param /// param namepSaturation饱和度默认64 范围0-128/param /// param namepHue色调默认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参数类型仍然是不对的请大家注意了