📄 hikplaympeg4.h
字号:
///////////////////////////////////////////////////////////////////
//File: HikPlayMpeg4.h
//Date: 2002-9-05
//Version: 2.4
//Description: interface for HikPlayM4.lib
//Copyright: HikVision
///////////////////////////////////////////////////////////////////
#ifndef _HIK_PLAY_M4
#define _HIK_PLAY_M4
#if defined( _WINDLL)
#define HIK_PLAYM4_API extern "C"__declspec(dllexport)
#else
#define HIK_PLAYM4_API extern "C" __declspec(dllimport)
#endif
//最大支持通道数
#define HIK_PLAYM4_MAX_SUPPORTS 16
//错误码
#define HIK_PLAYM4_NOERROR 0 //没有错误;
#define HIK_PLAYM4_PARA_OVER 1 //输入参数非法;
#define HIK_PLAYM4_ORDER_ERROR 2 //调用顺序不对;
#define HIK_PLAYM4_TIMER_ERROR 3 //多媒体时钟设置失败;
#define HIK_PLAYM4_DEC_VIDEO_ERROR 4 //视频解码失败;
#define HIK_PLAYM4_DEC_AUDIO_ERROR 5 //音频解码失败;
#define HIK_PLAYM4_ALLOC_MEMORY_ERROR 6 //分配内存失败;
#define HIK_PLAYM4_OPEN_FILE_ERROR 7 //文件操作失败;
#define HIK_PLAYM4_CREATE_OBJ_ERROR 8 //创建线程事件等失败;
#define HIK_PLAYM4_CREATE_DDRAW_ERROR 9 //创建directDraw失败;
#define HIK_PLAYM4_CREATE_OFFSCREEN_ERROR 10 //创建后端缓存失败;
#define HIK_PLAYM4_BUF_OVER 11 //缓冲区满,输入流失败;
#define HIK_PLAYM4_CREATE_SOUND_ERROR 12 //创建音频设备失败;
#define HIK_PLAYM4_SET_VOLUME_ERROR 13 //设置音量失败;
#define HIK_PLAYM4_SUPPORT_FILE_ONLY 14 //只能在播放文件时才能使用此接口;
#define HIK_PLAYM4_SUPPORT_STREAM_ONLY 15 //只能在播放流时才能使用此接口;
#define HIK_PLAYM4_SYS_NOT_SUPPORT 16 //系统不支持,解码器只能工作在Pentium 3以上;
#define HIK_PLAYM4_FILEHEADER_UNKNOWN 17 //没有文件头;
#define HIK_PLAYM4_VERSION_INCORRECT 18 //解码器和编码器版本不对应;
#define HIK_PALYM4_INIT_DECODER_ERROR 19 //初始化解码器失败;
#define HIK_PLAYM4_CHECK_FILE_ERROR 20 //测试文件头尾数据时没有找到有效数据;文件太短或码流无法识别;
#define HIK_PLAYM4_INIT_TIMER_ERROR 21 //初始化多媒体时钟失败;
#define HIK_PLAYM4_BLT_ERROR 22 //位拷贝失败;
#define HIK_PLAYM4_UPDATE_ERROR 23 //显示overlay失败;
//播放缓冲范围
#define MAX_DIS_FRAMES 50
#define MIN_DIS_FRAMES 6
//查找类型
#define BY_FRAMENUM 1
#define BY_FRAMETIME 2
//数据缓区大小;
#define SOURCE_BUF_MAX 1024*1000
#define SOURCE_BUF_MIN 1024*50
//设置流类型
#define STREAME_REALTIME 0//实时解码,适合板卡生成的实时数据流,默认值.
#define STREAME_FILE 1//缓冲解码,适合文件流输入;
//回调函数返回类型
#define T_AUDIO16 101
#define T_UYVY 1
#define T_YV12 3
#define T_RGB32 7
//判断是否支持
#define SUPPORT_DDRAW 1 //支持DIRECTDRAW;
#define SUPPORT_BLT 2 //显卡支持BLT操作;
#define SUPPORT_BLTFOURCC 4 //显卡BLT支持颜色转换;
#define SUPPORT_BLTSHRINKX 8 //显卡BLT支持X轴缩小;
#define SUPPORT_BLTSHRINKY 16 //显卡BLT支持Y轴缩小;
#define SUPPORT_BLTSTRETCHX 32 //显卡BLT支持X轴放大;
#define SUPPORT_BLTSTRETCHY 64 //显卡BLT支持Y轴放大;
#define SUPPORT_SSE 128 //CPU支持SSE指令;
#define SUPPORT_MMX 256 //CPU支持MMX;
//位置信息
typedef struct{
long nFilePos;
long nFrameNum;
long nFrameTime;
}FRAME_POS,*PFRAME_POS;
//帧信息
typedef struct{
long nWidth;
long nHeight;
long nStamp;
long nType;
long nFrameRate;
}FRAME_INFO;
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//API
//初始化DirecDraw;在所有操作之前进行
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_InitDDraw(HWND hWnd);
//释放directDraw;在所有操作之后进行;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_RealeseDDraw();
//打开播放文件;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_OpenFile(LONG nPort,LPSTR sFileName);
//关闭播放文件;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_CloseFile(LONG nPort);
//播放开始
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_Play(LONG nPort, HWND hWnd);
//播放结束
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_Stop(LONG nPort);
//播放暂停:nPause=TRUE暂停;否则继续;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_Pause(LONG nPort,DWORD nPause);
//每次调用速度快一倍;最多调用3次;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_Fast(LONG nPort);
//每次调用速度慢一倍;最多调用3次;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_Slow(LONG nPort);
//单帧播放;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_OneByOne(LONG nPort);
//设置播放文件相对位置范围0-100%;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetPlayPos(LONG nPort,float fRelativePos);
//获得播放文件相对位置范围0-100%;
HIK_PLAYM4_API float __stdcall Hik_PlayM4_GetPlayPos(LONG nPort);
//设置文件结束时发送的消息;消息发送到PLAY窗口;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetFileEndMsg(LONG nPort,HWND hWnd,UINT nMsg);
//设置音量;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetVolume(LONG nPort,WORD nVolume);
//关闭声音
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_StopSound();
//打开声音;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_PlaySound(LONG nPort);
//打开流
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_OpenStream(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize);
//输入流数据;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_InputData(LONG nPort,PBYTE pBuf,DWORD nSize);
//结束流
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_CloseStream(LONG nPort);
//获得系统信息;
HIK_PLAYM4_API int __stdcall Hik_PlayM4_GetCaps();
//得到文件总的时间;
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetFileTime(LONG nPort);
//得到正在播放的文件时间
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetPlayedTime(LONG nPort);
//得到已经播放的帧数;
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetPlayedFrames(LONG nPort);
////////////////////////////////////////////////////////////////////////////////////
////////////////////2.0版新增/////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
//解码后回调
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetDecCallBack(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2));
//显示后回调;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetDisplayCallBack(LONG nPort,void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReserved));
//转换成BMP文件
HIK_PLAYM4_API BOOL __stdcall Hik_PLayM4_ConvertToBmpFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName);
//获得总帧数
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetFileTotalFrames(LONG nPort);
//获得当前帧数
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetCurrentFrameRate(LONG nPort);
//获得当前播放时间,单位ms
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetPlayedTimeEx(LONG nPort);
//根据时间设置当前播放位置
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetPlayedTimeEx(LONG nPort,DWORD nTime);
//获得当前播放的帧序号
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetCurrentFrameNum(LONG nPort);
//设置流播放模式
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetStreamOpenMode(LONG nPort,DWORD nMode);
//获得当前版本的文件头长度;
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetFileHeadLength();
//获得当前SDK版本和Build号
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetSdkVersion();
////////////////////////////////////////////////////////////////////////////////////
////////////////////2.2版新增/////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
//获得错误号
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetLastError(LONG nPort);
//刷新显示
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_RefreshPlay(LONG nPort);
//设置OVERLAY模式
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetOverlayMode(LONG nPort,BOOL bOverlay,COLORREF colorKey);
//获得画面大小
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_GetPictureSize(LONG nPort,LONG *pWidth,LONG *pHeight);
//设置画面质量
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetPicQuality(LONG nPort,BOOL bHighQuality);
//打开声音,共享方式;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_PlaySoundShare(LONG nPort);
//关闭本路声音,共享方式;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_StopSoundShare(LONG nPort);
////////////////////////////////////////////////////////////////////////////////////
////////////////////2.4版新增/////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
//获得流模式类型
HIK_PLAYM4_API LONG __stdcall Hik_PlayM4_GetStreamOpenMode(LONG nPort);
//获得是否是OVERLAY 模式;
HIK_PLAYM4_API LONG __stdcall Hik_PlayM4_GetOverlayMode(LONG nPort);
//获得当前的透明色;
HIK_PLAYM4_API COLORREF __stdcall Hik_PlayM4_GetColorKey(LONG nPort);
//获得音量
HIK_PLAYM4_API WORD __stdcall Hik_PlayM4_GetVolume(LONG nPort);
//获得当前图像质量
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_GetPictureQuality(LONG nPort,BOOL *bHighQuality);
//获得源缓冲剩余数据;
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetSourceBufferRemain(LONG nPort);
//清除源缓冲剩余数据
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_ResetSourceBuffer(LONG nPort);
//设置源缓冲下限回调
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetSourceBufCallBack(LONG nPort,DWORD nThreShold,void (CALLBACK * SourceBufCallBack)(long nPort,DWORD nBufSize,DWORD dwUser,void*pResvered),DWORD dwUser,void *pReserved);
//设置标志位,下次达到阀值时回调;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_ResetSourceBufFlag(LONG nPort);
//设置播放缓冲区缓冲帧数;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetDisplayBuf(LONG nPort,DWORD nNum);
//获得播放缓冲区缓冲帧数;
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetDisplayBuf(LONG nPort);
//单帧回放
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_OneByOneBack(LONG nPort);
//建文件索引;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetFileRefCallBack(LONG nPort, void (__stdcall *pFileRefDone)(DWORD nPort,DWORD nUser),DWORD nUser);
//设置当前播放帧号;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetCurrentFrameNum(LONG nPort,DWORD nFrameNum);
//查找关键帧位置
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_GetKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos);
//查找下一个关键帧位置
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_GetNextKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos);
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_StartCapFile(LONG nPort,LPTSTR savefile);
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_StopCapFile(LONG nPort);
#if (WINVER > 0x0400)
////////////////////////////////////////////////////////////////////////////
//注意:
// 支持多显卡的这些函数,建议在Win2000及以后版本使用;
// WINVER定义在"Windows.h"里,标志windows版本号。
// 在VC6.0自带的"windows.h"中,WINVER 被定义为 0x0400(表示NT4.0)。
// 而Windows2000及以后版本实际版本号应该大于0x0400,如果要保持定义
// 和实际版本相同,请下载安装Microsoft 最新的Platform sdk
// (http://www.microsoft.com/msdownload/platformsdk/sdkupdate/)并设置
// 并设置新安装的sdk为最先包含的路径;
//
// 当WINVER>0x0400 时HMONITOR 定义在"Windef.h"里.否则定义在"MULTIMON.H";
// 而实际上如果包含了"MULTIMON.H",可能会出现Link错误。如果要使用HMONITOR这个
// 数据类型,应该保证WINVER>0x0400(如果不想安装最新SDK,作为一个不提倡的办法,
// 可以自定义WINVER 在你的STDAFX.H头文件中)。
///////////////////////////////////////////////////////////////////////////
//初始化显示设备
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_InitDDrawDevice();
//释放显示设备
HIK_PLAYM4_API void __stdcall Hik_PlayM4_ReleaseDDrawDevice();
//获得系统中总的显示设备数目;
HIK_PLAYM4_API DWORD __stdcall Hik_PlayM4_GetDDrawDeviceTotalNums();
//设置使用的显卡
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_SetDDrawDevice(LONG nPort,DWORD nDeviceNum);
//得到显卡和显示器信息;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_GetDDrawDeviceInfo(DWORD nDeviceNum,LPSTR lpDriverDescription,DWORD nDespLen,LPSTR lpDriverName ,DWORD nNameLen,HMONITOR *hhMonitor);
//获得系统信息扩展接口,支持多显卡
HIK_PLAYM4_API int __stdcall Hik_PlayM4_GetCapsEx(DWORD nDDrawDeviceNum);
#endif
//设置扔掉B帧个数;
HIK_PLAYM4_API BOOL __stdcall Hik_PlayM4_ThrowBFrameNum(LONG nPort,DWORD nNum);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -