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,如需转载请自行联系原作者

相关文章
|
10天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
3月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
37 3
|
1月前
|
前端开发 API 数据处理
uni-app 封装api请求
uni-app 封装api请求
14 0
|
2月前
|
缓存 监控 测试技术
ERP系统对接方案与API接口封装系列(高并发)
企业资源规划(ERP)系统是现代企业管理的核心,它集成了企业内部的各个部门和业务流程。为了实现ERP系统与其他外部系统或应用程序之间的数据交换和协作,需要对接方案。API(应用程序编程接口)是实现系统对接的常用方法之一。
|
3月前
|
前端开发 JavaScript 小程序
【uniapp】十分钟带你封装uniapp的api请求
【uniapp】十分钟带你封装uniapp的api请求
116 0
|
4月前
|
API 开发工具 开发者
通过解析封装关键词搜索速卖通商品列表数据接口,速卖通API接口
通过解析封装关键词搜索速卖通商品列表数据接口,速卖通API接口
33 0
|
4月前
|
XML JSON 安全
uni-app API请求封装:让接口调用更加简单高效
在进行uni-app开发时,网络请求是必不可少的环节。为了方便开发,我们可以封装一些网络请求方法,以便在多个页面中复用,并且可以统一处理错误信息等问题,提高开发效率和代码质量。本文将介绍如何封装网络请求方法。
309 0
uni-app API请求封装:让接口调用更加简单高效
|
4月前
|
API C#
C# 调用系统“API“设置图片为“桌面壁纸“
C# 调用系统“API“设置图片为“桌面壁纸“
|
5月前
|
小程序 前端开发 API
小程序api封装 promise使用
小程序api封装 promise使用
32 0
|
7月前
|
存储 算法 JavaScript
微信支付-Native下单API支付封装+签名流程解读
微信支付-Native下单API支付封装+签名流程解读
82 0

热门文章

最新文章