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

 /// 
        
/// 45.WORD Hik_PlayM4_GetVolume(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort">音量值</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_GetVolume(int nPort);

        
/// <summary>
        
/// 获得当前图像质量
        
/// 
        
/// 46.BOOL  Hik_PlayM4_GetPictureQuality(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_GetPictureQuality(int nPort, out bool bHighQuality);

        
/// <summary>
        
/// 获得流播放模式下源缓冲剩余数据
        
/// 
        
/// 47.DWORD Hik_PlayM4_GetSourceBufferRemain(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns>当前源缓冲的大小(BYTE)</returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern ushort Hik_PlayM4_GetSourceBufferRemain(int nPort);

        
/// <summary>
        
/// 清除流播放模式下源缓冲区剩余数据 
        
/// 
        
/// 48.BOOL Hik_PlayM4_ResetSourceBuffer(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_ResetSourceBuffer(int nPort);

        
/// <summary>
        
/// 设置源缓冲区阀值和剩余数据小于等于阀值时的回调函数指针
        
/// 
        
/// 49.BOOL Hik_PlayM4_SetSourceBufCallBack(LONG nPort,DWORD nThreShold,void (CALLBACK * SourceBufCallBack)(long nPort,DWORD nBufSize,DWORD dwUser,void*pResvered),DWORD dwUser,void *pReserved); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nThreShold">阀值</param>
        
/// <param name="sbcb">回调函数指针</param>
        
/// <param name="dwUser">用户数据</param>
        
/// <param name="pReserved">保留数据</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetSourceBufCallBack(int nPort, ushort nThreShold, SourceBufCallBack sbcb, ushort dwUser, IntPtr pReserved);

        
/// <summary>
        
/// 重置回调标志位为有效状态。流模式下源缓冲到达阀值时(如果用户设置了回调函数)不一定会回调,
        
/// 用户需要重置回调标志位后才能回调。而且每次回调后标志位都被设为无效,用户可以
        
/// 在适当的时候重置回调标志,这个接口的主要目的是防止重复回调(数据在阀值附近摆动因为用户
        
/// 输入数据时,播放器也在读走数据)。初始化状态下,回调标志位是有效的。 
        
/// 
        
/// 50.BOOL  Hik_PlayM4_ResetSourceBufFlag(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_ResetSourceBufFlag(int nPort);

        
/// <summary>
        
/// 设置播放缓冲区(即解码后的图像缓冲区)大小;这个缓冲区比较重要,他直接影响播放的
        
/// 流畅性和延时性。在一定范围内缓冲越大越流畅,同时延时越大。在播放文件时用户最好可以考
        
/// 虑开大缓冲(如果内存足够大),我们的默认值是15(帧),在25帧/秒的情况下即0.6秒的数据。
        
/// 在播放流时我们的默认值是10(帧),如果用户追求最大延时最小,可以考虑试当减小这个值。 
        
/// 输入参数:nNum 播放缓冲区最大缓冲帧数。范围:MIN_DIS_FRAMES ~MAX_DIS_FRAMES。一帧
        
/// 352*288图像的所需内存最小值是 352*288*3/2大约150K 。最大值是352*288*4大约405K。 
        
/// 
        
/// 51.BOOL  Hik_PlayM4_SetDisplayBuf(LONG nPort,DWORD nNum); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nNum"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetDisplayBuf(int nPort, ushort nNum);

        
/// <summary>
        
/// 获得播放缓冲区最大缓冲的帧数
        
/// 
        
/// 52.DWORD  Hik_PlayM4_GetDisplayBuf(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns>播放缓冲区最大缓冲帧数</returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern ushort Hik_PlayM4_GetDisplayBuf(int nPort);

        
/// <summary>
        
/// 设置回调函数指针,文件索引建立后回调。为了能在文件中准确快速的定位,我们在文件打
        
/// 开的时候生成文件索引。这个过程耗时比较长,大约每秒处理40M左右的数据,主要是因为从硬盘
        
/// 读数据比较慢。建立索引的过程是在后台完成,需要使用索引的函数要等待这个过程结束,而其他接口不会受到影响。 
        
/// 
        
/// 53.BOOL Hik_PlayM4_SetFileRefCallBack(LONG nPort,  void (__stdcall *pFileRefDone) (DWORD nPort,DWORD nUser),DWORD nUser); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="frd">回调函数指针</param>
        
