C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll](4)

简介:

/// <summary>
        
/// 设置回调函数,替换播放器中的显示部分,有用户自己控制显示,该函数在Hik_PlayM4_Play
        
/// 之前调用,在Hik_PlayM4_Stop时自动失效,下次调用Hik_PlayM4_Play之前需要重新设
        
/// 置。注意解码部分不控制速度,只要用户从回调函数中返回,解码器就会解码下一部分数据。这个
        
/// 功能的使用需要用户对视频显示和声音播放有足够的了解,否则请慎重使用,有关知识请参阅directx开发包。
        
/// 
        
/// 24 . BOOL  Hik_PlayM4_SetDecCallBack(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="dcbf">DecCBFun回调函数指针,不能为NULL</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetDecCallBack(int nPort, DecCBFun dcbf);


        
/// <summary>
        
/// 设置抓图回调函数;注意要尽快返回,如果要停止回调,可以把回调函数指针DisplayCBFun设为NULL。
        
/// 一旦设置回调函数,则一直有效,直到程序退出。该函数可以在任何时候调用。 
        
/// 
        
/// 25 . BOOL Hik_PlayM4_SetDisplayCallBack(LONG nPort,void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReceaved)); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="dcbf">DisplayCBFun抓图回调函数,可以为NULL。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetDisplayCallBack(int nPort, DisplayCBFun dcbf);

        
/// <summary>
        
/// 将抓图得到的图像数据保存成BMP文件。转换函数占用的cpu资源,如果不需要保存图片,则不要调用
        
/// 
        
/// 26.BOOL  Hik_PLayM4_ConvertToBmpFile(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">同抓图回调函数中的参数</param>
        
/// <param name="sFileName">要保存的文件名。最好以BMP作为文件扩展名。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PLayM4_ConvertToBmpFile(IntPtr pBuf, int nSize, int nWidth, int nHeight, int nType, string sFileName);

        
/// <summary>
        
/// 得到文件中的总帧数。 
        
/// 
        
/// 27.DWORD Hik_PlayM4_GetFileTotalFrames(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns>文件中的总帧数。 </returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern ushort Hik_PlayM4_GetFileTotalFrames(int nPort);

        
/// <summary>
        
/// 得到当前码流中编码时的帧率。
        
/// 
        
/// 28.DWORD Hik_PlayM4_GetCurrentFrameRate(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns>当前码流中编码时的帧率。 </returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern ushort Hik_PlayM4_GetCurrentFrameRate(int nPort);

        
/// <summary>
        
/// 得到文件当前播放的时间,单位毫秒
        
/// 
        
/// 29.DWORD Hik_PlayM4_GetPlayedTimeEx(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern ushort Hik_PlayM4_GetPlayedTimeEx(int nPort);

        
/// <summary>
        
/// 根据时间设置文件播放位置,此接口比Hik_PlayM4_SetPlayPos费时,但如果用时间来控制播放进度条
        
/// (与Hik_PlayM4_GetPlayedTime(Ex)配合使用),那么可以使进度条平滑滚动。 
        
/// 
        
/// 30.BOOL   Hik_PlayM4_SetPlayedTimeEx(LONG nPort,DWORD nTime); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nTime">设置文件播放位置到指定时间。单位毫秒。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetPlayedTimeEx(int nPort, ushort nTime);

        
/// <summary>
        
/// 得到当前播放的帧序号,。而Hik_PlayM4_GetPlayedFrames是总共解码的帧数。如果文件播放位置
        
/// 不被改变,那么这两个函数的返回值应该非常接近,除非码流丢失数据。 
        
/// 
        
/// 31.DWORD  Hik_PlayM4_GetCurrentFrameNum(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern ushort Hik_PlayM4_GetCurrentFrameNum(int nPort);

        
/// <summary>
        
/// 设置流播放的模式。必须在播放之前设置。 
        
///     注意:2.2版以后可以做暂停,快放,慢放,单帧播放操作。 
        
/// 
        
/// 32.BOOL Hik_PlayM4_SetStreamOpenMode(LONG nPort,DWORD nMode); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nMode">STREAME_REALTIME实时模式(默认),STREAME_FILE文件模式。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetStreamOpenMode(int nPort, ushort nMode);

        
/// <summary>
        
/// 得到当前版本播放器能播放的文件的文件头长度。 主要应用在流播放器的STREAME_FILE模式下。
        
/// 以便读出文件头作为Hik_PlayM4_OpenStream()的输入参数。 
        
/// 
        
