C# 视频监控[海康]客户端——封装API

 

前言

     本章主要是在C#封装的海康DVR客户端SDK 的代码上修改的,并参考《Hikvision 板卡网络开发包编程手册V4.7.pdf》补上更完整的注释,并且参照VC++源码做了小部分修改。

参考

     1.     C#封装的海康DVR客户端SDK

系列

     1.     C# 视频监控系列(1):准备

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

注意

本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心、实现以及其他能够贴出来的代码我都会贴出来,并且争取尽所能的回答评论里的每一个问题,感谢大家关注,欢迎交流 :)

正文

     本章主要是贴封装好的API调用代码,所以直接就贴代码了。

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, [MarshalAs(UnmanagedType.LPArray, SizeConst = 152064)] byte[] 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 = 0×0400;
#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(long 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(long 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([MarshalAs(UnmanagedType.LPArray)] byte[] 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.     C#调用VC++写好的DLL在这里就不介绍了,重点和难点在于参数数据类型对应,下一章将有所总结。

          2.     注释比较详尽,注释里summary节点里有函数的VC++原型。

结束

     我的客户端主要实现的功能是播放视频和音频,有些API都没有用到,我估计有些API参数类型仍然是不对的,请大家注意了!!



评论权限被关闭.



赞助商

文章归档

好友推荐链接

强力推荐链接

分类目录

   

统计信息

Translator

Chinese (Simplified) flagItalian flagKorean flagChinese (Traditional) flagPortuguese flagEnglish flagGerman flagFrench flagSpanish flagJapanese flagArabic flagRussian flagGreek flagDutch flagBulgarian flagCzech flag
Croatian flagDanish flagFinnish flagPolish flagSwedish flagNorwegian flag          

标签

专利战 世界 中国 为什么 介绍 使用 公司 分析 利用 功能 原谅我红尘颠倒 发现 天涯 如何 实现 工具 慕容雪村 技术 插件 搜索引擎 支持 数据库 文件 方式 时间 服务器 用户 简单 系统 网站 美国 解决 谁的心不曾柔软 进行 部分 问题 AJAX blog Google LAN Linux MySQL PHP plugin WordPress

热门浏览