/// <param name="nUser">用户数据</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetFileRefCallBack(int nPort, FileRefDone frd, ushort nUser);

        
/// <summary>
        
/// 单帧回放。每调用一次倒退一帧。此函数必须在文件索引生成之后才能调用。虽然
        
/// SetCurrentFrameNum也可以做到单帧回退,但效率要低很多。在单帧回放时我们建议使用这个接口。
        
/// 
        
/// 54.BOOL  Hik_PlayM4_OneByOneBack(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_OneByOneBack(int nPort);

        
/// <summary>
        
/// 设置当前播放播放位置到指定帧号;根据帧号来定位播放位置。此函数必须在文件索引生成之后才能调用
        
/// 
        
/// 55.BOOL  Hik_PlayM4_SetCurrentFrameNum(LONG nPort,DWORD nFrameNum); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nFrameNum">帧序号</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetCurrentFrameNum(int nPort, int nFrameNum);

        
/// <summary>
        
/// 查找指定位置之前的关键帧位置。图像解码必须从关键帧开始,如果用户保存的文件不是从
        
/// 关键帧开始的,那么倒下一个关键帧之前的数据会被忽略。如果用户要截取文件中的一段数据,
        
/// 则应该考虑从关键帧开始截取。结束位置则关系不大,最多丢失3帧数据。 
        
/// 
        
/// 56.BOOL  Hik_PlayM4_GetKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nValue">当前位置,可以是时间或帧号,类型由nType指定。</param>
        
/// <param name="nType">指定nValue的类型。如果nType 是BY_FRAMENUM则nValue表示帧号BY_FRAMTIME,则nValue表示时间,单位ms。 </param>
        
/// <param name="pFramePos">查找到的关键帧的文件位置,帧序号,时标信息。 </param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_GetKeyFramePos(int nPort, ushort nValue, ushort nType, ref PFRAME_POS pFramePos);

        
/// <summary>
        
/// 查找指定位置之后的关键帧位置。 
        
/// 
        
/// 57.BOOL  Hik_PlayM4_GetNextKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nValue">当前位置,可以是时间或帧号,类型由nType指定。</param>
        
/// <param name="nType">指定nValue的类型。如果nType 是BY_FRAMENUM则nValue表示帧号,如果nType 是Y_FRAMTIME,则nValue表示时间,单位ms。</param>
        
/// <param name="pFramePos">查找到的关键帧的文件位置,帧序号,时标信息。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_GetNextKeyFramePos(int nPort, ushort nValue, ushort nType, ref PFRAME_POS pFramePos);

        
/// <summary>
        
/// 设置不解码B帧帧数;不解码B帧,可以减小CPU利用率,如果码流中没有B帧,那么设
        
/// 置这个值将不会有作用。如在快速播放,和支持多路而CPU利用率太高的情况下可以考虑使用。 
        
/// 
        
/// 注意:59~64几个函数接口,是为支持多显卡而增加的。Windows98,Windows2000及Windows2000之后的
        
/// 操作系统才支持多显卡,并需要安装DirectX6.0或更高版本。如果用户不需支持多显卡环境,则这几个接
        
/// 口可以不予考虑。关于多显卡的编程请参考Microsoft sdk相关文档"Multiple-Monitor Systems"
        
/// 
        
/// 58 .BOOL Hik_PlayM4_ThrowBFrameNum(LONG nPort,DWORD nNum); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nNum">不解码B帧的帧数。nNum 对于我们的DS-400XM系列板卡采集的文件,nNum范围是0~2。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_ThrowBFrameNum(int nPort, ushort nNum);

        
/// <summary>
        
/// 枚举系统中的显示设备。
        
/// 
        
/// 59.BOOL  Hik_PlayM4_InitDDrawDevice(); 
        
/// </summary>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_InitDDrawDevice();

        
/// <summary>
        
/// 释放枚举显示设备的过程中分配的资源。
        
/// 
        
/// 60.void  Hik_PlayM4_ReleaseDDrawDevice(); 
        
/// </summary>
        [DllImport("HikPlayM4.dll")]
        
public static extern void Hik_PlayM4_ReleaseDDrawDevice();

        
/// <summary>
        
/// 获得系统中与windows桌面绑定的总的显示设备数目(这里主要是指显卡)
        
