⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hikplaympeg4.h

📁 一个文件切割的例子
💻 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 + -