您的位置:首页 > 编程语言 > C#

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

2009-03-22 14:25 615 查看
/// <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>

/// 获得当前设置的音量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息