/// 
        
/// 61.DWORD  Hik_PlayM4_GetDDrawDeviceTotalNums(); 
        
/// </summary>
        
/// <returns>
        
///     如果返回0,则表示系统中只有主显示设备。如果返回1,则表示系统中安装了多块显卡
        
///     但只有一块显卡与Windows桌面绑定。返回其他值,则表示系统中与桌面绑定的显卡数目。在多显卡
        
///     的系统中可以通过设置显示属性,而指定任意一块显卡作为主显示设备。 
        
/// </returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern ushort Hik_PlayM4_GetDDrawDeviceTotalNums();

        
/// <summary>
        
/// 设置播放窗口使用的显卡。注意:该窗口必须在该显卡所对应的监视器上才能显示播放画面。
        
/// 
        
/// 62.BOOL  Hik_PlayM4_SetDDrawDevice(LONG nPort,DWORD nDeviceNum); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nDeviceNum">显示设备的设备号,如果是0,则表示使用主显示设备。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetDDrawDevice(int nPort, ushort nDeviceNum);

        
/// <summary>
        
/// 得到指定显卡和监视器信息
        
/// 
        
/// 63 . BOOL  Hik_PlayM4_GetDDrawDeviceInfo(DWORD nDeviceNum,LPSTR lpDriverDescription,DWORD nDespLen,LPSTR lpDriverName ,DWORD nNameLen,HMONITOR *hhMonitor); 
        
/// </summary>
        
/// <param name="nDeviceNum">显示设备的设备号,如果是0,则表示主显示设备。</param>
        
/// <param name="lpDriverDescription">输出参数:显示设备的描述信息。 </param>
        
/// <param name="nDespLen">表示lpDriverDescription已分配空间的大小,单位byte。</param>
        
/// <param name="lpDriverName">输出参数:显示设备的设备名。 </param>
        
/// <param name="nNameLen">表示lpDriverName已分配空间的大小,单位byte。</param>
        
/// <param name="hhMonitor">
        
///     显示设备使用的监视器句柄,通过Windows API 函数GetMonitorInfo,可以得到详细信息,供用户定位窗口位置。
        
///     注意:HMONITOR类型 ,当_WIN32_WINNT >= 0x0500时,在“windef.h”头文件中定义,否则在“Multimon.H”中定义,如果用户在编译过程中找不到该类型定义,可以包含相应的头文件。 
        
/// </param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_GetDDrawDeviceInfo(ushort nDeviceNum, string lpDriverDescription, ushort nDespLen, string lpDriverName, ushort nNameLen, IntPtr hhMonitor);

        
/// <summary>
        
/// 获得指定显示设备的系统信息,支持多显卡。 
        
/// 
        
/// 64.int    Hik_PlayM4_GetCapsEx(DWORD nDDrawDeviceNum); 
        
/// </summary>
        
/// <param name="nDDrawDeviceNum">指定显示设备的设备号,如果是0,则表示主显示设备。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern int Hik_PlayM4_GetCapsEx(ushort nDDrawDeviceNum);

        
/// <summary>
        
/// 设置显示的模式,在小画面显示时,采用DISPLAY_QUARTER 可以减小显卡工作量,从而
        
/// 支持更多路显示,但画面显示质量有下降。在正常和大画面显示时应该使用DISPLAY_NORMAL。 
        
/// 
        
/// 65. BOOL Hik_PlayM4_SetDisplayType(LONG nPort,LONG nType); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nType">nType 两种模式,DISPLAY_NORMAL或DISPLAY_QUARTER。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetDisplayType(int nPort, int nType);

        
/// <summary>
        
/// 获得目前设置的显示模式。 
        
/// 
        
/// 66.long Hik_PlayM4_GetDisplayType(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns>DISPLAY_NORMAL 或 DISPLAY_QUARTER </returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern int Hik_PlayM4_GetDisplayType(int nPort);

        
/// <summary>
        
/// 设置解码回调的流类型。
        
/// 
        
/// 67. BOOL __stdcall Hik_PlayM4_SetDecCBStream(LONG nPort,DWORD nStream); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nStream">1视频流,2音频流,3复合流</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetDecCBStream(int nPort, ushort nStream);

        
/// <summary>
        
/// 设置或增加显示区域。可以做局部放大显示。
        
/// 
        