/// 33.DWORD Hik_PlayM4_GetFileHeadLength(); 
        
/// <example>
        
///  CFile  m_TestFile;
        
/// void Start() 
        
/// { 
        
/// //获得文件头长度; 
        
/// DWORD nLength= Hik_PlayM4_GetFileHeadLength(); 
        
/// PBYTE pFileHead=new BYTE[nLength]; 
        
/// //打开文件; 
        
/// m_TestFile.Open("test.mp4 ", CFile::modeRead,NULL); 
        
/// m_TestFile.Read(pFileHead,nLength); 
        
/// //设置模式 
        
/// Hik_PlayM4_SetStreamOpenMode(0,STREAME_FILE); 
        
/// //打开流接口 
        
/// if(!Hik_PlayM4_OpenStream(0,pFileHead, nLength,1024*100)) 
        
/// { 
        
///  m_strPlayFileName=""; 
        
///  MessageBox("文件打不开"); 
        
/// } 
        
/// //播放 
        
/// m_bPlaying = Hik_PlayM4_Play( 0, m_hWnd); 
        
/// delete []pFileHead; 
        
///}  
        
///  //////////////////////////////////////////////////////////////////////////////
        
///  void InputData() 
        
///  { 
        
///BYTE pBuf[4096]; 
        
/// m_TestFile.Read(pBuf,sizeof(pBuf)); 
        
/// while(!Hik_PlayM4_InputData(0,pBuf,sizeof(pBuf))) 
        
///  }
        
///         { 
        
///  if(!m_bPlaying) 
        
///   break;//如果已经停止播放,则退出; 
        
///  TRACE("SLEEEP \n"); 
        
///  Sleep(5); 
        
/// } 
        
///  } 
        
/// </example>
        
/// </summary>
        
/// <returns>此版本播放器对应的文件头的长度。 </returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern ushort Hik_PlayM4_GetFileHeadLength();


        
/// <summary>
        
/// 得到当前播放器sdk的版本号和build号。如果只是修改bug,我们只升级build号。 
        
/// 
        
/// 34.DWORD Hik_PlayM4_GetSdkVersion(); 
        
/// </summary>
        
/// <returns>高16位表示当前的build号。9~16位表示主版本号,1~8位表示次版本号。如:返回值0x06040105 表示:build号是0604,版本号1.5。 </returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_GetSdkVersion();

        
/// <summary>
        
/// 获得当前错误的错误码。用户应该在调用某个函数失败时,调用此函数以获得错误的详细信息。 
        
/// 
        
/// 35.DWORD Hik_PlayM4_GetLastError(LONG nPort) 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_GetLastError(int nPort);

        
/// <summary>
        
/// 刷新显示。当用户暂停时如果刷新了窗口,则窗口中的图像因为刷新而消失,此时调用这个接口可
        
/// 以重新把图像显示出来。只有在暂停和单帧播放时才会执行, 其它情况会直接返回。 
        
/// 
        
/// 36.BOOL  Hik_PlayM4_RefreshPlay(LONG nPort)
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_RefreshPlay(int nPort);

        
/// <summary>
        
/// 设置OVERLAY模式显示画面。在一块显卡中同一时刻只能有一个OVERLAY表面处于活动状态,
        
/// 如果此时系统中已经有程序使用了OVERLAY,那么播放器就不能再创建OVERLAY表面,它将自
        
/// 动改用Off_Screen表面,并不返回FALSE。一些常用的播放器,以及我们卡的预览都可能使用了
        
/// overlay表面。同样,如果播放器使用了OVERLAY表面,那么,其他的程序将不能使用OVERLAY
        
/// 表面,特别注意,我们的卡在预览时可能也要使用OVERLAY(用户可设置),如果先打开播放器(并
        
/// 且使用了OVERLAY),再启动预览,那么预览可能因为得不到OVERLAY而失败。使用OVERLAY
        
/// 模式的优点是:大部份的显卡都支持OVERLAY,在一些不支持BLT硬件缩放和颜色转换的显卡上 
        
/// (如SIS系列显卡)使用OVERLAY模式(OVERLAY模式下的缩放和颜色转换由显卡支持),可以大
        
/// 大减小cpu利用率并提高画面质量(相对于软件缩放和颜色转换)。缺点是:只能有一路播放器使用。
        
/// 该设置必须在PLAY之前使用,而且需要设置透明色。 
        
/// 
        
