/// <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>
/// 获得当前设置的音量