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

简介:

/// <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     停止录像

结束

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

                    改前代码:public static extern bool MP4_ClientStopCapture(long StockHandle);

                    改后代码:public static extern bool MP4_ClientStopCapture(int StockHandle);


本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586700,如需转载请自行联系原作者

相关文章
|
2月前
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
71 7
|
3月前
|
缓存 测试技术 API
API的封装步骤流程
API封装流程是一个系统化的过程,旨在将内部功能转化为可复用的接口供外部调用。流程包括明确需求、设计接口、选择技术和工具、编写代码、测试、文档编写及部署维护。具体步骤为确定业务功能、数据来源;设计URL、请求方式、参数及响应格式;选择开发语言、框架和数据库技术;实现数据连接、业务逻辑、错误处理;进行功能、性能测试;编写详细文档;部署并持续维护。通过这些步骤,确保API稳定可靠,提高性能。
|
2月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
66 8
|
3月前
|
API PHP
ThinkPHP 通用的API格式封装
本文介绍了在ThinkPHP框架中如何统一封装API返回格式的方法,包括创建状态码枚举类、编写统一格式化函数以及在BaseController和Error控制器中重写`__call`方法来处理不存在的方法或控制器调用,以实现统一的错误处理和返回格式。
ThinkPHP 通用的API格式封装
|
2月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
3月前
|
安全 C#
C# 面向对象编程的三大支柱:封装、继承与多态
【9月更文挑战第17天】在C#中,面向对象编程的三大支柱——封装、继承与多态,对于编写安全、可维护、可复用的代码至关重要。封装通过访问修饰符和属性保护数据;继承允许子类继承父类的属性和方法,实现代码复用和多态;多态则提高了代码的灵活性和通用性。掌握这三大概念能显著提升C#编程能力,优化开发效率和代码质量。
|
2月前
|
API C#
异步轮询 Web API 的实现与 C# 示例
异步轮询 Web API 的实现与 C# 示例
86 0
|
3月前
|
负载均衡 API 数据安全/隐私保护
Zookeeper的客户端-原生的API
Zookeeper的客户端-原生的API
|
4月前
|
安全 API 网络安全
【Azure API 管理】APIM如何配置客户端证书的CRL检测策略
【Azure API 管理】APIM如何配置客户端证书的CRL检测策略
|
4月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
189 0