/// 37.BOOL  Hik_PlayM4_SetOverlayMode(LONG nPort,BOOL bOverlay,COLORREF colorKey) 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="bOverlay">如果为TRUE,表示将首先尝试使用OVERLAY模式,如果不行再使用其他模式。如果为FALSE,则不进行OVERLAY模式的尝试。 </param>
        
/// <param name="colorKey">
        
///     用户设置的透明色,透明色相当于一层透视膜,显示的画面只能穿过这种颜色,而其他的颜色将
        
///     挡住显示的画面。用户应该在显示窗口中涂上这种颜色,那样才能看到显示画面。一般应该使
        
///     用一种不常用的颜色作为透明色。这是一个双字节值0x00rrggbb,最高字节为0,后三个字节分别表示r,g,b的值。
        
/// </param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetOverlayMode(int nPort, bool bOverlay,int colorKey);

        
/// <summary>
        
/// 获得码流中原始图像的大小,根据此大小来设置显示窗口的区域,可以不用显卡做缩放工作,对于
        
/// 那些不支持硬件缩放的显卡来说非常有用。 
        
/// 
        
/// 38. BOOL  Hik_PlayM4_GetPictureSize(LONG nPort,LONG *pWidth,LONG *pHeight); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="pWidth">原始图像的宽。在PAL制CIF格式下是352。</param>
        
/// <param name="pHeight">原始图像的高。在PAL制CIF格式下是288。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_GetPictureSize(int nPort, out int pWidth, out int pHeight);

        
/// <summary>
        
/// 设置图像质量,当设置成高质量时画面效果好,但CPU利用率高。在支持多路播放时,可以
        
/// 设为低质量,以降低CPU利用率;当某路放大播放时将该路设置成高质量,以达到好的画面效果。
        
/// 
        
/// 39.BOOL  Hik_PlayM4_SetPicQuality(LONG nPort,BOOL bHighQuality); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="bHighQuality">等于1时图像高质量,等于0时低质量(默认值)。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetPicQuality(int nPort, bool bHighQuality);

        
/// <summary>
        
/// 以共享方式播放声音,只管播放本路声音而不去关闭其他路的声音。注意:WIN98及其之前
        
/// 版本操作系统不支持创建多个声音设备。如果声卡已经被使用,那么此函数将返回FALSE。
        
/// 
        
/// 40.BOOL Hik_PlayM4_PlaySoundShare(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_PlaySoundShare(int nPort);

        
/// <summary>
        
/// 以共享方式关闭声音。Hik_Playm4_PlaySound和Hik_PlayM4_StopSound是以独占方
        
/// 式播放声音的。注意:在同一个进程中,所有通道必须使用相同的方式播放或关闭声音。
        
/// 
        
/// 41.BOOL  Hik_PlayM4_StopSoundShare(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_StopSoundShare(int nPort);

        
/// <summary>
        
/// 获得流模式类型。 
        
/// 
        
/// 42. LONG  Hik_PlayM4_GetStreamOpenMode(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns>STREAME_REALTIME或STREAME_FILE</returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern int Hik_PlayM4_GetStreamOpenMode(int nPort);

        
/// <summary>
        
/// 检查当前播放器是否使用了OVERLAY模式
        
/// 
        
/// 43.LONG  Hik_PlayM4_GetOverlayMode(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns>0,表示没有使用OVERLAY;1表示使用了OVERLAY表面。</returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern int Hik_PlayM4_GetOverlayMode(int nPort);

        
/// <summary>
        
/// 获得OVERLAY表面使用的透明色
        
/// 
        
/// 44.COLORREF  Hik_PlayM4_GetColorKey(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns>颜色值</returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern Color Hik_PlayM4_GetColorKey(int nPort);

        
/// <summary>
        
/// 获得当前设置的音量


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

相关文章
|
7月前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
7月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
77 3
|
3月前
|
缓存 测试技术 API
API的封装步骤流程
API封装流程是一个系统化的过程,旨在将内部功能转化为可复用的接口供外部调用。流程包括明确需求、设计接口、选择技术和工具、编写代码、测试、文档编写及部署维护。具体步骤为确定业务功能、数据来源;设计URL、请求方式、参数及响应格式;选择开发语言、框架和数据库技术;实现数据连接、业务逻辑、错误处理;进行功能、性能测试;编写详细文档;部署并持续维护。通过这些步骤,确保API稳定可靠,提高性能。
|
6月前
|
JavaScript 前端开发 测试技术
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
44 3
|
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#编程能力,优化开发效率和代码质量。
|
5月前
|
开发框架 缓存 NoSQL
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
|
5月前
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
|
5月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理