fast-yolo4/3rdparty/dahua/inc/dhplay.h
2024-09-25 09:43:03 +08:00

2728 lines
93 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 <windows.h>
#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_AUDIO16T_RGB32T_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次版本号是40SVN版本号是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等级当设置为此等级时有两种打印输出fatalerror都有输出
LOG_LevelWarn, // warn等级当设置为此等级时有三种打印输出fatalerrorwarn都有输出
LOG_LevelInfo, // info等级当设置为此等级时有四种打印输出fatalerrorwarninfo都有输出
LOG_LevelTrace, // Trace等级当设置为此等级时有五种打印输出fatalerrorwarninfotrace都有输出
LOG_LevelDebug // Debug等级当设置为此等级时以上六种打印fatalerrorwarninfotracedebug都有输出
}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 LONGSTREAM_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 对采集数据进行编码设置0pcm1g711a2g711u。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-500时声音不变
* @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=0pBuffer=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_RGB32T_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-2PS
STREAM_TYPE_DHSTD, // 大华最新的标准码流
STREAM_TYPE_ASF, // ASF
STREAM_TYPE_3GPP, // 3GP
STREAM_TYPE_RAW, // 大华老码流:裸码流
STREAM_TYPE_TS, // MPEG-2TS
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_TYPEENCODE_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:keyAES256(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, // 大华机芯2030E6A球机
HSPCTYPE_D65A2030E = 102 // 大华机芯2030E65A球机
}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_YV12T_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_YV12T_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格式 0RGB321RGB24
* @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