#ifndef _DHPLAY_H #define _DHPLAY_H #if (defined(WIN32) || defined(WIN64)) #ifdef dhplay_EXPORTS #define PLAYSDK_API __declspec(dllexport) #else #define PLAYSDK_API __declspec(dllimport) #endif #define CALLMETHOD __stdcall #define CALLBACK __stdcall #else #define CALLMETHOD #define CALLBACK #define PLAYSDK_API //extern "C" #endif #if defined(WIN32) || defined(WIN64) #include #else #ifdef __OBJC__ #include "objc/objc.h" #else #define BOOL int #endif #define BYTE unsigned char #define PBYTE BYTE* #define LPBYTE BYTE* #ifndef LONG #define LONG int #endif #ifndef DWORD #define DWORD unsigned int #endif #define WORD unsigned short #define COLORREF DWORD #define HDC void* #define HWND void* #define LPSTR char* #define UINT unsigned int #define TRUE 1 #define FALSE 0 #define ULONGLONG unsigned long long #define LONGLONG long long typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; #endif #ifdef __cplusplus extern "C" { #endif /***********************************************************************************************/ /* 常量定义 */ /***********************************************************************************************/ /* 通道号 */ #define FUNC_MAX_PORT 511 // 最大通道号,通道号范围[0,512) /* 音频幅值 */ #define MIN_WAVE_COEF -100 // PLAY_AdjustWaveAudio使用 #define MAX_WAVE_COEF 100 // PLAY_AdjustWaveAudio使用 /* 音频采集长度 */ #define MIN_AUDIO_RECORD_LEN 320 // 最小音频采集长度 #define MAX_AUDIO_RECORD_LEN 4096 // 最大音频采集长度 /* 显示相关 */ #define MAX_DISPLAY_WND 64 // 设置的区域序号的最大值 /* 播放缓存相关 */ #define BUF_VIDEO_SRC 1 // 视频源缓冲 #define BUF_AUDIO_SRC 2 // 音频源缓冲 #define BUF_VIDEO_RENDER 3 // 解码后视频数据缓冲 #define BUF_AUDIO_RENDER 4 // 解码后音频数据缓冲 /* 文件跳转方式 */ #define BY_FRAMENUM 1 // 按帧号方式(PLAY_GetKeyFramePos使用) #define BY_FRAMETIME 2 // 按时间方式(PLAY_GetKeyFramePos使用) /* 数据流相关 */ #define SOURCE_BUF_MAX 1024*100000 // 数据流缓冲区最大长度 #define SOURCE_BUF_MIN 1024*1024 // 数据流缓冲区最小长度 #define STREAME_REALTIME 0 // 实时流模式 #define STREAME_FILE 1 // 文件流模式 /* 音频位宽 */ #define T_AUDIO16 101 // 16位音频数据类型 #define T_AUDIO8 100 // 8位音频数据类型 /* 解码后的视频格式 */ #define T_UYVY 1 // UYVY类型的YUV数据,现在不支持 #define T_IYUV 3 // IYUV(I420)类型YUV数据 #define T_NV12 5 // NV12类型yuv数据,现在只支持bmp32抓图 #define T_RGB32 7 // RGB32类型,现在不支持 /* avi转码 */ #define AVI_MEDIACHANGE_FRAMERATE 1 // 帧率改变 #define AVI_MEDIACHANGE_RESOLUTION 2 // 分辨率改变 /* 水印相关 */ #define WATERMARK_DATA_TEXT 0 // 文字 #define WATERMARK_DATA_JPEG_BMP 1 // JPEG或者BMP图片 #define WATERMARK_DATA_FRAMEDATA 3 // 帧数据 /* 错误码 */ #define DH_PLAY_NOERROR 0 //无错误 #define DH_PLAY_COMMON_ERROR 1 //普通错误 #define DH_PLAY_PARA_INVALID 2 //参数无效 #define DH_PLAY_ORDER_ERROR 3 //调用顺序不对 #define DH_PLAY_PORT_OPEN 4 //通道已经被打开 #define DH_PLAY_PORT_CLOSE 5 //通道已经被关闭 #define DH_PLAY_PORT_INVALID 6 //通道号无效 #define DH_PLAY_PORT_EXIST 7 //通道已经存在 #define DH_PLAY_OPEN_FILE_ERROR 8 //打开文件失败 #define DH_PLAY_INTERFACE_NOT_SUPPORT 9 //接口不支持 #define DH_PLAY_HWND_INVALID 10 //窗口句柄无效 #define DH_PLAY_PLAY_ERROR 11 //播放失败 #define DH_PLAY_SPEED_INVALID 12 //速度无效 #define DH_PLAY_NOT_FILE 13 //非文件模式 #define DH_PLAY_NOT_STREAM 14 //非流模式 #define DH_PLAY_NO_FRAME 15 //当前没有帧可用 #define DH_PLAY_INDEX_NOT_COMPLETE 16 //索引没有建立完成 #define DH_PLAY_INDEX_COMPLETE 17 //已建立文件索引 #define DH_PLAY_GET_FILE_SIZE_ERROR 18 //获取文件大小失败 #define DH_PLAY_CREATE_THREAD_FAIL 19 //创建线程失败 #define DH_PLAY_CREATE_EVENT_FAIL 20 //创建句柄失败 #define DH_PLAY_SOUND_SHARE_MODE 21 //处于共享声音模式 #define DH_PLAY_INCLUDE_SOUND_SHARE_PORT 22 //该端口已包含 #define DH_PLAY_NOT_INCLUDE_SOUND_SHARE_PORT 23 //该端口未包含 #define DH_PLAY_CREATE_DIR_ERROR 24 //创建路径失败 #define DH_PLAY_CREATE_FILE_ERROR 25 //创建文件失败 #define DH_PLAY_CONVERT_YUV_ERROR 26 //转到yuv失败 #define DH_PLAY_CONVERT_JPG_ERROR 27 //转到jpg失败 #define DH_PLAY_CONVERT_BMP_ERROR 28 //转到bmp失败 #define DH_PLAY_CONVERT_TIFF_ERROR 29 //转到tiff失败 #define DH_PLAY_HW_CATCH_ERROR 30 //硬解码抓拍失败 #define DH_PLAY_CREATE_VIDEO_RENDER_ERROR 31 //创建视频渲染失败 #define DH_PLAY_NOT_SUPPORT_REF_VALUE 32 //不支持外部索引设置 #define DH_PLAY_FORMAT_NOT_SUPPORT 33 //格式不支持 #define DH_PLAY_CREATE_RECORD_ERROR 34 //创建录像失败 #define DH_PLAY_OPEN_RECORD_ERROR 35 //打开录像失败 #define DH_PLAY_FRAMERATE_ERROR 36 //帧率错误 #define DH_PLAY_CREATE_AUDIO_RECORD_ERROR 37 //创建音频录像失败 #define DH_PLAY_OPEN_AUDIO_RECORD_ERROR 38 //打开音频录像失败 #define DH_PLAY_AES_ALLOC_ERROR 39 //调用aes_alloc失败 #define DH_PLAY_BUF_OVER 40 //缓冲区已满 #define DH_PLAY_ALLOC_MEMORY_ERROR 41 //分配内存失败 /***********************************************************************************************/ /* 枚举定义 */ /***********************************************************************************************/ /* 渲染模式 */ typedef enum { RENDER_NOTSET = 0, // 未设置 RENDER_GDI, // GDI渲染 RENDER_X11 = RENDER_GDI, // 非windows平台X11渲染 RENDER_DDRAW, // ddraw渲染 RENDER_OPENGL = RENDER_DDRAW, // 非windows平台opengl渲染 RENDER_D3D, // D3D渲染,默认等同于D3D9渲染 RENDER_D3D9 = RENDER_D3D, // D3D9渲染 RENDER_WGL, // windows平台opengl渲染 RENDER_D3D11 // D3D11渲染 }RenderType; /* 解码模式 */ typedef enum { DECODE_NOTSET = 0, // 未设置 DECODE_SW, // 软解 DECODE_HW, // 硬解码拷贝模式(如使用windows平台,使用d3d9接口) DECODE_HW_FAST, // 硬解码直接显示模式(如使用windows平台,使用d3d9接口) DECODE_MSDK, // 硬解码,调用intel media sdk,已废弃 DECODE_HW_FAST_D3D11, // 硬解码直接显示模式,使用d3d11接口,仅限windows平台 }DecodeType; /* 图片格式 */ typedef enum __tPicFormats { PicFormat_BMP = 0, // BMP32类型 PicFormat_JPEG, // JPEG类型 PicFormat_JPEG_70, // 70%质量的JPEG类型 PicFormat_JPEG_50, // 50%质量的JPEG类型 PicFormat_JPEG_30, // 30%质量的JPEG类型 PicFormat_JPEG_10, // 10%质量的JPEG类型 PicFormat_BMP24, // BMP24类型 PicFormat_TIFF // TIFF类型 } tPicFormats; /* 获取媒体信息格式 */ typedef enum _CMD_TYPE { PLAY_CMD_GetTime = 1, // 编码中时间信息,为公历年月日 PLAY_CMD_GetFileRate = 2, // 帧率信息 PLAY_CMD_GetMediaInfo = 3, // 媒体信息 PLAY_CMD_GetRenderNum = 4, // 当前要渲染的帧号 PLAY_CMD_GetRenderTime = 5, // 当前要渲染的时间,绝对时间 PLAY_CMD_GetSrcTime = 6, // 编码中时间信息,为1970年7月1日后后持续的秒数 PLAY_CMD_GetCurRenderNum = 7, // 当前帧号,PLAY_CMD_GetRenderNum是上一帧的帧号 PLAY_CMD_GetRenderTimeStamp = 8 // 当前要渲染的时间戳,相对时间戳 } CMD_TYPE_E; /* 音视频同步策略 */ typedef enum { AV_SYNC_VIDEO_MASTER, // 以视频为基准(非音视频同步方式) AV_SYNC_AUDIO_TIME_STAMP // 以音频时间戳为基准 }AV_SYNC_TYPE; /***********************************************************************************************/ /* 结构体定义 */ /***********************************************************************************************/ /* 局部显示区域 */ typedef struct _tagRECT { LONG left; LONG top; LONG right; LONG bottom; }DISPLAYRECT; /* 时间结构 */ #ifndef _DHTIME_ #define _DHTIME_ typedef struct _DHTIME { DWORD second :6; // 秒 0-59 DWORD minute :6; // 分 0-59 DWORD hour :5; // 时 0-23 DWORD day :5; // 日 1-31 DWORD month :4; // 月 1-12 DWORD year :6; // 年 2000-2063 } DHTIME,*pDHTIME; #endif /* 文件信息结构,本地使用 */ #define UUID_MAX_LEN 96 //分区唯一标识长度 #define MAX_DEV_NAME_LEN 32 //分区名称长度 typedef struct _FILE_INFO { UINT channel; //通道号 BYTE type; //文件类型,按照数值计算 BYTE lock_flag; //锁定类型(类型定义见dhfs_file_state) BYTE video_audio; //视频或音频 BYTE image; //bit0~3图像质量(bit4~6保留, bit7 表示夏令时) DHTIME start_time; //开始时间 DHTIME end_time; //结束时间 UINT file_length; //文件长度,单位为KB UINT first_clus_no; //文件首簇号 UINT ud_no; //用户数据号 char part[MAX_DEV_NAME_LEN]; //文件所在的分区名称, 如:"dev/sda_0" char uuid[UUID_MAX_LEN]; //文件所在分区uuid,每个分区的唯一标识,重新卸载|挂载后会更新 UINT rev[9]; }FILE_INFO,*pFILE_INFO; /* 帧位置信息 */ typedef struct { LONGLONG nFilePos; // 指定帧在文件中的偏移位置 LONG nFrameLen; // 帧长度 LONG nFrameNum; // 帧序号 LONG nFrameTime; // 帧时间 LONG nErrorFrameNum; // 保留,暂无使用 SYSTEMTIME* pErrorTime; // 保留,暂无使用 LONG nErrorLostFrameNum; // 保留,暂无使用 LONG nErrorFrameSize; // 保留,暂无使用 }FRAME_POS,*PFRAME_POS; /* 帧信息 */ typedef struct { LONG nWidth; // 画面宽,单位像素。如果是音频数据则为0 LONG nHeight; // 画面高,如果是音频数据则为0 LONG nStamp; // 时标信息,单位毫秒 LONG nType; // 视频帧类型,T_AUDIO16,T_RGB32,T_IYUV LONG nFrameRate; // 视频表示帧率,音频表示采样率 }FRAME_INFO; /* 帧信息扩展字段 */ typedef struct { #define FRAME_TYPE_VIDEO 0 // 视频帧 #define FRAME_TYPE_AUDIO 1 // 音频帧 int nFrameType; // 视频帧类型,见上面定义 int nFrameSeq; // 帧序号 int nStamp; // 时标信息,单位毫秒 int nWidth; // 画面宽,单位像素。如果是音频数据则为0 int nHeight; // 画面高,如果是音频数据则为0 int nFrameRate; // 编码时产生的图像帧率 int nChannels; // 音频通道数 int nBitPerSample; // 音频采样位数 int nSamplesPerSec; // 音频采样频率 int nRemainData; // 缓冲剩余数据量 SYSTEMTIME nDataTime; // 时间 int nFrameSubType; // 视频帧子类型 int nReserved[58]; // 保留字段 }FRAME_INFO_EX; /* 解码后的帧信息 */ typedef struct { int nFrameType; // 帧类型,定义见FRAME_INFO_EX里nFrameType字段 void* pAudioData; // 音频数据,如果是音频帧 int nAudioDataLen; // 音频数据长度 void* pVideoData[3]; // 分别表示视频的YUV三个分量 int nStride[3]; // 分别表示YUV三个分量的跨距 int nWidth[3]; // 分别表示YUV三个分量的宽度 int nHeight[3]; // 分别表示YUV三个分量的高度 SYSTEMTIME nDataTime; // 帧时间 int nReserved[60]; // 保留字段 }FRAME_DECODE_INFO; /* 媒体信息 */ typedef struct { int lWidth; // 画面宽,单位像素 int lHeight; // 画面高 int lFrameRate; // 帧率 int lChannel; // 音频通道数 int lBitPerSample; // 音频采样位数 int lSamplesPerSec; // 音频采样频率 }MEDIA_INFO; /***********************************************************************************************/ /* 接口 */ /***********************************************************************************************/ /************************************************************************/ //> 获取版本号 /************************************************************************/ /** * 获取播放库SDK主版本号,次版本号和SVN版本号。 * * @return 最高1位表示当前的主版本号;第2~3位表示次版本号;其余的表示SVN版本号。 * 如:返回值34033722表示:主版本号是3,次版本号是40,SVN版本号是33722。 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetSdkVersion(); /************************************************************************/ //> 错误码 /************************************************************************/ /** * 获取错误码。 * * @return 错误码 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetLastErrorEx(); /************************************************************************/ //> 日志开关 /************************************************************************/ /** * 日志调试开关,默认为Warn等级,打印较少。如果需要开启详细日志打印,建议为Debug等级。 * Windows平台生成为当前库目录下的playsdk.log文件,其他非windows为控制台打印。 * */ typedef enum { LOG_LevelUnknown= 0, // 未知等级 LOG_LevelFatal, // fatal等级,当设置为此等级时,有一种打印输出(fatal)都有输出 LOG_LevelError, // error等级,当设置为此等级时,有两种打印输出(fatal,error)都有输出 LOG_LevelWarn, // warn等级,当设置为此等级时,有三种打印输出(fatal,error,warn)都有输出 LOG_LevelInfo, // info等级,当设置为此等级时,有四种打印输出(fatal,error,warn,info)都有输出 LOG_LevelTrace, // Trace等级,当设置为此等级时,有五种打印输出(fatal,error,warn,info,trace)都有输出 LOG_LevelDebug // Debug等级,当设置为此等级时,以上六种打印(fatal,error,warn,info,trace,debug)都有输出 }LOG_LEVEL; PLAYSDK_API void CALLMETHOD PLAY_SetPrintLogLevel(LOG_LEVEL logLevel); /************************************************************************/ //> 播放端口号 /************************************************************************/ /** * 获取空闲通道号,范围在101~511。 * * @param[out] plPort 获取到的空闲通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetFreePort(LONG *plPort); /** * 释放通道号。 * * @param[in] lPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_ReleasePort(LONG lPort); /************************************************************************/ //> 文件操作 /************************************************************************/ /** * 打开播放文件。 * * @param[in] nPort 通道号 * @param[in] sFileName 文件名 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_OpenFile(LONG nPort,LPSTR sFileName); /** * 关闭文件。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_CloseFile(LONG nPort); /** * 文件结束回调函数。 * * @param[in] nPort 通道号 * @param[in] pUserData 用户数据 */ typedef void (CALLBACK *fFileEndCBFun)(DWORD nPort, void* pUserData); /** * 文件结束回调。 * * @param[in] nPort 通道号 * @param[out] pFileEndCBFun 文件结束函数回调指针 * @param[in] pUserData 用户数据 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetFileEndCallBack(LONG nPort, fFileEndCBFun pFileEndCBFun, void* pUserData); /************************************************************************/ //> 流操作 /************************************************************************/ /** * 设置流播放模式。 * * @param[in] nPort 通道号 * @param[in] nMode 播放模式,0实时流,1文件流 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetStreamOpenMode(LONG nPort,DWORD nMode); /** * 获取播放模式。 * * @param[in] nPort 通道号 * @return LONG,STREAM_MODE_REALSTREAM或STREAM_MODE_FILESTREAM */ PLAYSDK_API LONG CALLMETHOD PLAY_GetStreamOpenMode(LONG nPort); /** * 打开流。 * * @param[in] nPort 通道号 * @param[in] pFileHeadBuf 文件头数据 * @param[in] nSize 文件头长度 * @param[in] nBufPoolSize 设置播放器中存放数据流的缓冲区大小。范围是SOURCE_BUF_MIN~SOURCE_BUF_MAX * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_OpenStream(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize); /** * 关闭流。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_CloseStream(LONG nPort); /** * 输入数据流,PLAY_Play之后使用。 * * @param[in] nPort 通道号 * @param[in] pBuf 流数据缓冲区地址 * @param[in] nSize 流数据长度 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_InputData(LONG nPort,PBYTE pBuf,DWORD nSize); /************************************************************************/ //> 声音相关 /************************************************************************/ /** * 以独占方式打开声音。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_PlaySound(LONG nPort); /** * 关闭声音(独占方式)。 * * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StopSound(); /** * 以共享方式打开声音。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_PlaySoundShare(LONG nPort); /** * 关闭声音(共享方式)。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StopSoundShare(LONG nPort); /** * 设置音量。 * * @param[in] nPort 通道号 * @param[in] nVolume 音量值,范围0-0xFFFF * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetVolume(LONG nPort,WORD nVolume); /** * 获取音量。 * * @param[in] nPort 通道号 * @return WORD,音量值 * @note 这里的音量是指声卡输出的主音量,会影响到其他的声音应用。 */ PLAYSDK_API WORD CALLMETHOD PLAY_GetVolume(LONG nPort); /** * 音频采集数据回调函数。 * * @param[in] pDataBuffer 数据地址 * @param[in] DataLength 数据长度 * @param[in] pUserData 用户数据 */ typedef void (CALLBACK *pCallFunction)(LPBYTE pDataBuffer, DWORD DataLength, void* pUserData); /** * 打开音频采集功能。 * * @param[in] pProc音频采集数据回调指针 * @param[in] nBitsPerSample 音频采样位数 * @param[in] nSamplesPerSec 音频采样率 * @param[in] nLength 数据缓冲的长度,范围320-4096 * @param[in] encodetype 对采集数据进行编码设置,0:pcm,1:g711a,2:g711u。pcm回调裸数据,g711a和g711u回调带新大华头的数据 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_OpenAudioRecord(pCallFunction pProc, LONG nBitsPerSample, LONG nSamplesPerSec, LONG nLength, LONG encodetype, void* pUserData); /** * 关闭音频采集功能。 * * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_CloseAudioRecord(); /** * 音频采集变声功能。 * * @param[in] bStart 开启关闭音频采集变声,1-开启,0-关闭, 仅支持Andriod/IOS * @param[in] nPitch 声音变化的程度,范围:-50-50,0时声音不变 * @param[in] bQuick 是快速实现,0-不使能,音质提高,cpu消耗增,1-使能,音质下降,cpu消耗减少 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SpeechChange(BOOL bStart, int nPitch, BOOL bQuick); /** * 设置音频采集缩放比例。 * * @param[in] fRatio 缩放比例。大于0小于1为音频缩小;1为原始音频;大于1为音频放大 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetAudioRecScaling(float fRatio); /** * 获取音频采集缩放比例。 * * @param[out] pfRatio 缩放比例。大于0小于1为音频缩小;1为原始音频;大于1为音频放大 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetAudioRecScaling(float* pfRatio); /** * 设置音频播放缩放比例。 * * @param[in] nPort 通道号 * @param[in] fRatio 缩放比例。大于0小于1为音频缩小;1为原始音频;大于1为音频放大。 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetAudioRenderScaling(LONG nPort, float fRatio); /** * 获取音频播放缩放比例。 * * @param[in] nPort 通道号 * @param[out] pfRatio 缩放比例。大于0小于1为音频缩小;1为原始音频;大于1为音频放大 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetAudioRenderScaling(LONG nPort, float* pfRatio); /** * 调整WAVE波形,可以改变声音的大小。它和PLAY_SetVolume的不同在于,它是调整声音数据,只对该路其作用,而PLAY_SetVolume是 * 调整声卡音量, 对整个系统起作用。 * * @param[in] nPort 通道号 * @param[in] nCoefficient 调整参数,0是不调整,其他取值范围从MIN_WAVE_COEF到MAX_WAVE_COEF。若设定为MIN_WAVE_COEF表 * 示音量最低,若设定为MAX_WAVE_COEF表示音量最大 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_AdjustWaveAudio(LONG nPort,LONG nCoefficient); /************************************************************************/ //> 播放控制 /************************************************************************/ /** * 开启播放。播放开始,播放视频画面大小将根据hWnd窗口调整,要全屏显示,只要把hWnd窗口放大到全屏。开始解码线程,若送入的显示窗 * 口句柄为NULL,则不显示,但是不影响解码。 * * @param[in] nPort 通道号 * @param[in] hWnd 播放视频的窗口句柄 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_Play(LONG nPort, HWND hWnd); /** * 关闭播放。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_Stop(LONG nPort); /** * 暂停/恢复播放。 * * @param[in] nPort 通道号 * @param[in] nPause 1:暂停;0:恢复 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_Pause(LONG nPort,DWORD nPause); /** * 慢速播放。每次调用将使当前播放速度慢一倍;要恢复正常播放调用PLAY_Play(),从当前位置开始正常播放。 * 播放速度范围为[1/64,64]。 * * @param[in] nPort 通道号 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_Slow(LONG nPort); /** * 快速播放。每次调用将使当前播放速度加快一倍,要恢复正常播放调用PLAY_Play(),从当前位置开始正常播 放;高清码流在高倍速播放时,由于受到解码和显示的限制,可能达不到所设置的速度。 * 播放速度范围为[1/64, 64]。 * * @param[in] nPort 通道号 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_Fast(LONG nPort); /** * 单帧播放。要恢复正常播放调用PLAY_ Play。 * * @param[in] nPort 通道号 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_OneByOne(LONG nPort); /** * 单帧倒放。要恢复正常播放调用PLAY_ Play。只支持文件播放,且必须在文件索引生成之后才能调用。 * * @param[in] nPort 通道号 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_OneByOneBack(LONG nPort); /** * 设置视频参数。 * * @param[in] nPort 通道号 * @param[in] nRegionNum 显示区域。如果只有一个显示区域(通常情况)设为0 * @param[in] nBrightness 亮度。默认64;范围0-128 * @param[in] nContrast 对比度。默认64;范围0-128 * @param[in] nSaturation 饱和度。默认64;范围0-128 * @param[in] nHue 色调。默认64;范围0-128 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetColor(LONG nPort, DWORD nRegionNum, int nBrightness, int nContrast, int nSaturation, int nHue); /** * 获取视频参数。 * * @param[in] nPort 通道号 * @param[in] nRegionNum 显示区域 * @param[out] pBrightness 亮度 * @param[out] pContrast 对比度 * @param[out] pSaturation 饱和度 * @param[out] pHue 色调 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetColor(LONG nPort, DWORD nRegionNum, int *pBrightness, int *pContrast, int *pSaturation, int *pHue); /** * 设置音视频播放策略。 * * @param[in] nPort 通道号 * @param[in] nAVSyncType 码流播放基准,见AV_SYNC_TYPE * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetAVSyncType(LONG nPort,AV_SYNC_TYPE nAVSyncType); /** * 改变视频播放速度。在非1倍速下音频会被丢弃。 * * @param[in] nPort 通道号 * @param[in] fCoff 播放速度,范围是1/64-64。当播放速度较快时可能需要抽帧播放 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetPlaySpeed(LONG nPort, float fCoff); /** * 设置播放方向。 * * @param[in] nPort 通道号 * @param[in] emDirection 播放方向。0:正放;1:倒放 * @return 成功返回TURE;失败返回FALSE。 * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetPlayDirection(LONG nPort, DWORD emDirection); /** * 设置延迟播放时间。[nDelay,nThreshold],小于nDelay稍微慢放,大于nThreshold稍微快放,两者之间正常播放。 * * @param[in] nPort 通道号 * @param[in] nDelay(ms) 延迟时间。缓冲达到该时间正常播放,小于该时间稍微慢放 * @param[in] nThreshold(ms) 阈值时间。缓冲小于该时间正常播放,大于该时间稍微快放 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDelayTime(LONG nPort, int nDelay, int nThreshold); /** * 设置播放策略,只对实时流有效。 * * @param[in] nPort 通道号 * @param[in] nStartTime(ms) 开始播放时间 * @param[in] nSlowTime(ms) 阈值时间。缓冲小于该时间正常播放,大于该时间稍微快放 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetPlayMethod(LONG nPort, int nStartTime, int nSlowTime, int nFastTime, int nFailedTime); /* 实时流数据缓冲模式 */ typedef enum { CACHE_MODE_OFF = 0, // 关闭实时流自适应缓冲模式 ADAPTIVE_CACHE, // 自适应缓冲 REALTIME_FIRST, // 实时优先 FLUENCY_FIRST, // 流畅优先 } CACHE_MODE; /** * 设置播放缓冲模式,只对实时流有效。 * * @param[in] nPort 通道号 * @param[in] cacheMode 实时数据缓冲模式 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetCacheMode(LONG nPort, CACHE_MODE cacheMode); /** * 设置音频播放策略(只适用于对讲业务),需在PLAY_PlaySound之后调用 * * @param[in] nPort 通道号 * @param[in] nClearTime(ms) 缓冲清除阀值 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetAudioPlayMethod(LONG nPort, int nClearTime); /** * 设置图像翻转。范围0-3。 * * @param[in] nPort 通道号 * @param[in] nrotateType 翻转类型。0:不旋转;1:旋转90度;2:旋转180度;3:旋转270度 * @return 成功返回TURE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetRotateAngle(LONG nPort , int nrotateType); /************************************************************************/ //> 文件定位 /************************************************************************/ /** * 设置文件播放指针的相对位置(百分比)。 * * @param[in] nPort 通道号 * @param[in] fRelativePos 文件长度的百分比 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetPlayPos(LONG nPort,float fRelativePos); /** * 获取文件播放指针的相对位置(百分比)。 * * @param[in] nPort 通道号 * @return float,返回文件长度的相对位置,范围0-100% */ PLAYSDK_API float CALLMETHOD PLAY_GetPlayPos(LONG nPort); /** * 设置文件当前播放时间。 * * @param[in] nPort 通道号 * @param[in] nTime 设置文件播放位置到指定时间,单位毫秒 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetPlayedTimeEx(LONG nPort,DWORD nTime); /** * 获取文件当前播放时间。 * * @param[in] nPort 通道号 * @return DWORD,文件当前播放的时间,单位毫秒 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetPlayedTimeEx(LONG nPort); /** * 获取当前播放的帧序号,PLAY_GetPlayedFrames是总共解码的帧数。如果文件 * 播放位置不被改变,那么这两个函数的返回值应该非常接近,除非码流丢失 * 数据。 * * @param[in] nPort 通道号 * @return DWORD,当前播放的帧序号 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetCurrentFrameNum(LONG nPort); /** * 设置文件当前帧播放帧号,此函数必须在文件索引生成之后才能调用。 * * @param[in] nPort 通道号 * @param[in] nFrameNum 帧序号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetCurrentFrameNum(LONG nPort,DWORD nFrameNum); /** * 获取已播放的帧数。 * * @param[in] nPort 通道号 * @return DWORD,已经播放的视频帧数 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetPlayedFrames(LONG nPort); /** * 获取当前文件播放时间。 * * @param[in] nPort 通道号 * @return DWORD,文件当前播放的时间,单位秒 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetPlayedTime(LONG nPort); /** * 获取文件总时间。 * * @param[in] nPort 通道号 * @return DWORD,文件总的时间长度值,单位秒 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetFileTime(LONG nPort); /** * 获取文件总帧数。 * * @param[in] nPort 通道号 * @return DWORD,文件中的总帧数 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetFileTotalFrames(LONG nPort); /************************************************************************/ //> 文件索引 /************************************************************************/ /** * 建立索引回调函数。 * * @param[in] nPort 通道号 * @param[in] pUserData 用户自定义参数 */ typedef void(CALLBACK *fFileRefDoneCBFun)(DWORD nPort, void* pUserData); /** * 设置建立索引回调,在文件打开时生成文件索引。这个过程耗时比较长,大约 * 每秒处理40M左右的数据,因为从硬盘读数据比较慢,建立索引的过程是在 * 后台完成,需要使用索引的函数要等待这个过程结束,其他接口不受影响。 * * @param[in] nPort 通道号 * @param[out] pFileRefDoneCBFun 建立索引回调函数指针 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetFileRefCallBack(LONG nPort, fFileRefDoneCBFun pFileRefDoneCBFunc, void* pUserData); /** * 建立索引回调函数。 * * @param[in] nPort 通道号 * @param[in] bIndexCreated 索引创建标志,TRUE索引创建成功;FALSE失败 * @param[in] pUserData 用户自定义参数 */ typedef void (CALLBACK *fFileRefDoneCBFunEx)(DWORD nPort, BOOL bIndexCreated, void* pUserData); /** * 设置建立索引回调,在文件打开时生成文件索引。这个过程耗时比较长,大约 * 每秒处理40M左右的数据,因为从硬盘读数据比较慢,建立索引的过程是在 * 后台完成,需要使用索引的函数要等待这个过程结束,其他接口不受影响。 * * @param[in] nPort 通道号 * @param[out] pFileRefDoneCBFunEx 建立索引回调函数指针 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetFileRefCallBackEx(LONG nPort, fFileRefDoneCBFunEx pFileRefDoneCBFunEx, void* pUserData); /** * 查找指定位置之前的关键帧位置,图像解码必须从关键帧开始,如果用户保存 * 的文件不是从关键帧开始的,那么倒下一个关键帧之前的数据会被忽略。如 * 果用户要截取文件中的一段数据,则应该考虑从关键帧开始截取。结束位置 * 则关系不大,最多丢失3帧数据。在文件索引建立完全的前提下,与 * PLAY_GetNextKeyFramePos联合使用,可以用来实现剪辑录像文件,剪辑精度 * 与关键帧间隔有关。 * * @param[in] nPort 通道号 * @param[in] nValue 当前位置,可以是时间或帧号,类型由nType指定 * @param[in] nType 指定nValue的类型。如果nType是BY_FRAMENUM,则nValue表示帧号;nType是BY_FRAMETIME,则nValue表示时间,单位ms。 * @param[in] pFramePos 查找到的关键帧的文件位置信息结构指针,详见PFRAME_POS。 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos); /** * 查找指定位置之后的关键帧位置。 * * @param[in] nPort 通道号 * @param[in] nValue 当前位置,可以是时间或帧号,类型由nType指定 * @param[in] nType 指定nValue的类型。如果nType是BY_FRAMENUM,则nValue表示帧号;nType是BY_FRAMETIME,则nValue表示时间,单位ms。 * @param[in] pFramePos 查找到的关键帧的文件位置信息结构指针,详见PFRAME_POS。 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetNextKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos); /** * 获取文件索引,以便下次打开同一个文件时直接使用这个信息。必须在索引建成后才能获得信息。 * * @param[in] nPort 通道号 * @param[in] pBuffer 索引信息 * @param[in/out] pSize 输入pBuffer的大小,输出索引信息大小。可以在第一次指定pSize=0,pBuffer=NULL, * 从pSize的返回值获得需要的缓冲区大小。然后分配足够的缓冲,再调用一次。 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetRefValue(LONG nPort,BYTE *pBuffer, DWORD *pSize); /** * 设置文件索引,索引信息及其长度必须准确。如果已经有了文件索引信息,可以 * 不再调用生成索引的回调函数PLAY_SetFileRefCallBackEx,直接输入索引信息。 * * @param[in] nPort 通道号 * @param[in] pBuffer 索引信息 * @param[in] pSize 索引信息的长度 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetRefValue(LONG nPort,BYTE *pBuffer, DWORD nSize); /************************************************************************/ //> 获取播放或解码信息 /************************************************************************/ /** * 设置解码回调流类型,在PLAY_Play之前调用。 * * @param[in] nPort 通道号 * @param[in] nStream 1 视频流;2 音频流;3 复合流 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDecCBStream(LONG nPort,DWORD nStream); /** * 解码回调函数。 * * @param[in] nPort 通道号 * @param[in] pFrameDecodeInfo 解码后的音视频数据 * @param[in] pFrameInfo 图像和声音信息,请参见FRAME_INFO结构体 * @param[in] pUser 用户自定义参数 */ typedef void (CALLBACK* fCBDecode)(LONG nPort, FRAME_DECODE_INFO* pFrameDecodeInfo, FRAME_INFO_EX* pFrameInfo, void* pUser); /** * 设置解码回调,替换播放器中的显示部分,由用户自己控制显示,该函数在 * PLAY_Play之前调用,在PLAY_Stop时自动失效,下次调用PLAY_Play之前 * 需要重新设置。解码部分不控制速度,只要用户从回调函数中返回,解码器 * 就会解码下一部分数据。适用于只解码不显示的情形。 * * @param[in] nPort 通道号 * @param[out] cbDec 解码回调函数指针,不能为NULL * @param[in] pUser 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDecodeCallBack(LONG nPort, fCBDecode cbDec, void* pUser); /** * 视频抓图回调函数。 * * @param[in] nPort 通道号 * @param[in] pBuf 返回图像数据 * @param[in] nSize 返回图像数据大小 * @param[in] nWidth 画面宽,单位像素 * @param[in] nHeight 画面高,单位像素 * @param[in] nStamp 时标信息,单位毫秒 * @param[in] nType 数据类型,T_RGB32,T_UYVY,详见宏定义说明 * @param[in] nReceaved 对应用户自定义参数 */ typedef void (CALLBACK* fDisplayCBFun)(LONG nPort,char * pBuf,LONG nSize,LONG nWidth,LONG nHeight,LONG nStamp,LONG nType, void* pReserved); /** * 设置视频抓图回调函数,如果要停止回调,可以把回调函数指针设为NULL,该函数可以在任何时候调用。 * * @param[in] nPort 通道号 * @param[out] DisplayCBFun 抓图回调函数,可以为NULL * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDisplayCallBack(LONG nPort, fDisplayCBFun DisplayCBFun, void* pUserData); /** * 音频解码后的WAVE数据回调函数。 * * @param[in] nPort 通道号 * @param[in] pAudioBuf wave格式音频数据 * @param[in] nSize 音频数据长度 * @param[in] nStamp 时标(ms) * @param[in] nType 音频类型T_AUDIO16, 采样率8000,单声道,每个采样点16位表示 * @param[in] pUserData 用户自定义数据 */ typedef void (CALLBACK * fAudioCBFun)(LONG nPort, char * pAudioBuf, LONG nSize, LONG nStamp, LONG nType, void* pUserData); /** * 音频解码后的WAVE数据回调。 * * @param[in] nPort 通道号 * @param[out] AudioCBFun 音频解码回调函数 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetAudioCallBack(LONG nPort, fAudioCBFun AudioCBFun, void* pUserData); /** * 解码回调。与PLAY_SetDecodeCallBack基本相同,不同的是解码回调的同时可以显示视频,建议不要在回调函数里面做长时间的逻辑处理,以免增加显示的延时。 * * @param[in] nPort 通道号 * @param[out] cbDec 解码回调函数指针,不能为NULL * @param[in] pUser 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ typedef fCBDecode fVisibleDecodeCallBackFunc; PLAYSDK_API BOOL CALLMETHOD PLAY_SetVisibleDecodeCallBack(LONG nPort, fVisibleDecodeCallBackFunc cbDec, void* pUser); /** * 解码回调函数。 * * @param[in] nPort 通道号 * @param[in] pBuf 解码后的音视频数据 * @param[in] nSize 解码后的音视频数据pBuf的长度 * @param[in] pFrameInfo 图像和声音信息,请参见FRAME_INFO结构体 * @param[in] pUserData 用户自定义参数 * @param[in] nReserved2 保留参数 */ typedef void (CALLBACK* fDecCBFun)(LONG nPort,char * pBuf,LONG nSize,FRAME_INFO * pFrameInfo, void* pUserData, LONG nReserved2); /** * 设置解码回调,替换播放器中的显示部分,由用户自己控制显示,该函数在 * PLAY_Play之前调用,在PLAY_Stop时自动失效,下次调用PLAY_Play之前 * 需要重新设置。解码部分不控制速度,只要用户从回调函数中返回,解码器 * 就会解码下一部分数据。适用于只解码不显示的情形。 * * @param[in] nPort 通道号 * @param[out] DecCBFun 解码回调函数指针,不能为NULL * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDecCallBack(LONG nPort, fDecCBFun DecCBFun); /** * 设置解码回调,替换播放器中的显示部分,由用户自己控制显示,该函数在 * PLAY_Play之前调用,在PLAY_Stop时自动失效,下次调用PLAY_Play之前 * 需要重新设置。解码部分不控制速度,只要用户从回调函数中返回,解码器 * 就会解码下一部分数据。适用于只解码不显示的情形。 * * @param[in] nPort 通道号 * @param[out] DecCBFun 解码回调函数指针,不能为NULL * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDecCallBackEx(LONG nPort, fDecCBFun DecCBFun, void* pUserData); /** * 解码回调函数。 * * @param[in] nPort 通道号 * @param[in] pBuf 解码后的音视频数据 * @param[in] nSize 解码后的音视频数据pBuf的长度 * @param[in] pFrameInfo 图像和声音信息,请参见FRAME_INFO结构体 * @param[in] pUserData 用户自定义参数 * @param[in] nReserved1 保留参数 */ typedef void (CALLBACK* fVisibleDecCBFun)(LONG nPort,char * pBuf,LONG nSize,FRAME_INFO * pFrameInfo, void* pUserData, LONG nReserved1); /** * 解码回调。与PLAY_SetDecCallBackEx基本相同,不同的是解码回调的同时可以 * 显示视频,建议不要在回调函数里面做长时间的逻辑处理,以免增加显示的延时。 * * @param[in] nPort 通道号 * @param[out] DecCBFun 解码回调函数指针,不能为NULL * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetVisibleDecCallBack(LONG nPort, fVisibleDecCBFun DecCBFun, void* pUserData); /** * 水印数据回调函数。 * * @param[in] buf 水印数据buffer指针 * @param[in] key 区分不同水印信息 * @param[in] len 缓冲的最大长度 * @param[in] reallen 缓冲的实际长度 * @param[in] len 缓冲的最大长度 * @param[in] reallen 缓冲的实际长度 * @param[in] type 1没有错误;2水印错误;3帧数据错误;4帧号错误;5帧头错误;6没有帧头 * @param[in] pUserData 用户自定义参数 * @return int 无意义 */ typedef int (CALLBACK* fGetWaterMarkInfoCallbackFunc)(char* buf, LONG key, LONG len, LONG reallen, LONG type, void* pUserData); /** * 设置水印数据回调。注意:水印校验回调设置后将不会进行解码显示。 * * @param[in] nPort 通道号 * @param[out] pFunc 水印回调函数指针 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetWaterMarkCallBack(LONG nPort, fGetWaterMarkInfoCallbackFunc pFunc, void* pUserData); /** * 水印数据回调函数。 * * @param[in] nPort 通道号 * @param[in] buf 水印数据缓冲 * @param[in] lTimeStamp 水印的时间戳 * @param[in] lInfoType 水印信息类型,有三种类型,WATERMARK_DATA_TEXT,WATERMARK_DATA_JPEG_BMP,WATERMARK_DATA_FRAMEDATA * @param[in] len 缓冲的最大长度 * @param[in] reallen 缓冲的实际长度 * @param[in] lCheckResult 1没有错误;2水印错误;3帧数据错误;4帧号错误;5帧头错误;6没有帧头 * @param[in] pUserData 用户自定义参数 * @return int 无意义 */ typedef int (CALLBACK* fGetWaterMarkInfoCallbackFuncEx)(LONG nPort, char* buf, LONG lTimeStamp, LONG lInfoType, LONG len, LONG reallen, LONG lCheckResult, void* pUserData); /** * 设置水印数据回调。注意:水印校验回调设置后将不会进行解码显示。 * * @param[in] nPort 通道号 * @param[out] pFunc 水印回调函数指针 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetWaterMarkCallBackEx(LONG nPort, fGetWaterMarkInfoCallbackFuncEx pFunc, void* pUserData); /** * 图像分辨率改变通知回调函数。 * * @param[in] nPort 通道号 * @param[in] pUserData 用户自定义参数 */ typedef void (CALLBACK *fEncChangeCBFun)(LONG nPort, void* pUserData); /** * 设置图像分辨率改变通知回调,打开文件前使用。 * * @param[in] nPort 通道号 * @param[out] EncChangeCBFun 分辨率改变通知回调 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetEncTypeChangeCallBack(LONG nPort, fEncChangeCBFun EncChangeCBFun, void* pUserData); /** * 图像分辨率改变通知回调函数。 * * @param[in] nPort 通道号 * @param[in] pUserData 用户自定义参数 * @param[in] nWidth 图像宽 * @param[in] nHeight 图像高 */ typedef void(CALLBACK *fEncChangeCBFunEx)(LONG nPort, void* pUserData,LONG nWidth, LONG nHeight); /** * 设置图像分辨率改变通知回调,打开文件前使用。 * * @param[in] nPort 通道号 * @param[out] EncChangeCBFun 分辨率改变通知回调 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetEncTypeChangeCallBackEx(LONG nPort, fEncChangeCBFunEx EncChangeCBFun, void* pUserData); /** * 查询信息。 * * @param[in] nPort 通道号 * @param[in] cmdType 指定状态查询指令,见CMD_TYPE_E * @param[in] buf 存放信息的缓冲 * @param[in] buflen 缓冲长度 * @param[out] returnlen 获取的信息的有效数据长度 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_QueryInfo(LONG nPort, int cmdType, char* buf, int buflen, int* returnlen); /** * 获取视频实时码率。 * * @param[in] nPort 通道号 * @param[out] pBitRate 输出参数,返回视频码率(单位为k) * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetRealFrameBitRate(LONG nPort, double* pBitRate); /** * 获取文件总帧数。 * * @param[in] nPort 通道号 * @return DWORD,获取当前帧率 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetCurrentFrameRate(LONG nPort); /** * 获取用于显示的图像大小(如果是鱼眼,则为矫正后的鱼眼图像),根据此大小来设置显示窗口的区域,可以不用显卡做缩放 * 工作,对于那些不支持硬件缩放的显卡来说非常有用。 * * @param[in] nPort 通道号 * @param[out] pWidth 图像宽 * @param[out] pHeight 图像高 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetPictureSize(LONG nPort,LONG *pWidth,LONG *pHeight); /** * 帧数据回调函数。 * * @param[in] nPort 通道号 * @param[in] pBuf 数据指针 * @param[in] nSize 数据长度 * @param[in] pMutexInfo 帧信息,指向DEMUX_INFO结构 * @param[in] pMutexInfoEx 帧数据或裸数据,指向DemuInfoEx结构 * @param[in] pUserData 用户自定义数据 */ /* Demux帧类型 */ typedef enum { FRAME_UNKNOWN = 0, // 帧类型不可知 FRAME_VIDEO, // 帧类型是视频帧 FRAME_AUDIO, // 帧类型是音频帧 FRAME_DATA // 帧类型是数据帧 }FRAME_TYPE; /* Demux帧子类型 */ typedef enum { FRAME_SUB_TYPE_DATA_INVALID = 0, // 数据无效 FRAME_SUB_TYPE_VIDEO_I_FRAME = 1, // I帧 FRAME_SUB_TYPE_VIDEO_P_FRAME, // P帧 FRAME_SUB_TYPE_VIDEO_B_FRAME, // B帧 FRAME_SUB_TYPE_VIDEO_SMART_I_FRAME = 19, // smart I帧 FRAME_SUB_TYPE_VIDEO_SMART_P_FRAME, // smart P帧 FRAME_SUB_TYPE_DATA_CIPHER_AUXILIARY = 26 // 密码辅助帧 }FRAME_SUB_TYPE; /* Demux视频编码格式 */ typedef enum { ENCODE_VIDEO_UNKNOWN = 0, // 视频编码格式不可知 ENCODE_VIDEO_MPEG4, // 视频编码格式是MPEG4 ENCODE_VIDEO_HI_H264, // 视频编码格式是海思H264 ENCODE_VIDEO_JPEG, // 视频编码格式是标准JPEG ENCODE_VIDEO_DH_H264, // 视频编码格式是大华码流H264 ENCODE_VIDEO_JPEG2000 = 6, // 视频编码格式是标准JPEG2000 ENCODE_VIDEO_AVS = 7, // 视频编码格式是标准AVS ENCODE_VIDEO_STD_H264 = 8, // 视频编码格式是标准H264 ENCODE_VIDEO_MPEG2 = 9, // 视频编码格式是MPEG2 ENCODE_VIDEO_VNC = 10, // 视频编码格式是VNC ENCODE_VIDEO_SVAC = 11, // 视频编码格式是SVAC ENCODE_VIDEO_DH_H265 = 12 // 视频编码格式是H265 }ENCODE_VIDEO_TYPE; /* Demux音频编码格式 */ typedef enum { ENCODE_AUDIO_UNKNOWN = 0, ENCODE_AUDIO_PCM = 7, // 音频编码格式是PCM8 ENCODE_AUDIO_G729, // 音频编码格式是G729 ENCODE_AUDIO_IMA, // 音频编码格式是IMA ENCODE_PCM_MULAW, // 音频编码格式是PCM MULAW ENCODE_AUDIO_G721, // 音频编码格式是G721 ENCODE_PCM8_VWIS, // 音频编码格式是PCM8_VWIS ENCODE_MS_ADPCM, // 音频编码格式是MS_ADPCM ENCODE_AUDIO_G711A, // 音频编码格式是G711A ENCODE_AUDIO_AMR, // 音频编码格式是AMR ENCODE_AUDIO_PCM16, // 音频编码格式是PCM16 ENCODE_AUDIO_G711U = 22, // 音频编码格式是G711U ENCODE_AUDIO_G723 = 25, // 音频编码格式是G723 ENCODE_AUDIO_AAC, // 音频编码格式是AAC ENCODE_AUDIO_G726_40, // 音频编码格式是G726, 40kbps ENCODE_AUDIO_G726_32, // 音频编码格式是G726, 32kbps ENCODE_AUDIO_G726_24, // 音频编码格式是G726, 24kbps ENCODE_AUDIO_G726_16, // 音频编码格式是G726, 16kbps ENCODE_AUDIO_MP2, // 音频编码格式是mp2 ENCODE_AUDIO_OGG, // 音频编码格式是ogg vorbis ENCODE_AUDIO_MP3, // 音频编码格式是mp3 ENCODE_AUDIO_G722_1, // 音频编码格式是G722_1 ENCODE_AUDIO_OPUS = 38 // 音频编码格式是OPUS }ENCODE_AUDIO_TYPE; /* 码流封装格式 */ typedef enum { STREAM_TYPE_UNKNOWN = 0, // 未知码流 STREAM_TYPE_MPEG4, // MPEG4 STREAM_TYPE_DHPT =3, // 大华老码流:DHPT STREAM_TYPE_NEW, // 大华老码流:NEW STREAM_TYPE_HB, // 大华老码流:HB STREAM_TYPE_AUDIO, // 音频流 STREAM_TYPE_PS, // MPEG-2:PS STREAM_TYPE_DHSTD, // 大华最新的标准码流 STREAM_TYPE_ASF, // ASF STREAM_TYPE_3GPP, // 3GP STREAM_TYPE_RAW, // 大华老码流:裸码流 STREAM_TYPE_TS, // MPEG-2:TS STREAM_TYPE_SVC, // svc STREAM_TYPE_AVI, // AVI STREAM_TYPE_MP4, // MP4 STREAM_TYPE_CGI, // CGI STREAM_TYPE_WAV, // WAV音频 STREAM_TYPE_FLV, // FLV STREAM_TYPE_MKV, // mkv STREAM_TYPE_RTP, // RTP STREAM_TYPE_RAW_MPEG4, // MPEG4裸码流 STREAM_TYPE_RAW_H264, // H264裸码流 STREAM_TYPE_RAW_H265, // H265裸码流 STREAM_TYPE_WMV, // WMV STREAM_TYPE_RAW_MPEG2, // MPEG2裸码流 STREAM_TYPE_RAW_SVAC, // SVAC裸码流 STREAM_TYPE_MOV, STREAM_TYPE_VOB, // VOB STREAM_TYPE_RAW_H263, STREAM_TYPE_RM, STREAM_TYPE_DHPS, // DHPS }STREAM_TYPE; /* Demux扩展信息 */ typedef struct { char* pHead; // 帧数据(带大华头) int nLen; // 帧数据长度 char* pBody; // 裸数据(不带大华头) int nBodyLen; // 裸数据长度 int nRet; // 0:继续解码 1:不解码,默认为0 BYTE nEncryptType; // 加密类型,0:不加密 1:AES BYTE nRotateAngle; // 码流旋转角度 0:不旋转 1:90度旋转 2:180度旋转 3:270度旋转 char reserved1[2]; int nStreamType; // 码流封装格式,详见STREAM_TYPE定义 char reserved[120]; }DemuInfoEx; /* Demux基本信息 */ typedef struct { int type; // 详见FRAME_TYPE定义 int subtype; // 详见FRAME_SUB_TYPE定义 int encode; // 详见ENCODE_VIDEO_TYPE,ENCODE_AUDIO_TYPE定义 int sequence; // 帧序号 int width; // 视频宽 int height; // 视频高 int rate; // 帧率 int year; // 绝对时间年 int month; // 绝对时间月 int day; // 绝对时间日 int hour; // 绝对时间时 int minute; // 绝对时间分 int secode; // 绝对时间秒 LONG timestamp; // 相对时间戳 int channels; // 音频通道数 int bitspersample; // 音频采样深度 int samplespersecond;// 音频采样率 }DEMUX_INFO; typedef void (CALLBACK* fDemuxDecCBFun)(LONG nPort,char * pBuf, LONG nSize,void * pMutexInfo,void* pMutexInfoEx, void* pUserData); /** * 设置帧数据回调。 * * @param[in] nPort 通道号 * @param[out] DecCBFun 帧数据回调函数 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDemuxCallBack(LONG nPort, fDemuxDecCBFun DecCBFun, void* pUserData); /** * H264信息获取回调函数。 * * @param[in] nPort 通道号 * @param[in] pBuf 数据指针 * @param[in] nLen 数据长度 * @param[in] pUserData 用户自定义参数 */ typedef int (CALLBACK *fH264InfoCBFun)(LONG nPort, char* pBuf, LONG nLen, void* pUserData); /** * 设置H264信息获取回调函数。 * * @param[in] nPort 通道号 * @param[out] pH264InfoCBFun H264信息获取回调函数 * @param[in] nUser 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_Set264EncodeInfoCallBack(LONG nPort, fH264InfoCBFun pH264InfoCBFun, void* nUser); /** * 设置aes解密密钥。 * * @param[in] nPort 通道号 * @param[in] szKey 密钥的指针 * @param[in] nKeylen 密钥的长度 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetSecurityKey(LONG nPort,const char* szKey,DWORD nKeylen); /*加密类型*/ typedef enum { ENCRYPT_UNKOWN = 0, ENCRYPT_AES, ENCRYPT_AES256, ENCRYPT_AES256_GDPR2, ENCRYPT_SM1_ECB, /*国密加密算法SM1_ECB*/ ENCRYPT_SM1_OFB, /*国密加密算法SM1_OFB*/ ENCRYPT_SM4_ECB, /*国密加密算法SM4_ECB*/ ENCRYPT_SM4_OFB, /*国密加密算法SM4_OFB*/ //不知道具尸是哪种国密加密,就填这种SP_ENCRYPT_SM4_OFB }ENCRYPT_TYPE; typedef struct { unsigned char x[32]; unsigned char y[32]; }PUBLICKEY_PARAM; //解密参数 typedef struct { char* Key; //AES:key;AES256(GDPR一期):key; AES256(GDPR二期)和国密:vkek; int KeyLen; char* KeyId; //AES:不用填; AES256(GDPR一期):keyid; AES256(GDPR二期)和国密:vkekid ; int KeyIdLen; bool bSetPublicKey; //是否设置公钥 pPublicKey PUBLICKEY_PARAM* pPublicKey; //svac2.0 国密解密需要填; 其余都填NULL char Reserved[19]; //保留字段 }DECRYPT_PARAM; /** * 设置aes解密密钥。 * * @param[in] nPort 通道号 * @param[in] nType 解密类型 * @param[in] szKey 密钥的指针 * @param[in] nKeylen 密钥的长度 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetSecurityKeyEx(LONG nPort, ENCRYPT_TYPE nType, DECRYPT_PARAM* key, unsigned int key_len); /************************************************************************/ //> 显示操作 /************************************************************************/ /** * 设置或增加显示区域,可以做局部放大显示。 * * @param[in] nPort 通道号 * @param[in] nRegionNum 显示区域序号,0~(MAX_DISPLAY_WND-1),如果为0,则将设置的区域显示在主窗口中 * @param[in] pSrcRect 局部显示区域 * @param[in] hDestWnd 显示窗口句柄 * @param[in] bEnable 打开(设置)或关闭显示区域 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDisplayRegion(LONG nPort,DWORD nRegionNum, DISPLAYRECT *pSrcRect, HWND hDestWnd, BOOL bEnable); /** * 刷新显示。当用户暂停时如果刷新了窗口,则窗口中的图像因为刷新而消失, * 此时调用这个接口可以重新把图像显示出来。只有在暂停和单帧播放时才 * 执行,其它情况会直接返回。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_RefreshPlay(LONG nPort); /************************************************************************/ //> 缓冲区操作 /************************************************************************/ /** * 获取流播放模式下源缓冲区剩余数据大小(单位为字节)。 * * @param[in] nPort 通道号 * @return DWORD,当前源缓冲的大小单位BYTE(单位为字节) * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetSourceBufferRemain(LONG nPort); /** * 清空流播放模式下源缓冲区的剩余数据。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_ResetSourceBuffer(LONG nPort); /** * 清空流播放模式下源缓冲区的剩余数据。 * * @param[in] nPort 通道号 * @param[in] nBufType,如下: * BUF_VIDEO_SRC 1 视频源缓冲 * BUF_AUDIO_SRC 2 音频源缓冲 * BUF_VIDEO_RENDER 3 解码后视频数据缓冲 * BUF_AUDIO_RENDER 4 解码后音频数据缓冲 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_ResetBuffer(LONG nPort,DWORD nBufType); /** * 获取指定缓冲区的大小。 * * @param[in] nPort 通道号 * @param[in] nBufType,如下: * BUF_VIDEO_SRC 1 视频源缓冲 * BUF_AUDIO_SRC 2 音频源缓冲 * BUF_VIDEO_RENDER 3 解码后视频数据缓冲 * BUF_AUDIO_RENDER 4 解码后音频数据缓冲 * @return DWORD,根据不同参数返回缓冲区值,源缓冲区返回byte,解码后缓冲区返回帧数 * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetBufferValue(LONG nPort,DWORD nBufType); /************************************************************************/ //> 车载硬盘 /************************************************************************/ /** * 初始化硬盘(Windows32平台)。 * * @return UINT,成功返回硬盘数量, 失败返回0 */ PLAYSDK_API UINT CALLMETHOD PLAY_InitDisk(); /** * 进度回调函数。 * * @param[in] nPort 通道号 * @param[in] nPercent 进度百分比, -1表示异常 * @param[in] pUserData 用户自定义参数 */ typedef void (CALLBACK *fPercentCallbackFunc)(LONG nPort, int nPercent, void* pUserData); /** * 进度回调。可以设定文件开始结束时间,如果指定,需要PLAY_SetFileRefCallBack回调后才有效,[0,0] 表示整个文件大小,不需要建立索引,在PLAY_OpenFile之后调用。 * * @param[in] nPort 通道号 * @param[in] nStartTime 文件开始时间, 单位为从1970/1/1开始经过的秒数 * @param[in] nEndTime 文件结束时间, 单位为从1970/1/1开始经过的秒数 * @param[out] pFunCallback 进度回调函数指针 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetPercentCallBack(LONG nPort, LONG nStartTime, LONG nEndTime, fPercentCallbackFunc pFunCallback, void* pUserData); typedef enum { FORMAT_ALL_DATA, //清除所有数据 FORMAT_KEY_DATA //清除关键区数据 }FormatType; /** * 格式化硬盘(Windows32平台)。 * * @param[in] disk_no 要读取分区信息的磁盘号 * @param[in] type 格式化选项 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_FormatDisk(UINT disk_no, FormatType type); /** * 文件查询与定位(Windows32平台)。 * * @param[in] channel 需要查询的录像的通道号 * @param[in] start_time 录像查询的开始时间 * @param[in] end_time 录像查询的结束时间 * @param[in/out] pmax_ret_num 输入查询的最大文件个数,返回查询到的文件个数,文件系统最多一次返回pmax_ret_num传入的条数 * @param[out] pfile_info 查询到的录像文件存放的位置 * @param[in] type 查询的录像类型掩码,报警、动检、普通 * @param[in] hint 暂时无意义,固定设置为0 * @param[in] driver_type 驱动器类型掩码,指定在某些驱动器类型内查询 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 * 文件名字参考: "/part/uuid/%4d-%02d-%02d/%03d/%02d.%02d.%02d-%02d.%02d.%02d/cType/first_clus_no.dav" */ PLAYSDK_API UINT CALLMETHOD PLAY_QueryFileList(UINT nChannel,DHTIME start_time,DHTIME end_time,UINT *pmax_ret_num,pFILE_INFO pfile_info,UINT type, BYTE hint, UINT driver_type); /************************************************************************/ //> 鱼眼 /************************************************************************/ typedef enum { FISHEYEMOUNT_MODE_INVALID = 0, // 安装模式无效 FISHEYEMOUNT_MODE_CEIL = 1, // 顶装 FISHEYEMOUNT_MODE_WALL, // 壁装 FISHEYEMOUNT_MODE_FLOOR, // 地装 FISHEYEMOUNT_MODE_NUM }FISHEYE_MOUNTMODE; typedef enum { FISHEYECALIBRATE_MODE_INVALID = 0, // 矫正模式无效 FISHEYECALIBRATE_MODE_OFF = 1, // 关闭鱼眼算法库,外部关闭 FISHEYECALIBRATE_MODE_ORIGINAL, // 原始模式(正方形),带缩放比例 FISHEYECALIBRATE_MODE_PANORAMA, // 1p FISHEYECALIBRATE_MODE_PANORAMA_PLUS_ONE_EPTZ, // 1p+1 FISHEYECALIBRATE_MODE_DOUBLE_PANORAMA, // 2p FISHEYECALIBRATE_MODE_ORIGINAL_PLUS_DOUBLE_PANORAMA, // 1+2p FISHEYECALIBRATE_MODE_ORIGINAL_PLUS_THREE_EPTZ_REGION, // 1+3 FISHEYECALIBRATE_MODE_PANORAMA_PLUS_THREE_EPTZ_REGION, // 1p+3 FISHEYECALIBRATE_MODE_ORIGINAL_PLUS_TWO_EPTZ_REGION, // 1+2 FISHEYECALIBRATE_MODE_ORIGINAL_PLUS_FOUR_EPTZ_REGION, // 1+4 FISHEYECALIBRATE_MODE_PANORAMA_PLUS_FOUR_EPTZ_REGION, // 1p+4 FISHEYECALIBRATE_MODE_PANORAMA_PLUS_SIX_EPTZ_REGION, // 1p+6 FISHEYECALIBRATE_MODE_ORIGINAL_PLUS_EIGHT_EPTZ_REGION, // 1+8 FISHEYECALIBRATE_MODE_PANORAMA_PLUS_EIGHT_EPTZ_REGION, // 1p+8 FISHEYECALIBRATE_MODE_TWO_EPTZ_REGION_WITH_ORIGINAL, // 1F+2 FISHEYECALIBRATE_MODE_FOUR_EPTZ_REGION_WITH_ORIGINAL, // 1F+4 FISHEYECALIBRATE_MODE_DOUBLE_PANORAMA_WITH_ORIGINAL, // 1F+2p FISHEYECALIBRATE_MODE_FOUR_EPTZ_REGION_WITH_PANORAMA, // 1p(F)+4 FISHEYECALIBRATE_MODE_TWO_EPTZ_REGION, // 2画面 FISHEYECALIBRATE_MODE_SINGLE, // 单画面 FISHEYECALIBRATE_MODE_FOUR_EPTZ_REGION, // 4画面 FISHEYECALIBRATE_MODE_USER_DEFINED, // 用户自定义 FISHEYECALIBRATE_MODE_PHONE, // 手机模式 FISHEYECALIBRATE_MODE_ORIGINAL_PLUS_ONE_EPTZ_REGION, // 1+1 FISHEYECALIBRATE_MODE_ONE_EPTZ_REGION, // 1画面 FISHEYECALIBRATE_MODE_SEMI_SPHERE, // 半圆 FISHEYECALIBRATE_MODE_CYLINDER, // 圆柱 FISHEYECALIBRATE_MODE_LITTLE_PLANET, // 小行星 FISHEYECALIBRATE_MODE_DOUBLE_SPHERE, // 双目球 FISHEYECALIBRATE_MODE_DOUBLE_CYLINDER, // 双目圆柱 FISHEYECALIBRATE_MODE_DOUBLE_360, FISHEYECALIBRATE_MODE_NUM }FISHEYE_CALIBRATMODE; typedef enum { FISHEYEEPTZ_CMD_INVALID = 0, FISHEYEEPTZ_CMD_ZOOM_IN = 1, // 放大 FISHEYEEPTZ_CMD_ZOOM_OUT, // 缩小 FISHEYEEPTZ_CMD_UP, // 向上移动 FISHEYEEPTZ_CMD_DOWN, // 向下移动 FISHEYEEPTZ_CMD_LEFT, // 向左移动 FISHEYEEPTZ_CMD_RIGHT, // 向右移动 FISHEYEEPTZ_CMD_ROTATE_CLOCKWISE_AUTO, // 自动顺时针旋转 FISHEYEEPTZ_CMD_ROTATE_ANTICLOCKWISE_AUTO, // 自动逆时针旋转 FISHEYEEPTZ_CMD_STOP, // 停止 FISHEYEEPTZ_CMD_SHOW_REGION, // 框选放大 FISHEYEEPTZ_CMD_EXIT_SHOW_REGION, // 退出框选放大 FISHEYEEPTZ_CMD_DEFAULT, // 恢复默认 FISHEYEEPTZ_CMD_ORIGIN_ROTATE, // 圆旋转 FISHEYEEPTZ_CMD_SET_CUR_REGION = 0x20, // 配置指定窗口的位置信息 FISHEYEEPTZ_CMD_GET_CUR_REGION, // 获取指定窗口的位置信息 FISHEYEEPTZ_CMD_IS_IN_PANORAMA_REGION, // 输入点是否在当前全景点链区域内 FISHEYEEPTZ_CMD_TAP_VIEW, // 显示指定位置,即点即看 FISHEYEEPTZ_CMD_SET_FOCUS, // 设置窗口位置信息 FISHEYEEPTZ_CMD_GET_FOCUS, // 获取窗口位置信息 FISHEYEEPTZ_CMD_PTZ_CALI, // 鱼球联动标定 FISHEYEEPTZ_CMD_GET_PTZ_RLT, // 获取鱼球联动定位信息 FISHEYEEPTZ_CMD_SET_CUR_REGION_PTZ, // 外部直接输入ptz模式 FISHEYEEPTZ_CMD_GET_FOCUS_8192, // 获取窗口位置信息8192坐标系 FISHEYEEPTZ_CMD_NUM }FISHEYE_EPTZCMD; typedef enum { FISHEYE_SETPARAM, // 设置参数 FISHEYE_GETPARAM // 获取参数 }FISHEYE_OPERATETYPE; typedef enum { /* 枪机类型 */ IPCTYPE_200WN = 0, // IPCTYPE_130WN = 1, IPCTYPE_D1WN = 2, IPCTYPE_100WN = 3, IPCTYPE_FE = 4, // 鱼眼 //球机类型 SPCTYPE_D6501 = 100, // sony机芯65球机 HSPCTYPE_D6A2030E = 101, // 大华机芯2030E,6A球机 HSPCTYPE_D65A2030E = 102 // 大华机芯2030E,65A球机 }CAM_TYPE; /* 镜头类型 */ typedef enum { LENTYPE_NORM = 0, // 无畸变镜头 LENTYPE_Lens0361 = 1, // 3.6毫米枪机镜头 LENTYPE_Lens2880 = 2, // 130度广角枪机镜头 LENTYPE_Lens0362 = 3, // 3.6毫米枪机镜头 LENTYPE_Lens0401 = 4, // 4.0毫米枪机镜头 LENTYPE_TEST1 = 100 // 调试用参数 }LEN_TYPE; typedef struct { int w; int h; }FISHEYE_SIZE; typedef struct { short x; short y; }FISHEYE_POINT2D; typedef struct { FISHEYE_MOUNTMODE subMountMode; // 子图像安装模式, 仅当图像主校正模式为用户自定义模式时, 该值有效 FISHEYE_CALIBRATMODE subCalibrateMode; // 子图像校正模式, 仅当图像主校正模式为用户自定义模式时, 该值有效 FISHEYE_SIZE imgOutput; // 子图像输出分辨率 FISHEYE_POINT2D upperLeft; // 子图像偏移 int reserved[3]; // 保留字节 }FISHEYE_SUBMODE; typedef struct { FISHEYE_SIZE mainShowSize; // 主显示窗口分辨率, 算法据此输出适合的最优结果(不变形情况下尽量达到该比例) FISHEYE_SIZE floatMainShowSize; // 输出双buffer时使用,目前暂时还是用老的操作方法,浮动窗口的主显示窗口分辨率, 浮动圆的宽高比需要为1:1,浮动壁装全景的宽高比需要为16:9 FISHEYE_SIZE imgOutput; // 输出图像分辨率(缩放前), 图像主校正模式为用户自定义模式时为外部输入, 其他模式为内部返回 FISHEYE_SUBMODE* subMode; // 子模式信息, 图像主校正模式为用户自定义模式时为外部输入, 其他模式为内部返回 int subModeNum; // 子模式数, 图像主校正模式为用户自定义模式时为外部输入, 其他模式为内部返回 int outputSizeRatio; // 暂不启用, 校正输出图像的缩放比,Q8格式,范围0-256, 256为保持最大输出分辨率 int reserved[1]; // 保留字节 }FISHEYE_OUTPUTFORMAT; typedef struct { int x; int y; int hAngle; int vAngle; int available; int reserved[3]; }FISHEYE_REGIONPARAM; typedef struct { FISHEYE_REGIONPARAM regionParam[9]; int circularOffset; int panoramaOffset; int useRegionParam; // 为1时表明有效,使用该值进行初始化;没有保存信息时请置为0 int reserved[1]; }FISHEYE_MODEINITPARAM; typedef struct { /*必设参数*/ int zoom_type; // 倍数控制模式----期望自适应变倍和根据框选目标大小变倍两种模式 int hcam_wax; // 期望倍数对应球机角度x(水平) int hcam_way; // 期望倍数对应球机角度y(垂直) int hcam_wmul; // 期望倍数设置(基准倍数) int cfg_type; // 配置方式,默认为1:使用配置参数方式,1:使用参数配置方式,0:使用设备类型配置方式 /* 主相机参数 */ /* 镜头参数 */ int prm_re; // 投影半径 int prm_mul; // 投影倍率 int prm_dx; // x方向偏移 int prm_dy; // y方向偏移 int prm_cw; // CMOS宽(实际使用宽) int prm_ch; // CMOS高(实际使用高) /* 主相机和从相机类型配置(cfg_type为0时设置该参数才有效),默认130度、130万枪机和200W65球机 */ LEN_TYPE mlen_type; // 主相机镜头类型 CAM_TYPE mcam_type; // 主相机类型 CAM_TYPE hcam_type; // 从相机类型 /* 球机参数 */ int himg_width; // 从相机图像宽 int himg_height; // 从相机图像高 int prm_fax; // 球机水平视场角 /* 可默认的参数 */ /* 主相机参数 */ int mcam_fc; // 相机等效焦距 int mcam_cw; // 镜头靶面高 int mcam_ch; // 镜头靶面宽 int cam_height; // 相机架设高度(米),(暂时未使用) int prm_ma; // 焦距参数 /* 从相机参数 */ /* 球机参数 */ int prm_hw; // CMOS宽 int prm_hh; // CMOS高 int prm_fo; // 等效焦距 int prm_ca; // 视野参数 int prm_mmul; // 最大倍率 }MHFPTZ_CONFIGPARAM; typedef struct { FISHEYE_SIZE mainStreamSize; // 对应主码流原始宽高,当传入分辨率与之不等时表明为辅码流是此分辨率缩放而来 int originX; // 输入图像中鱼眼圆的圆心横坐标, 归一化至0-8192坐标系 int originY; // 输入图像中鱼眼圆的圆心纵坐标, 归一化至0-8192坐标系 int radius; // 输入图像中鱼眼圆的半径, 归一化至0-8192坐标系 int lensDirection; // 旋转角度, Q7格式, 范围0-360*128, 一般配为0 FISHEYE_MOUNTMODE mainMountMode; // 主安装模式 FISHEYE_CALIBRATMODE mainCalibrateMode; // 图像主校正模式 FISHEYE_MODEINITPARAM modeInitParam; // 外部传入模式初始化各画面信息,适用于模式切换恢复到上一次的状态, FISHEYE_OUTPUTFORMAT *outputFormat; // 输出图像信息 MHFPTZ_CONFIGPARAM *configParam; // 鱼球联动配置参数 int enableAutoContrast; // 开启自动对比度, 0关闭, 1开启, 该功能会增加算法耗时, 需要性能好的机器才建议开启 int alphaHistogram; // 直方图IIR强度0-255, 默认128, 越大越参考当前帧 int alphaGray; // 灰度拉伸强度0-255, 默认245, 越大越对比度弱 FISHEYE_SIZE captureSize; // 对应当前模式下的抓图分辨率 int mhfptzIndex; // IN 鱼球联动球机序号0,1,2.... int reserved[1]; // 保留字节 }FISHEYE_OPTPARAM; typedef struct { FISHEYE_EPTZCMD ePtzCmd; // 云台操作,说明见FISHEYE_EPtzCmd定义 int winId; // 要进行eptz的窗口编号,左上角winId为0,从左到右递增 int arg1; int arg2; int arg3; int arg4; int arg5; int arg6; int reserved0[6]; // 保留字节 void* pParam; // 鱼球联动 void* pResult; void* pArg; int reserved1[7]; // 保留字节 }FISHEYE_EPTZPARAM; /** * 开启视频鱼眼算法功能,需要包含fisheye.dll库。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StartFisheye(LONG nPort); /** * 设置/获取鱼眼参数。 * * @param[in] nPort 通道号 * @param[in] operatetype 操作类型 * @param[in/out] pOptParam 鱼眼参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_OptFisheyeParams(LONG nPort, FISHEYE_OPERATETYPE operatetype, FISHEYE_OPTPARAM* pOptParam); /** * 用于浮动模式下开启或关闭第二个鱼眼窗口。 * * @param[in] nPort 通道号 * @param[in] hDestWnd 显示窗口句柄 * @param[in] pOptParam 第二个窗口对应的鱼眼参数 * @param[in] bEnable 打开或关闭显示区域 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_FisheyeSecondRegion(LONG nPort, HWND hDestWnd, FISHEYE_OPTPARAM* pOptParam, BOOL bEnable); /** * 开启eptz(电子云台),进行缩放移动。 * * @param[in] nPort 通道号 * @param[in/out] pEptzParam 调节参数 * @param[in] bSecondRegion 是否为浮动模式下的第二个窗口,1为真,默认填0 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_FisheyeEptzUpdate(LONG nPort, FISHEYE_EPTZPARAM* pEptzParam, BOOL bSecondRegion); /** * 停止视频鱼眼算法功能。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StopFisheye(LONG nPort); /** * 鱼眼信息回调函数。 * * @param[in] nPort 通道号 * @param[in] byCorrectMode 矫正模式 * @param[in] wRadius 半径 * @param[in] wCircleX 圆心横坐标 * @param[in] wCircleY 圆心纵坐标 * @param[in] widthRatio 宽比率 * @param[in] heightRatio 高比率 * @param[in] gain 增益 * @param[in] denoiseLevel 降噪等级 * @param[in] InstallStyle 鱼眼安装方式 * @param[in] pUserData 用户自定义参数 */ typedef void (CALLBACK* fFishEyeInfoFun)( LONG nPort, BYTE byCorrectMode, WORD wRadius, WORD wCircleX, WORD wCircleY, UINT widthRatio, UINT heightRatio, BYTE gain, BYTE denoiseLevel, BYTE installStyle, void* pUserData ); /** * 设置获取鱼眼信息回调。 * * @param[in] nPort 通道号 * @param[out] pFishEyeInfoFun 鱼眼信息回调函数指针,不能为NULL * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetFishEyeInfoCallBack(LONG nPort, fFishEyeInfoFun pFishEyeInfoFun, void* pUserData); /************************************************************************/ //> 抓图 /************************************************************************/ /** * 抓图,将BMP图片保存为指定的文件。PLAY_SetDisplayCallBack设置的视频数 * 据回调函数,只有在有视频数据解码出来时才调用,并由用户处理视频数 * 据(如抓图),如果不断有解码的数据,就不断调用这个回调函数。而PLAY_ * CatchPic一次只抓一幅图,并能在暂停和单帧播放时实现抓图。建议:如果 * 用户想实现抓图(一次抓一幅图),调用PLAY_CatchPic,而如果想得到一段 * 时间内的视频数据,调用PLAY_SetDisplayCallBack。 * * @param[in] nPort 通道号 * @param[in] sFileName 文件名 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_CatchPic(LONG nPort,char* sFileName); /** * 抓图,将图片保存为指定的文件。PLAY_SetDisplayCallBack设置的视频数 * 据回调函数,只有在有视频数据解码出来时才调用,并由用户处理视频数 * 据(如抓图),如果不断有解码的数据,就不断调用这个回调函数。而PLAY_ * CatchPicEx一次只抓一幅图,并能在暂停和单帧播放时实现抓图。建议:如果 * 用户想实现抓图(一次抓一幅图),调用PLAY_CatchPicEx,而如果想得到一段 * 时间内的视频数据,调用PLAY_SetDisplayCallBack。 * @param[in] nPort 通道号 * @param[in] sFileName 文件名 * @param[in] ePicfomat 图片格式,见tPicFormats * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_CatchPicEx(LONG nPort,char* sFileName,tPicFormats ePicfomat); /** * 图像格式转为BMP格式。 * * @param[in] pBuf 图像数据指针 * @param[in] nSize 图像数据大小 * @param[in] nWidth 图像宽度 * @param[in] nHeight 图像高度 * @param[in] nType 数据类型,如T_YV12,T_UYVY * @param[in] sFileName 要保存的文件名。最好以BMP作为文件扩展名 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_ConvertToBmpFile(char * pBuf,LONG nSize,LONG nWidth,LONG nHeight,LONG nType, char *sFileName); /* * 图像格式转为JPEG格式。 * * @param[in] pYUVBuf 图像数据指针 * @param[in] nWidth 图像宽度 * @param[in] nHeight 图像高度 * @param[in] YUVtype YUV数据类型,如T_YV12,T_UYVY * @param[in] quality 图片压缩质量,范围(0, 100] * @param[in] sFileName 文件名 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_ConvertToJpegFile(char *pYUVBuf, LONG nWidth, LONG nHeight, int YUVtype, int quality, char *sFileName); /** * 抓取BMP图像。 * * @param[in] nPort 通道号 * @param[in] pBmpBuf 存放BMP图像数据的缓冲地址,由用户分配,不得小于bmp 图像大小, * 推荐大小:sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+w*h*4, * 其中w和h分别为图像宽高 * @param[in] dwBufSize 缓冲区大小 * @param[out] pBmpSize 获取到的实际bmp图像大小 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetPicBMP(LONG nPort, PBYTE pBmpBuf, DWORD dwBufSize, DWORD* pBmpSize); /** * 抓取BMP图像。 * * @param[in] nPort 通道号 * @param[in] pBmpBuf 存放BMP图像数据的缓冲地址,由用户分配,不得小于bmp 图像大小, * 推荐大小:sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+w*h*4, * 其中w和h分别为图像宽高。 * @param[in] dwBufSize 缓冲区大小 * @param[out] pBmpSize 获取到的实际bmp图像大小 * @param[in] nWidth 指定的bmp的宽 * @param[in] nHeight 指定的bmp的高 * @param[in] nRgbType 指定RGB格式 0:RGB32;1:RGB24; * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetPicBMPEx(LONG nPort, PBYTE pBmpBuf, DWORD dwBufSize, DWORD* pBmpSize, LONG nWidth, LONG nHeight, int nRgbType); /** * 抓取JPEG图像。 * * @param[in] nPort 通道号 * @param[in] pJpegBuf 存放JPEG图像数据的缓冲地址,由用户分配,不得小于JPEG图像大小, 推荐大小:w*h*3/2,其中w和h分别为图像宽高 * @param[in] dwBufSize 缓冲区大小 * @param[out] pJpegSize 获取到的实际JPEG图像大小 * @param[in] quality JPEG图像的压缩质量,取值范围为(0,100] * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetPicJPEG(LONG nPort, PBYTE pJpegBuf, DWORD dwBufSize, DWORD* pJpegSize, int quality); /** * 抓取TIFF图像。 * * @param[in] nPort 通道号 * @param[in] pTiffBuf 存放TIFF图像数据的缓冲地址,由用户分配,不得小于tiff图像大小, 推荐大小:w*h*3+1024, 其中w和h分别为图像宽高 * @param[in] dwBufSize 缓冲区大小 * @param[out] pTiffSize 获取到的实际TIFF图像大小 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetPicTIFF(LONG nPort, PBYTE pTiffBuf, DWORD dwBufSize, DWORD* pTiffSize); /** * 抓图,可选择格式并指定宽高。 * * @param[in] nPort 通道号 * @param[in] sFileName 文件名 * @param[in] lTargetWidth 指定的图像宽度 * @param[in] lTargetHeight 指定的图像高度 * @param[in] ePicfomat 图片格式,详见tPicFomats * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_CatchResizePic(LONG nPort, char* sFileName, LONG lTargetWidth, LONG lTargetHeight, tPicFormats ePicfomat); /************************************************************************/ //> 画图回调 /************************************************************************/ /* *画图回调函数 * * @param[in] nPort 通道号 * @param[in] hDc OffScreen表面设备上下文 * @param[in] pUserData 用户自定义参数 */ typedef void (CALLBACK* fDrawCBFun)(LONG nPort,HDC hDc, void* pUserData); /* * 注册一个回调函数,获得当前表面的device context,你可以在这个DC上画图(或文字), * 就好像在窗口的客户区DC上绘图,但这个DC不是窗口客户区的DC,而是DirectDraw里 * 的Off-Screen表面的DC。注意,如果是使用overlay表面,这个接口无效,可以直接在 * 窗口上绘图,只要不是透明色就不会被覆盖。 * * @param[in] nPort 通道号 * @param[out] DrawFun 画图回调函数 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_RigisterDrawFun(LONG nPort, fDrawCBFun DrawCBFun, void* pUserData); /* *画图回调函数 * * @param[in] nPort 通道号 * @param[in] nReginNum 显示区域序号,范围[0,(MAX_DISPLAY_WND-1)]。如果nRegionNum为0, * 则将设置的区域显示在主窗口中。 * @param[in] hDc OffScreen表面设备上下文 * @param[in] pUserData 用户自定义参数 */ typedef void (CALLBACK* fDrawCBFunEx)(LONG nPort,LONG nReginNum,HDC hDc, void* pUserData); /* * 注册一个回调函数,获得当前表面的上下文(HDC),这个DC不是窗口客户区的DC, * 而是DirectDraw里的Off-Screen表面的DC。注意。如果是使用overlay表面, * 这个接口无效,overlay方式可以直接在窗口上绘图,只要不是透明色就不会被覆盖。 * * @param[in] nPort 通道号 * @param[in] nReginNum 显示区域序号,范围[0,(MAX_DISPLAY_WND-1)]。如果nRegionNum为0, * 则将设置的区域显示在主窗口中 * @param[out] DrawFunEx 画图回调函数 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_RigisterDrawFunEx(LONG nPort, LONG nReginNum, fDrawCBFunEx DrawFunEx, void* pUserData); /************************************************************************/ //> 录制或转码功能 /************************************************************************/ /* * 开始预录。 * * @param[in] nPort 解码通道 * @param[in] sFileName 录像位置 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StartPrepareRecord(LONG nPort,const char* pFileName); /* * 停止预录。 * * @param[in] nPort 解码通道 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StopPrepareRecord(LONG nPort); /* * 开始流数据录像,只对流模式有用,在PLAY_Play之后调用。 * * @param[in] nPort 通道号 * @param[in] sFileName 文件名 * @param[in] idataType 取值DATA_RECORD_TYPE * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ typedef enum { DATA_RECORD_ORIGINAL = 0, // 录制原始视频流 DATA_RECORD_AVI, // 录制AVI DATA_RECORD_ASF, // 录制ASF DATA_RECORD_ORIGINAL_SEGMENT, // 录制分段的原始视频流(废弃,分段下载请使用PLAY_StartDataRecordEx接口) DATA_RECORD_RESIZE_AVI, // 录制转变分辨率的AVI,使用PLAY_ResolutionScale设置宽高 DATA_RECORD_MP4, // 录制MP4 DATA_RECORD_RESIZE_MP4, // 录制转变分辨率的MP4,使用PLAY_ResolutionScale设置宽高 DATA_RECORD_MP4_NOSEEK, // 录制不回写MP4 DATA_RECORD_RESIZE_MP4_NOSEEK,// 录制转变分辨率的不回写MP4,使用PLAY_ResolutionScale设置宽高 DATA_RECORD_TS, // 录制TS DATA_RECORD_PS, // 标准PS封装 DATA_RECORD_RESIZE_DAV, // 录制DAV(需要重新编解码) DATA_RECORD_DAV, // 录制DAV(不需要重新编解码) // 如果需要增加枚举,在此之前增加 DATA_RECORD_COUNT // 录制类型数目 }DATA_RECORD_TYPE; PLAYSDK_API BOOL CALLMETHOD PLAY_StartDataRecord(LONG nPort, char *sFileName, int idataType); /* * 保存原始码流,该接口需与PLAY_StartDataRecord或者PLAY_StartDataRecordEx配合着使用。 * * @param[in] nPort 通道号 * @param[in] pBuf 流数据 * @param[in] nSize 大小 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_WriteData(LONG nPort, PBYTE pBuf,DWORD nSize); /* * 停止流数据录像。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StopDataRecord(LONG nPort); /* * 回调函数 AVIConvertCallback。 * * @param[in] nPort 通道号 * @param[in] lMediaChangeType AVI_MEDIACHANGE_FRAMERATE表示帧率改变;AVI_MEDIACHANGE_RESOLUTION表示分辨率改变 * @param[in] pUserData 用户自定义参数 * @param[out] pIsNewFile TRUE 分段转换;FALSE 不分段;默认不分段 * @param[out] sNewFileName 如果分段转换,新的录像文件名 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ typedef void (CALLBACK* fAVIConvertCallback)(LONG nPort, LONG lMediaChangeType, void* pUserData, BOOL *pIsNewFile, char *sNewFileName); /* * 开始AVI转换并设置AVI转换状态回调。 * * @param[in] nPort 通道号 * @param[in] sFileName 文件名 * @param[out] pAVIFunc 回调函数 * @param[in] pUserData 用户自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StartAVIConvert(LONG nPort, char *sFileName, fAVIConvertCallback pAVIFunc, void* pUserData); /* * 停止AVI转换。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_StopAVIConvert(LONG nPort); /************************************************************************/ //> 解码及显示设置 /************************************************************************/ /* * 指定解码器(Windows平台), PLAY_Play之前调用有效。 * * @param[in] nPort 通道号 * @param[in] decodeType 解码模式(仅限于H264, Hevc) * @param[in] renderType 渲染模式 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetEngine(LONG nPort,DecodeType decodeType,RenderType renderType); /* * 设置图像质量,当设置成高质量时画面效果好,但CPU利用率高。在支持多路播放时, * 可以设为低质量,以降低CPU利用率。当某路放大播放时将该路设置成高质量, * 以达到好的画面效果。 * * @param[in] nPort 通道号 * @param[in] bHighQuality 为TRUE(1)时图像高质量,为FALSE(0)时低质量(默认值) * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetPicQuality(LONG nPort,BOOL bHighQuality); /* * 获取图像质量。 * * @param[in] nPort 通道号 * @param[out] bHighQuality 输出参数,TRUE表示高质量,FALSE表示低质量 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_GetPictureQuality(LONG nPort,BOOL *bHighQuality); /* * 垂直同步显示开关。此接口需在PLAY_Play之后调用,重新播放时需重新设置。 * 在播放动态图像出现断层时,可以使用此接口打开垂直同步功能。 * * @param[in] nPort 通道号 * @param[in] bEnable TRUE打开垂直同步,FALSE关闭垂直同步 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_VerticalSyncEnable(LONG nPort, BOOL bEnable); /* * 是否启用高清图像内部调整策略。 * * @param[in] nPort 通道号 * @param[in] bEnable 详见PLAY_STRATEGE_E定义 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ typedef enum _PLAY_STRATEGE { PLAY_THROW_FRAME_NO = 0, // 不抽帧 PLAY_THROW_FRAME_FLAG_HIGHT = 1, // 默认策略抽帧,大于1080P码流4倍数(含)以上抽帧,[1080P,720P]码流8倍数(含)以上抽帧,小于720P码流16倍数(含)以上抽帧 PLAY_THROW_FRAME_FLAG_ALL = 2, // 强制抽I帧解码 PLAY_THROW_FRAME_FLAG_ADAPTION = 3, // 自适应解码能力抽帧 PLAY_THROW_FRAME_FLAG_ADAPTION_LOW_CPU = 4, // 自适应解码能力抽帧,低cpu占用率 } PLAY_STRATEGE_E; PLAYSDK_API BOOL CALLMETHOD PLAY_EnableLargePicAdjustment(LONG nPort, int bEnable); /* * 设置解码线程数。 * * @param[in] nPort 通道号 * @param[in] nNum 线程数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDecodeThreadNum(LONG nPort, DWORD nNum); /* * 设置解码策略,错误码流花屏或跳秒。 * * @param[in] nPort 通道号 * @param[in] nStrategyType * 16: 表示解码中遇到frame不连续,提前返回 * 8: 表示解码中遇到码流数据不符合协议当成解码错误 * 0 : 表示解码中遇到码流数据不符合协议继续解码,错误码流会花屏 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDecodeStrategy(LONG nPort, int nStrategyType); /* * 抗锯齿使能开关,仅支持Windows。 * * @param[in] nPort 通道号 * @param[in] bEnable TRUE打开抗锯齿处理,FALSE关闭抗锯齿处理 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_AntiAliasEnable(LONG nPort, BOOL bEnable); /************************************************************************/ //> 私有数据 /************************************************************************/ /* * 显示私有数据,例如规则框,规则框报警,移动侦测等。 * * @param[in] nPort 通道号 * @param[in] bTrue TRUE:打开 FALSE:关闭 * @param[in] nReserve 保留参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_RenderPrivateData(LONG nPort, BOOL bTrue, LONG nReserve); /* * 数据帧回调 PLAY_SetDataCallBack。 * * @param[in] nPort 通道号 * @param[in] pBuf 带大华头的原始数据 * @param[in] nSize 数据大小 * @param[in] pUserData 用户自定义数据 */ typedef void (CALLBACK* fDataCBFun)(LONG nPort,char * pBuf,LONG nSize, void* pUserData); /* * 数据帧回调,回调带大华头的原始数据,外层自己实现解析。 * * @param[in] nPort 通道号 * @param[out] pDataCBFun 回调函数 * @param[in] pUserData 用户自定义数据 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetDataCallBack(LONG nPort, fDataCBFun pDataCBFun, void* pUserData); /* * IVS解码回调函数。 * * @param[in] pIVSBuf 辅助帧数据(json或智能帧结构体数据),当为智能帧结构体数据时,pIVSBuf为IVS Object结构体数组的起始地址 * @param[in] nIVSType 辅助帧数据类型,详见IVS_TYPE * 取值为IVSINFOTYPE_RAWDATA时,对应原始json数据 * 取值为IVSINFOTYPE_TRACK时,单个IVS object对应结构体 SP_IVS_OBJ_EX; * 取值为IVSINFOTYPE_TRACK_EX_B0时,单个IVS object对应结构体 SP_IVS_COMMON_OBJ; * @param[in] nIVSBufLen 辅助帧数据长度(json或智能帧结构体数据), * 当为智能帧结构体数据时,nIVSBufLen为IVS Object的个数乘以单个IVS object的长度,单个IVS object的长度可由type备注类型获得 * @param[in] nFrameSeq 辅助帧id * @param[in] pReserved 保留参数 * @param[in] pUserData 自定义参数 */ /* IVS类型 */ typedef enum _IVS_TYPE { IVSINFOTYPE_PRESETPOS = 1, IVSINFOTYPE_MOTINTRKS = 2, IVSINFOTYPE_MOTINTRKS_EX = 3, IVSINFOTYPE_LIGHT = 4, IVSINFOTYPE_RAWDATA = 5, // jason数据 IVSINFOTYPE_TRACK = 6, // 智能分析信息 IVSINFOTYPE_TRACK_EX_B0 = 7, // 智能结构化数据信息 IVSINFOTYPE_MOTIONFRAME = 9, IVSINFOTYPE_VIDEO_CONCENTRATION = 10, IVSINFOTYPE_OVERLAY_PIC = 11, // 叠加图片帧 IVSINFOTYPE_OSD_INFO = 12, // OSD辅助帧 IVSINFOTYPE_GPS_INFO = 13, // GPS辅助帧 IVSINFOTYPE_TAGGING_INFO = 14, // 景物点信息标注帧,辅助帧(0x13) IVSINFOTYPE_TRACK_A1 = 15, // NVR浓缩信息轨迹点 IVSINFOTYPE_DATA_WITH_LARGE_AMOUNT = 16, IVSINFOTYPE_TRACK_A1_EX = 17, // NVR浓缩信息轨迹点(扩展) IVSINFOTYPE_DATA_WITH_WATER_LEVEL_MONITOR = 18, //水位检测水位尺信息帧(0x17) IVSINFOTYPE_INTELFLOW = 19, // 智能客流量 IVSINFOTYPE_DATA_WITH_SOUND_DECIBEL = 20, //声音警报分贝值信息帧(0x18) IVSINFOTYPE_DATA_WITH_SMART_MOTION = 21, //智能动检信息帧(0x19) }IVS_TYPE; /* IVSINFOTYPE_OVERLAY_PIC类型对应的结构 */ typedef struct { unsigned char nOverLayPicPurpose; // 叠加图片用途 unsigned char nOverLayPicAction; // 叠加图片动作 unsigned char nOverLayPicCodeFormat;// 叠加图片编码格式 }OVERLAY_PIC_INFO; /* IVSINFOTYPE_OSD_INFO类型对应的结构 */ typedef struct { unsigned short nOsdTopLeftCornercoordinateX; // 字符叠加区域左上角x坐标 unsigned short nOsdTopLeftCornercoordinateY; // 字符叠加区域左上角y坐标 unsigned char nOsdWordSize; // 字号(字符大小) unsigned char nOsdWordAlignment; // 字符对齐方式 unsigned char reverse[6]; unsigned int nOsdRgbaValue; // 字符颜色 }OSD_DATA_INFO; typedef void (CALLMETHOD *fIVSInfoCallbackFunc)(char* pIVSBuf, LONG nIVSType, LONG nIVSBufLen, LONG nFrameSeq, void* pReserved, void* pUserData); /* * IVS信息获取函数。 * * @param[in] nPort 通道号 * @param[out] pFunc 解码回调函数 * @param[in] pUserData 自定义参数 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetIVSCallBack(LONG nPort, fIVSInfoCallbackFunc pFunc, void* pUserData); /* * GPS信息回调函数。 * * @param[in] pBuf 辅助帧数据 * @param[in] nLen 辅助帧长度 * @param[in] pUserData 自定义 * @return int 无意义 */ typedef int (CALLBACK *fGPSInfoCallbackFunc)(char* pBuf, LONG nLen, void* pUserData); /* * GPS信息获取函数。 * * @param[in] nPort 通道号 * @param[out] pFunc 回调函数 * @param[in] pUserData 自定义 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetGPSCallBack(LONG nPort, fGPSInfoCallbackFunc pFunc, void* pUserData); /* 统计信息类型 */ typedef enum _STATISTIC_TYPE { TYPE_UNUSE = 0, // 未使用类型 INPUT_DATA_INTERVAL, // 输入流数据间隔,参数1为时间间隔,参数2为数据长度 PRASE_VIDEO_INTERVAL, // 视频帧解析间隔,参数1为时间间隔,参数2位帧号 VIDEO_PTS_INTERVAL, // 视频pts间隔,参数1为时间间隔,参数2为帧号 DECODE_VIDEO_TIME, // 视频解码耗时,参数1为接口耗时,参数2为帧号 PLAY_VIDEO_INTERVAL, // 视频帧播放间隔,参数1为时间间隔,参数2为帧号 RENDER_VIDEO_TIME, // 视频渲染耗时,参数1为接口耗时 VIDEO_DECODE_ERROR = 1000, // 视频解码报错,参数1无意义,参数2为帧号 }STATISTIC_TYPE; /* 统计信息对应的结构 */ typedef struct statistic_info { LONG nPort; // 通道号 LONG nStatisticType; // 信息类型 LONGLONG nParam1; // 参数1 LONGLONG nParam2; // 参数2 char szReserved[16]; // 保留参数 } STATISTIC_INFO, *PSTATISTIC_INFO; /* * 解码播放统计信息回调 * * @param[in] pStatisticData 统计数据 * @param[in] pUserData 自定义参数 * @return int 无意义 */ typedef int (CALLBACK *fStatisticCallbackFunc)(PSTATISTIC_INFO pStatisticData, void* pUserData); /* * 统计信息获取函数。 * * @param[in] nPort,通道号 * @param[out] pFunc 回调函数 * @param[in] pUserData 自定义 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetStatisticCallBack(LONG nPort, fStatisticCallbackFunc pFunc, void* pUserData); /* * 设置图像显示比例 * * @param[in] nPort,通道号 * @param[in] nWidthProportion 宽值,图像宽高比 * @param[in] nHeightProportion 高值,图像宽高比 * @return BOOL,成功返回TRUE,失败返回FALSE */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetViewProportion(LONG nPort, int nWidthProportion, int nHeightProportion); /************************************************************************/ //> 不推荐使用的接口 /************************************************************************/ /* * 获取错误码,此接口无效,请使用PLAY_GetLastErrorEx接口。 * * @param[in] nPort,通道号 * @return DWORD,获得错误码。 */ PLAYSDK_API DWORD CALLMETHOD PLAY_GetLastError(LONG nPort); /* * 打开文件并自动分配通道号。 * * @param[in] sFileName 文件名 * @return DWORD,失败返回0,否则返回通道号 * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API DWORD CALLMETHOD PLAY_CreateFile(LPSTR sFileName); /* * 关闭播放文件并释放自动分配的通道号。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_DestroyFile(LONG nPort); /* * 打开流接口并自动分配通道号。 * * @param[in] nBufPoolSize 置播放器中存放数据流的缓冲区大小,范围是[SOURCE_BUF_MIN,SOURCE_BUF_MAX] * @return DWORD,失败返回0,否则返回通道号 * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API DWORD CALLMETHOD PLAY_CreateStream(DWORD nBufPoolSize); /* * 关闭数据流,并释放自动分配的通道号。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_DestroyStream(LONG nPort); /* * 与PLAY_OneByOneBack重复,请使用PLAY_OneByOneBack。 * * @param[in] nPort 通道号 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_BackOne(LONG nPort); /* * 设置分辨率改变通知消息。 * * @param[in] nPort 通道号 * @param[in] hWnd 消息发送的窗口 * @param[in] nMsg 用户输入的消息,当解码时编码格式发生改变时用户在hWnd窗口过程中收到这个消息 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetEncChangeMsg(LONG nPort,HWND hWnd,UINT nMsg); /* * 设置文件结束时要发送的消息。 * * @param[in] nPort 通道号 * @param[in] hWnd 消息发送窗口 * @param[in] nMsg 用户自定义的输入的消息,当播放到文件结束时用户在hWnd窗口过程中 * @return BOOL,成功返回TRUE,失败返回FALSE * @note 如果返回失败,可以调用PLAY_GetLastErrorEx接口获取错误码。 */ PLAYSDK_API BOOL CALLMETHOD PLAY_SetFileEndMsg(LONG nPort,HWND hWnd,UINT nMsg); #ifdef __cplusplus } #endif #endif