/// 68.BOOL __stdcall Hik_PlayM4_SetDisplayRegion(LONG nPort,DWORD nRegionNum, RECT *pSrcRect, HWND hDestWnd, BOOL bEnable); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nRegionNum">
        
///     显示区域序号,0~(MAX_DISPLAY_WND-1)。nRegionNum如果nRegionNum为0,表示对主要显示窗口(Hik_PlayM4_Play中设置的窗口)进行设置,
        
///     将忽略hDestWnd和bEnable的设置。 
        
/// </param>
        
/// <param name="pSrcRect">
        
///      设置在要显示的原始图像上的区域,如:如果原始图像是352*288,那么pSrcRect可设置的范围只能在(0,0,352,288)之中。如果pSrcRect=NULL,将显示整个图像。 
        
/// </param>
        
/// <param name="hDestWnd">设置显示窗口。如果该区域的窗口已经设置过(打开过),那么该参数被忽略。</param>
        
/// <param name="bEnable">打开(设置)或关闭显示区域。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetDisplayRegion(int nPort, ushort nRegionNum, ref Rectangle pSrcRect, IntPtr hDestWnd, bool bEnable);

        
/// <summary>
        
/// 刷新显示,同36。为支持Hik_PlayM4_SetDisplayRegion而增加一个参数。 
        
/// 
        
/// 69.BOOL __stdcall Hik_PlayM4_RefreshPlayEx(LONG nPort,DWORD nRegionNum); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nRegionNum">显示区域序号。</param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_RefreshPlayEx(int nPort, ushort nRegionNum);

        
/// <summary>
        
/// 设置播放窗口使用的显卡,同62。为支持Hik_PlayM4_SetDisplayRegion而增加一个参数。
        
/// 
        
/// 70.BOOL __stdcall Hik_PlayM4_SetDDrawDeviceEx(LONG nPort,DWORD nRegionNum,DWORD nDeviceNum); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="nRegionNum">显示区域序号。 </param>
        
/// <param name="nDeviceNum"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_SetDDrawDeviceEx(int nPort, ushort nRegionNum, ushort nDeviceNum);

        
/// <summary>
        
/// 以音视频分开输入的方式打开流。 
        
/// 
        
/// 71.BOOL __stdcall Hik_PlayM4_OpenStreamEx(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="pFileHeadBuf">用户从卡上得到的文件头数据。 </param>
        
/// <param name="nSize">文件头长度。 </param>
        
/// <param name="nBufPoolSize"> 设置播放器中存放数据流的缓冲区大小。范围是SOURCE_BUF_MIN~ SOURCE_BUF_MAX。 </param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_OpenStreamEx(int nPort, IntPtr pFileHeadBuf, ushort nSize, ushort nBufPoolSize);

        
/// <summary>
        
/// 关闭数据流
        
/// 
        
/// 72.BOOL __stdcall Hik_PlayM4_CloseStreamEx(LONG nPort); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <returns></returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_CloseStreamEx(int nPort);

        
/// <summary>
        
/// 输入从卡上得到的视频流 (可以是复合流,但音频数据会被忽略);打开流之后才能输入数据。
        
/// 
        
/// 73.BOOL __stdcall Hik_PlayM4_InputVideoData(LONG nPort,PBYTE pBuf,DWORD nSize); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="pBuf">缓冲区地址</param>
        
/// <param name="nSize">缓冲区大小</param>
        
/// <returns>TURE,表示已经输入数据。FALSE 表示失败,数据没有输入。</returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_InputVideoData(int nPort, IntPtr pBuf, ushort nSize);

        
/// <summary>
        
/// 输入从卡上得到的音频流;打开声音之后才能输入数据。 
        
/// 
        
/// 74.BOOL __stdcall Hik_PlayM4_InputAudioData(LONG nPort,PBYTE pBuf,DWORD nSize); 
        
/// </summary>
        
/// <param name="nPort"></param>
        
/// <param name="pBuf">缓冲区地址</param>
        
/// <param name="nSize">缓冲区大小</param>
        
/// <returns>返回值:TURE,表示已经输入数据。FALSE 表示失败,数据没有输入。</returns>
        [DllImport("HikPlayM4.dll")]
        
public static extern bool Hik_PlayM4_InputAudioData(int nPort, IntPtr pBuf, ushort nSize);

        
/// <summary>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值