2023年11月27日发(作者:)

大华播放SDK编程手册

VERSION 3.28.2(Build 100129)

2010-01-29

版权所有 侵权必究

非常感谢您使用我们公司的设备,我们将为您提供最好的服务。

本手册可能包含技术上不准确的地方或印刷错误,欢迎指正。我们将会定期更新手

册的内容。

修订记录

日期修订内容修订者

2010-1-29添加接口:金志贤

PLAY_SetFileRefCallBackEx

PLAY_GetRealFrameBitRate

2010-1-22添加接口:金志贤

PLAY_SetVisibleDecCallBack;

PLAY_CatchResizePic

2009-10-26添加接口说明:金志贤

PLAY_GetFreePort, PLAY_ReleasePort;

PLAY_VerticalSyncEnable;

PLAY_GetPicBMP, PLAY_GetPicJPEG;

添加媒体信息获取指令:PLAY_CMD_GetMediaInfo

2009-8-14

整理文档,修改文档版式,添加接口说明金志贤

2009-07-15整理文档,增加对最新接口的说明张博

2008-03-25整理文档,修改多显卡及设置高画质接口的定义周国锋

2006-12-27整理文档周国锋、陈琼施

2006-12-18创建冯江、周国锋

1 ............................................................. 8

1.1概述 ........................................................... 8

1.2适用性 ......................................................... 8

2 设计原则 ........................................................... 8

2.1典型调用 ....................................................... 8

2.2编程补充说明 .................................................. 14

3 数据结构定义 ...................................................... 14

3.1宏定义 ........................................................ 14

3.2媒体信息结构 .................................................. 19

3.3帧信息结构 .................................................... 20

4.5音频控制 ...................................................... 32

4.6数据回调 ...................................................... 35

4.7消息回调 ...................................................... 43

4.8函数回调 ...................................................... 44

4.9文件索引 ...................................................... 48

4.10文件定位 ..................................................... 49

4.21获得错误号 ................................................... 82

4.22其它 ......................................................... 82

1

1.1 概述

播放SDK是大华压缩卡和硬盘录像机的配套产品,支持大华所有码流格式以及海思

公司的h264码流和ADIh264码流。本文档详细描述了开发包中各函数实现的功能及

接口

播放SDK的主要功能有:支持文件或流数据的播放、回放控制(如暂停恢复、快放

慢放)、音频控制、流数据录像、多区域显示、按帧序号或按时间定位、数据回调、消息

回调、字符叠加、抓图…….

开发包中包括的文件有: dhplay.h底层mpeg4解码库

、底层h264解码库(解大华的h264码流和ADI公司的码

)h264(

hi_h264dec_)

1.2 适用性

支持大华所有码流以及ADIh264码流和海思的h264码流的解码

支持HBHBELBLBEGBGBENVS机型码流设计原则

2 设计原则

2.1 典型调用

2.1.1 多显卡初始化

初始化多显卡设备PLAY_InitDDrawDevice

获取显卡数目PLAY_GetDDrawDeviceTotalNums

设置播放窗口使用的显卡PLAY_SetDDrawDevice

获取显卡信息PLAY_GetDDrawDeviceInfo

获取显卡功能PLAY_GetCapsEx

关闭多显卡设备PLAY_RealeseDDraw

2.1.2 回调及功能设置

设置文件结束消息回调PLAY_SetFileEndMsg

设置文件结束函数回调PLAY_SetFileEndCallBack

设置图像格式改变消息回调PLAY_SetEncChangeMsg

设置图像格式改变函数回调PLAY_SetEncTypeChangeCallBack

设置文件索引建立后回调PLAY_SetFileRefCallBack

设置流缓冲小于阀值回调PLAY_SetSourceBufCallBack

设置数据解码回调PLAY_SetDecCallBack

PLAY_SetDecCallBackEx

设置流打开模式PLAY_SetStreamOpenMode

设置定时器类型PLAY_SetTimerType

设置水印数据回调PLAY_SetWaterMarkCallBack

2.1.3 打开文件或数据流

创建文件PLAY_CreateFile

打开文件PLAY_OpenFile

创建流文件PLAY_CreateStream

打开流PLAY_OpenStream

PLAY_OpenStreamEx

2.1.4 播放

播放开始PLAY_Play

2.1.5 各功能操作及信息获取

播放声音PLAY_PlaySound

释放通道号PLAY_ReleasePort

输入流数据

PLAY_InputData

PLAY_InputVideoData

PLAY_InputAudioData

结束流数据录像PLAY_StopDataRecord

重置流缓冲回调标志PLAY_ResetSourceBufFlag

快放PLAY_Fast

慢放PLAY_Slow

暂停PLAY_Pause

按帧号定位PLAY_SetCurrentFrameNum

按时间定位PLAY_SetPlayedTimeEx

PLAY_GetPicJPEG

清缓冲PLAY_ResetBuffer

颜色调整PLAY_SetColor

多区域显示PLAY_SetDisplayRegion

显示模式设置PLAY_SetDisplayType

垂直同步使能PLAY_VerticalSyncEnable

调整图象播放的流畅性PLAY_AdjustFluency

改变图象播放的帧率PLAY_ChangeRate

打开音频采集功能PLAY_OpenAudioRecord

关闭音频采集功能PLAY_CloseAudioRecord

获取索引信息PLAY_GetRefValue

获取流剩余缓冲PLAY_GetSourceBufferRemain

获取流打开模式PLAY_GetStreamOpenMode

获取关键帧信息PLAY_GetKeyFramePos

PLAY_GetNextKeyFramePos

获取OVERLAY模式PLAY_GetOverlayMode

获取图像大小PLAY_GetPictureSize

获取已播放的桢数PLAY_GetPlayedFrames

获取视频实时码率PLAY_GetRealFrameBitRate

2.1.6 停止

播放停止PLAY_Stop

2.1.7 结束

关闭创建的文件PLAY_DestroyFile

BMP文件PLAY_ConvertToBmpFile

获取文件头长度PLAY_GetFileHeadLength

获取版本信息PLAY_GetSdkVersion

2.2 编程补充说明

步骤A中的操作用于支持多显卡,目前播放库暂不支持,采用默认的显卡。

步骤B中的功能设置操作只能在PLAY_play之前设置一次。如果用户不调用这些

函数,播放库会采用默认值,如播放缓冲帧数默认为15帧,默认用overlay

示,默认流打开模式为最实时模式。

要使播放SDK能正常工作,步骤C和步骤D是必须的

大部分操作集中在步骤E中,即在PLAY_PlayPLAY_ Stop之间调用。但其中播放

声音的函数PLAY_PlaySoundPLAY_PlaySoundShare可以在PLAY_Play之前调用,以防

止部分声音数据不能播放,这在播放一个纯音频文件时较为明显对DEFGHI

的功能大部分之间没有调用先后顺序,当然对同一个功能还是应该按先打开再操作最后

关闭的顺序。

3 数据结构定义

3.1 宏定义

3.1.1 最大通道数

#define FUNC_MAX_PORT 501 //最大播放通道数

3.1.2 声音波形范围

#define MIN_WAVE_COEF -100

#define MAX_WAVE_COEF 100

3.1.3 定时器类型

#define TIMER_1 1 //默认定时器,精确定时,但一个进程中最

多只有16

#define TIMER_2 2 //不精确定时,个数据不限制

3.1.4 缓冲类型

#define BUF_VIDEO_SRC 1 //视频源缓冲

#define BUF_AUDIO_SRC 2 //音频源缓冲

3 //解码后视频数据缓冲#define BUF_VIDEO_RENDER

4 //解码后音频数据缓冲#define BUF_AUDIO_RENDER

注:

BUF_VIDEO_SRC视频数据源缓冲,缓冲解码之前视频数据,只对流模式

有效,单位byte

BUF_AUDIO_SRC音频数据源缓冲,缓冲解码之前音频数据,只对流模式

有效, 单位byte

BUF_VIDEO_REND解码后视频数据缓冲,单位帧数

ER

BUF_AUDIO_REND解码后音频数据缓冲,单位帧数,音频40ms数据定为

ER一帧

3.1.5 错误类型

#define DH_PLAY_NOERROR 0 //没有错误

1 //输入参数非法#define DH_PLAY_PARA_OVER

2 //调用顺序不对#define DH_PLAY_ORDER_ERROR

#define DH_PLAY_TIMER_ERROR 3 //多媒体时钟设置失败

4 //视频解码失败#define DH_PLAY_DEC_VIDEO_ERROR

5 //音频解码失败#define DH_PLAY_DEC_AUDIO_ERROR

#define DH_PLAY_ALLOC_MEMORY_ERROR 6 //分配内存失败

#define DH_PLAY_OPEN_FILE_ERROR 7 //文件操作失败

#define DH_PLAY_CREATE_OBJ_ERROR 8 //创建线程事件等失败

#define DH_PLAY_CREATE_DDRAW_ERROR 9 //创建directDraw失败

10 //创建后端缓存失败#define DH_PLAY_CREATE_OFFSCREEN_ERROR

11 //缓冲区满,输入流失败#define DH_PLAY_BUF_OVER

12 //创建音频设备失败 #define DH_PLAY_CREATE_SOUND_ERROR

13 //设置音量失败 #define DH_PLAY_SET_VOLUME_ERROR

14 //只能在播放文件时才能 #define DH_PLAY_SUPPORT_FILE_ONLY

使用

#define DH_PLAY_SUPPORT_STREAM_ONLY 15 //只能在播放流时才能使

#define DH_PLAY_SYS_NOT_SUPPORT 16 //系统不支持,解码器只能工作在

Pentium 3以上

#define DH_PLAY_FILEHEADER_UNKNOWN 17 //没有文件头

#define DH_PLAY_VERSION_INCORRECT 18 //解码器和编码器版本不

#define DH_PLAY_INIT_TIMER_ERROR 21 //初始化多媒体时钟失

#define DH_PLAY_BLT_ERROR 22 //位拷贝失败

#define DH_PLAY_UPDATE_ERROR 23 //显示overlay失败

#define DH_PLAY_MEMORY_TOOSMALL 24 //memory too small

3.1.6 最大区域显示数

#define MAX_DISPLAY_WND 4 //同时最多打开4个区域显

示窗口

3.1.7 显示类型

#define DISPLAY_NORMAL 1 //以正常分辨率显示

#define DISPLAY_QUARTER 2 //以四分之一分辨率显示

3.1.8 解码缓冲数

#define MAX_DIS_FRAMES 50 //最大解码缓冲帧数

6 //小解码缓冲#define MIN_DIS_FRAMES

3.1.9 定位类型

#define BY_FRAMENUM 1 //按帧号

//按时间#define BY_FRAMETIME 2

3.1.10 数据流原始缓冲大小

#define SOURCE_BUF_MAX 1024*100000 //最大原始缓冲

#define SOURCE_BUF_MIN 1024*50 //最小原始缓冲

3.1.11 数据流播放模式

#define STREAME_REALTIME 0 //最实时方式

#define STREAME_FILE //最流畅方式1

3.1.12 解码回调音频帧类型

#define T_AUDIO16 101

#define T_AUDIO8 100

3.1.13 解码回调视频帧类型

#define T_UYVY 1

#define T_YV12 3

7#define T_RGB32

3.1.14 媒体信息查询指令

#define PLAY_CMD_GetTime 1

2#define PLAY_CMD_GetFileRate

3#define PLAY_CMD_GetMediaInfo

3.1.15 系统功能

#define SUPPORT_DDRAW 1 //支持DIRECTDRAW;如果不支持,则播放器不

能工作

#define SUPPORT_BLT 2 //显卡支持BLT操作;如果不支持,则播放器

不能工作

#define SUPPORT_BLTFOURCC 4 //显卡BLT支持颜色转换

#define SUPPORT_BLTSHRINKX 8 //显卡BLT支持X轴缩小

#define SUPPORT_BLTSHRINKY //显卡BLT支持Y轴缩小16

#define SUPPORT_BLTSTRETCHX //显卡BLT支持X轴放大32

#define SUPPORT_BLTSTRETCHY //显卡BLT支持Y轴放大64

#define SUPPORT_SSE 128 //CPU支持SSE指令,Intel Pentium3以上支

SSE指令

#define SUPPORT_MMX 256 //CPU支持MMX指令集

3.1.16 抓图格式类型定义

typedef enum __tPicFormats

{

PicFormat_BMP = 0,

PicFormat_JPEG,

} tPicFormats;

3.2 媒体信息结构

typedef struct {

long lWidth;

long lHeight;

long lFrameRate;

long lChannel;

long lBitPerSample;

long lSamplesPerSec;

}MEDIA_INFO;

3.3 帧信息结构

3.3.1 帧位置

typedef struct{

long nFilePos; //指定帧在文件中的偏移位置

long nFrameLen; //帧长度

long nFrameNum; //帧序号

long nFrameTime; //帧时间

//错误帧号long nErrorFrameNum;

SYSTEMTIME *pErrorTime; //错误帧时间

long nErrorLostFrameNum; //错误帧帧号

long nErrorFrameSize; //错误帧大小

}FRAME_POS,*PFRAME_POS;

3.3.2 帧信息

typedef struct{

long nWidth; //画面宽,单位像素。如果是音频数据则为0

long nHeight; //画面高。如果是音频数据则为0

long nStamp; //时标信息,单位毫秒

long nType; //视频帧类型,T_AUDIO16T_RGB32 T_YV12

long nFrameRate; //编码时产生的图像帧率

}FRAME_INFO;

3.3.3 帧类型

typedef struct {

char *pDataBuf; //帧数据

long nSize; //帧大小

//帧序号long nFrameNum;

//是否音频帧BOOL bIsAudio;

//保留字long nReserved;

}FRAME_TYPE;

4 接口定义

4.1 通道控制

4.1.1 PLAY_GetFreePort

BOOL PLAY_GetFreePort(LONG *plPort)

获取空闲的通道号,与PLAY_RealsePort成对使用

plPort获取的通道号

返回值成功返回TRUE,不成功返回FALSE

4.1.2 PLAY_ReleasePort

BOOL PLAY_ReleasePort (LONG lPort)

释放端口号,与PLAY_ GetFreePort成对使用

lPort通道号

返回值成功返回TRUE,不成功返回FALSE

4.2 播放文件

4.2.1 PLAY_OpenFile

BOOL PLAY_OpenFile(LONG nPort,LPSTR sFileName)

打开文件

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

sFileName文件名, (文件不能超过4G或小于4K)

4.2.2 PLAY_CreateFile

nPort 未使用

返回值成功返回TRUE,不成功返回FALSE

sFileName文件名, (文件不能超过4G或小于4K)

4.2.3 PLAY_Play

BOOL PLAY_Play(LONG nPort, HWND hWnd)

开始播放。如果已经播放,改变当前播放状态为正常速度播放

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

hWnd播放窗口句柄

4.2.4 PLAY_Stop

BOOL PLAY_Stop(LONG nPort)

关闭播放文件, PLAY_Stop后调用

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

4.2.6 PLAY_ DestoryFile

BOOL PLAY_ DestoryFile (LONG nPort)

关闭播放文件,并释放自动分配的通道号。

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

4.3 播放流数据

4.3.1 PLAY_OpenStream

BOOL PLAY_OpenStream(LONG nPort, PBYTE pFileHeadBuf,

DWORD nSize, DWORD nBufPoolSize)

打开流接口(类似打开文件)

nBufPoolSize设置播放器中存放数据流的缓冲区大小。范围

[SOURCE_BUF_MIN, SOURCE_BUF_MAX]。一般

设为900*1024,如果数据送过来相对均匀,可

调小该值,如果数据传输不均匀,可增大该值。

返回值成功返回TRUE,不成功返回FALSE

pFileHeadBuf 原先用于识别该码流是否是大华码流,后改由码

流中的标志来识别,所以现在该参数实际不起作用。这样做的目

的是为方便用户做二次开发,码流识别由播放库内部处理,而不

需要用户传个特定厂家的文件头

4.3.2 PLAY_CreatStream

BOOL PLAY_CreatStream(LONG nPort, PBYTE pFileHeadBuf,

DWORD nSize, DWORD nBufPoolSize)

打开流接口,并自动分配通道号

nPort 通道号,未使用

pFileHeadBuf目前不使用,填NULL

nSize目前不使用,填0

nBufPoolSize置播放器中存放数据流的缓冲区大小。范围是

[SOURCE_BUF_MIN, SOURCE_BUF_MAX]。一般设

900*1024,如果数据送过来相对均匀,可调

小该值,如果数据传输不均匀,可增大该值

返回值成功返回TRUE,不成功返回FALSE

4.3.3 PLAY_InputData

BOOL PLAY_InputData(LONG nPort, PBYTE pBuf, DWORD

nSize)

输入从设备上得到的流数据;打开流并调用PLAY_Play之后才能

输入数据。

通道号nPort

缓冲区地址pBuf

缓冲区大小nSize

返回值TURE,表示已经输入数据。FALSE 表示失败,数据没有输入,一

般为缓冲已满

4.3.4 PLAY_CloseStream

BOOL PLAY_CloseStream(LONG nPort)

关闭数据流(类似关闭文件)

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

4.3.6 PLAY_OpenStreamEx

BOOL PLAY_OpenStreamEx(LONG nPort, PBYTE pFileHeadBuf,

DWORD nSize, DWORD nBufPoolSize)

以音视频分开输入的方式打开流

nPort 通道号

pFileHeadBuf用户从卡上得到的文件头数据

nSize文件头长度

nBufPoolSize设置播放器中存放数据流的缓冲区大小。范围

[SOURCE_BUF_MIN, SOURCE_BUF_MAX]

返回值成功返回TRUE,不成功返回FALSE

4.3.7 PLAY_InputVideoData

BOOL PLAY_InputVideoData(LONG nPort, PBYTE pBuf, DWORD

nSize)

输入从设备上得到的视频流 (可以是复合流,但音频数据会被忽

);打开流之后才能输入数据

通道号nPort

缓冲区地址pBuf

缓冲区大小nSize

4.3.8 PLAY_InputAudioData

BOOL PLAY_ InputAudioData (LONG nPort, PBYTE pBuf, DWORD

nSize)

输入从设备上得到的音频流;打开声音之后才能输入数据

nPort 通道号

pBuf缓冲区地址

nSize缓冲区大小

返回值成功返回TRUE,不成功返回FALSE

4.3.9 PLAY_CloseStreamEx

BOOL PLAY_CloseStreamEx (LONG nPort)

关闭数据流

nPort 通道号

BYTE pBuf[4096];

while (true)

{

int len = fread(pBuf,1,4096,fp);

if (len <= 0)

{

break;

}

While (PLAY_InputData(0, pBuf, len) == FALSE)

{

Sleep(45);

}

}

4.3.11 实时流数据播放简单示例:

PLAY_OpenStream(0, NULL, 0, 900*1024);

PLAY_SetStreamOpenMode(0, STREAME_REALTIME)//实时模式,

//默认是实时模式

PLAY_Play(0, hWnd);

//网络流数据回调函数

//网络实时流数据,数据只送一次,以保证实时性

}

4.4 回放控制

4.4.1 PLAY_Pause

BOOL PLAY_Pause(LONG nPort, DWORD nPause)

播放暂停/恢复

nPort 通道号

nPauseTRUE 暂停

FLASE 恢复

返回值成功返回TRUE,不成功返回FALSE

4.4.2 PLAY_Fast

BOOL PLAY_Fast(LONG nPort)

快速播放。播放速度分为九级,播放速度分别为每秒播放

1,3,6,12,25,50,75,100,125帧图像。每次调用播放速度提升一

级最多调用4次,要恢复正常播放调用PLAY_Play,从当前位置

开始正常播放

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

4.4.3 PLAY_Slow

BOOL PLAY_Slow (LONG nPort)

慢速播放,同上。每次调用播放速度降一级;最多调用4次,要

恢复正常播放调用PLAY_Play

通道号nPort

返回值成功返回TRUE,不成功返回FALSE

4.4.4 PLAY_OneByOne

BOOL PLAY_OneByOne(LONG nPort)

单帧播放。要恢复正常播放调用PLAY_ Play

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

4.4.5 PLAY_OneByOneBack

返回值成功返回TRUE,不成功返回FALSE

4.4.6 PLAY_BackOne

BOOL PLAY_BackOne(LONG nPort)

此接口与PLAY_OneByOneBack重复

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

4.4.7 PLAY_Back

BOOL PLAY_Back(LONG nPort)

反向回放

则自动关闭原来已经打开的声音。注意:默认情况下声音是关闭

nPort 通道号

返回值成功返回TRUE,不成功返回FALSE

4.5.2 PLAY_StopSound

BOOL PLAY_StopSound()

关闭声音

返回值成功返回TRUE,不成功返回FALSE

以共享方式关闭声音。PLAY_PlaySoundPLAY_StopSound是以

独占方式播放声音的。注意:在同一个进程中,所有通道必须使

用相同的方式播放或关闭声音

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

4.5.5 PLAY_SetVolume

BOOL PLAY_SetVolume(LONG nPort, WORD nVolume)

设置音量

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

nVolume音量的值,范围[0, 0XFFFF]

4.5.6 PLAY_GetVolume

WORD PLAY_GetVolume(LONG nPort)

4.5.7 PLAY_AdjustWaveAudio

BOOL PLAY_AdjustWaveAudio(LONG nPort, LONG

nCoefficient)

调整WAVE波形,可以改变声音的大小。它和PLAY_SetVolume

PLAY_SetVolume是调整声卡音量,对整个系统起作用。该函数

尚未实现

nPort通道号

nCoefficientMIN_WAVE_COEF

MAX_WAVE_COEF0是不调整

返回值成功返回TRUE,不成功返回FALSE

4.6 数据回调

4.6.1 PLAY_SetDecCallBack

BOOL PLAY_SetDecCallBack(LONG nPort, void (CALLBACK*

DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO *

pFrameInfo, long nReserved1,long nReserved2))

设置回调函数,替换播放器中的显示部分,由用户自己控制显示,

该函数在PLAY_Play之前调用,PLAY_Stop时自动失效,下次

调用PLAY_Play之前需要重新设置。解码部分不控制速度,只要

用户从回调函数中返回,解码器就会解码下一部分数据。【注意】

这个功能的使用需要用户对视频显示和声音播放有足够的了解,

否则请慎重使用

nPort通道号

DecCBFun回调函数指针,不能为NULL

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long

nSize,FRAME_INFO * pFrameInfo, long nReserved1,long

nReserved2)

nPort通道号

pBuf解码后的音视频数据

nSize解码后的音视频数据的长度

pFrameInfo图像和声音信息。详见下

nReserved1保留参数

nReserved2保留参数

结构说明:

pBuf

typedef struct{

long nWidth; //画面宽,单位像素。如果是音频数据则为0

//画面高。如果是音频数据则为0 long nHeight;

//时标信息,单位毫秒。 long nStamp;

long nType; //数据类型,T_AUDIO16T_RGB32 T_YV12

详见宏定义说明。

long nFrameRate; //编码时产生的图像帧率。

}FRAME_INFO;

4.6.2 PLAY_SetDecCallBackEx

BOOL PLAY_SetDecCallBackEx(LONG nPort, void (CALLBACK*

DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO *

pFrameInfo, long nReserved1,long nReserved2), long nUser)

PLAY_SetDecCallBack基本相同,增加了nUser用户自定义回

调参数

通道号nPort

回调函数指针,不能为NULLDecCBFun

用户自定义回调参数nUser

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long

nSize,FRAME_INFO * pFrameInfo, long nReserved1,long

nReserved2)

nPort通道号

pBuf解码后的音视频数据

nSize解码后的音视频数据的长度

pFrameInfo图像和声音信息。详见下

nReserved1对应用户自定义回调参数

nReserved2保留参数

pBuf

4.6.3 PLAY_SetVisibleDecCallBack

BOOL PLAY_SetVisibleDecCallBack(LONG nPort, void

(CALLBACK* DecCBFun)(long nPort,char * pBuf,long

nSize,FRAME_INFO * pFrameInfo, long nReserved1,long

nReserved2), long nUser)

PLAY_SetDecCallBackEx基本相同,不同的是解码回调的同时

可以显示视频

通道号nPort

回调函数指针,不能为NULLDecCBFun

用户自定义回调参数nUser

返回值成功返回TRUE,不成功返回FALSE

4.6.4 PLAY_SetDecCBStream

BOOL PLAY_SetDecCBStream(LONG nPort, DWORD nStream)

设置解码回调的流类型,PLAY_Play之前调用

nPort通道号

nStream1 视频流

2 音频流

3 复合流

返回值成功返回TRUE,不成功返回FALSE

4.6.5 PLAY_SetDisplayCallBack

BOOL PLAY_SetDisplayCallBack(LONG nPort,void (CALLBACK*

DisplayCBFun)(long nPort, char * pBuf, long nSize, long

nWidth, long nHeight, long nStamp, long nType, long

nReceaved), long nUser)

设置视频图像数据回调,可用作抓图。如果要停止回调,可以把

回调函数指针DisplayCBFun设为NULL。一旦设置回调函数,则

一直有效,直到程序退出。该函数可以在任何时候调用

nPort通道号

DisplayCBFun视频图像数据回调函数。可以为NULL;

nUser用户自定义数据

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void (CALLBACK* DisplayCBFun)(long nPort, char * pBuf,

long nSize, long nWidth, long nHeight, long nStamp, long

nType, long nReceaved)

nPort通道号

pBuf返回图像数据

nSize返回图像数据大小

nWidth画面宽,单位像素

nHeight画面高

nStamp时标信息,单位毫秒

nType数据类型, T_RGB32T_UYVY,详见宏定义说

明。

nReceaved保留

4.6.6 PLAY_SetAudioCallBack

BOOL PLAY_SetAudioCallBack(LONG nPort, void (CALLBACK *

nPort通道号

funAudio音频回调函数

nUser用户自定义数据

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void CALLBACK FunAudio(long nPort, char * pAudioBuf, long

nSize, long nStamp, long nType, long nUser)

通道号nPort

pAudioBuf格式音频数据

nSize音频数据长度

nStamp时标(ms)

nType音频类型T_AUDIO16, 采样率8000单声道,

wave

个采样点16位表示

nUser用户自定义数据

4.6.7 PLAY_SetVerifyCallBack

BOOL PLAY_SetVerifyCallBack(LONG nPort, DWORD

DWORD nEndTime, void * nBeginTime, (CALLBACK

funVerify)(long nPort, FRAME_POS * pFilePos, DWORD

bIsVideo, DWORD nUser), DWORD nUser)

注册一个回调函数,校验数据是否被修改,实现水印功能。该接

口暂未实现

通道号nPort

开始时间nBeginTime

nEndTime结束时间

funVerify水印回调函数指针

nUser用户自定义数据

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void CALLBACK funVerify (long nPort, FRAME_POS * pFilePos,

DWORD bIsVideo, DWORD nUser)

通道号nPort

帧信息pFilePos

是否是视频数据bIsVideo

用户自定义数据nUser

4.6.8 PLAY_SetDemuxCallBack

BOOL PLAY_SetDemuxCallBack(LONG nPort, void (CALLBACK*

DemuxCBFun)(long nPort,char * pBuf, long nSize,void *

pParam, long nReserved,long nUser), long nUser)

源数据分析完的数据回调

nPort通道号

DemuxCBFun分析数据回调指针

nUser用户自定义数据

返回值成功返回TRUE,不成功返回FALSE

long nSize, void * pParam, long nReserved, long nUser)

通道号nPort

数据指针pBuf

数据长度nSize

帧信息pParam

保留nReserved

用户自定义数据nUser

4.6.9 PLAY_SetWaterMarkCallBack

BOOL PLAY_SetWaterMarkCallBack(LONG nPort,

GetWaterMarkInfoCallbackFunc pFunc, long nUser)

设置水印数据回调

nPort通道号

pFunc水印信息获取回调函数

nUser用户自定义数据

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

int (__stdcall* GetWaterMarkInfoCallbackFunc)(char* buf,

long key, long len, long reallen, long reserved, long

nUser)

buf水印数据buffer指针

key区分不同水印信息

len缓冲的最大长度

reallen缓冲的实际长度

reserved0 I帧帧数据水印信息

1 帧水印

2 表水印校验

3 表智能分析帧

nUser用户自定义数据

4.7 消息回调

4.7.1 PLAY_SetEncChangeMsg

BOOL PLAY_SetEncChangeMsg(LONG nPort, HWND hWnd, UINT

nMsg)

设置解码时编码格式发生改变时要发送的消息

nPort通道号

hWnd消息发送的窗口

nMsg用户输入的消息,当解码时编码格式发生改变

时用户在hWnd窗口过程中收到这个消息

返回值成功返回TRUE,不成功返回FALSE

4.7.2 PLAY_SetFileEndMsg

BOOL PLAY_SetFileEndMsg(LONG nPort, HWND hWnd, UINT

nMsg)

设置文件结束时要发送的消息

nPort通道号

hWnd消息发送的窗口

nMsg用户输入的消息,当播放到文件结束时用户在

hWnd窗口过程中收到这个消息

返回值成功返回TRUE,不成功返回FALSE

4.8 函数回调

4.8.1 PLAY_SetSourceBufCallBack

BOOL PLAY_SetSourceBufCallBack(LONG nPort, DWORD

nThreShold, void (CALLBACK * SourceBufCallBack)(long

nPort, DWORD nBufSize, DWORD dwUser,void*pResvered),

DWORD dwUser, void *pReserved)

设置源缓冲区阀值和剩余数据小于等于阀值时的回调函数指针

nPort通道号

nThreShold阀值

SourceBufCallB回调函数指针

ack

dwUser用户数据

pReserved保留

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void CALLBACK SourceBufCallBack(long nPort, DWORD

nBufSize, DWORD dwUser, void* pResvered)

通道号nPort

缓冲中的数据长度nBufSize

用户数据dwUser

保留pResvered

4.8.2 PLAY_ResetSourceBufFlag

BOOL PLAY_ResetSourceBufFlag(LONG nPort)

重置回调标志位为有效状态。流模式下源缓冲到达阀值时(如果

用户设置了回调函数)不一定会回调,用户需要重置回调标志位

后才能回调。而且每次回调后标志位都被设为无效,用户可以在

适当的时候重置回调标志,这个接口的主要目的是防止重复回调

(数据在阀值附近摆动因为用户输入数据时,播放器也在读走数

据)。初始化状态下,回调标志位是有效的。

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

4.8.3 PLAY_SetEncTypeChangeCallBack

BOOL PLAY_SetEncTypeChangeCallBack(LONG nPort,

void(CALLBACK *funEncChange)(long nPort, long nUser),

long nUser)

设置解码时图象格式发生改变通知用户的回调函数;打开文件前

使用

通道号nPort

funEncChange回调函数

nUser用户自定义数据

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void (CALLBACK *funEncChange)(long nPort, long nUser)

nPort通道号

dwUser用户数据

4.8.4 PLAY_SetFileRefCallBack

BOOL PLAY_SetFileRefCallBack(LONG nPort, void (CALLBACK

*pFileRefDone) (DWORD nPort, DWORD nUser), DWORD nUser)

设置回调函数指针,文件索引建立后回调。为了能在文件中准确

快速的定位,我们在文件打开时生成文件索引。这个过程耗时比

较长,大约每秒处理40M左右的数据,主要是因为从硬盘读数据

比较慢。建立索引的过程是在后台完成,需要使用索引的函数要

等待这个过程结束,而其他接口不会受到影响。

nPort通道号

pFileRefDone回调函数指针

nUser用户自定义数据

nPort通道号

dwUser用户数据

4.8.5 PLAY_SetFileRefCallBackEx

BOOL PLAY_SetFileRefCallBackEx(LONG nPort, void (CALLBACK

* pFileRefDoneEx) (DWORD nPort, BOOL bIndexCreated, DWORD

nUser), DWORD nUser)

PLAY_SetFileRefCallBack的扩展接口,可以返回索引的创建情

况。

通道号nPort

回调函数指针pFileRefDoneE

x

nUser用户自定义数据

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void FileRefDoneEx(DWORD nPort, BOOL bIndexCreated, DWORD

nUser)

通道号nPort

bIndexCreated索引创建标志,TRUE--索引创建成功,FALSE--

失败

dwUser用户数据

4.8.6 PLAY_SetFileEndCallBack

BOOL CALLMETHOD PLAY_SetFileEndCallBack(LONG nPort, void

(CALLBACK *pFileEnd)(DWORD nPort, DWORD nUser), DWORD

nUser)

设置文件结束回调

nPort通道号

pFileEnd回调函数指针

nUser用户自定义数据

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void FileEnd (DWORD nPort, DWORD nUser)

nPort通道号

4.9 文件索引

4.9.1 PLAY_SetRefValue

BOOL PLAY_SetRefValue(LONG nPort, BYTE *pBuffer, DWORD

nSize)

dwUser用户数据

设置文件索引。如果已经有了文件索引信息,可以不再调用生成

索引的回调函数(PLAY_SetFileRefCallBack),直接输入索引信

息。注:索引信息及其长度必须准确

4.9.2 PLAY_GetRefValue

BOOL PLAY_GetRefValue(LONG nPort, BYTE *pBuffer, DWORD

*pSize)

获取文件索引信息,以便下次打开同一个文件时直接使用这个信

息。必须在索引建成后才能获得信息

通道号nPort

索引信息pBuffer

输入/输出,输入的大小,输出索引信nSize

pBuffer

息大小

注:可以在第一次指定=0,pr=NULL,

pSizeBuffe

的返回值获得需要的缓冲区大小。然后

pSize

分配足够的缓冲,再调用一次

返回值成功返回TRUE,不成功返回FALSE

4.10 文件定位

4.10.1 PLAY_SetCurrentFrameNum

BOOL PLAY_SetCurrentFrameNum(LONG nPort, DWORD

nFrameNum)

设置当前播放播放位置到指定帧号,根据帧号来定位播放位置。

此函数必须在文件索引生成之后才能调用

通道号nPort

帧序号nFrameNum

返回值成功返回TRUE,不成功返回FALSE

4.10.2 PLAY_SetPlayedTimeEx

BOOL PLAY_SetPlayedTimeEx(LONG nPort, DWORD nTime)

根据时间设置文件播放位置,此接口比PLAY_SetPlayPos费时,

但如果用时间来控制进度条(与PLAY_GetPlayedTime(Ex)配合

使用),那么可以使进度条平滑滚动

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

nTime设置文件播放位置到指定时间。单位毫秒

4.10.3 PLAY_SetPlayPos

BOOL PLAY_SetPlayPos(LONG nPort, float fRelativePos)

设置文件播放指针的相对位置(百分比)

返回值范围0-100%

4.11 设置属性

4.11.1 PLAY_SetColor

BOOL PLAY_SetColor(LONG nPort, DWORD nRegionNum, int

nBrightness, int nContrast, int nSaturation, int nHue)

设置图像的视频参数,即时起作用

nPort通道号

nRegionNum显示区域,参考PLAY_SetDisplayRegion如果

只有一个显示区域(通常情况)设为0

nBrightness亮度,默认64 范围0-128

nContrast对比度,默认64 范围0-128

nSaturation饱和度,默认64 范围0-128

nHue色调,默认64 范围0-128

返回值成功返回TRUE,不成功返回FALSE

4.11.2 PLAY_SetDisplayBuf

BOOL PLAY_SetDisplayBuf(LONG nPort, DWORD nNum)

设置播放缓冲区(即解码后的图像缓冲区)大小;这个缓冲区比

较重要,他直接影响播放的流畅性和延时性。在一定范围内缓冲

越大越流畅,同时延时越大。在播放文件时用户最好可以考虑开

大缓冲(如果内存足够大),我们的默认值是15(帧),在25

/秒的情况下即0.6秒的数据。如果用户追求最大延时最小,

可以考虑试当减小这个值

nPort通道号

nNum

MIN_DIS_FRAMES ~MAX_DIS_FRAMES

352*288

352*288*3/2大约150K 。最大值是352*288*4

大约405K

MIN_DIS_FRAMES 播放缓冲最小值

MAX_DIS_FRAMES 播放缓冲最大值

返回值成功返回TRUE,不成功返回FALSE

4.11.3 PLAY_SetDisplayType

BOOL PLAY_SetDisplayType(LONG nPort, LONG nType)

设置显示的模式,在小画面显示时,采用DISPLAY_QUARTER

以减小显卡工作量,从而支持更多路显示,但画面显示质量有下

降。在正常和大画面显示时应该使用DISPLAY_NORMAL

nPort通道号

nTypeDISPLAY_NORMAL

DISPLAY_QUARTER DISPLAY_NORMAL 正常分

辨率数据送显卡显示

DISPLAY_QUARTER 1/4分辨率数据送显卡显

返回值成功返回TRUE,不成功返回FALSE

4.11.4 PLAY_VerticalSyncEnable

BOOL PLAY_VerticalSyncEnable(LONG nPort, BOOL bEnable)

垂直同步显示开关接口。只支持offscreen显示模式

此接口需在PLAY_Play之后调用,重新播放时需重新设置在播

放动态图像出现断层时,可以使用此接口打开垂直同步功能,

CPU占用率会明显提高

nPort通道号

bEnableTRUE 打开垂直同步

FALSE 关闭垂直同步

返回值成功返回TRUE,不成功返回FALSE

4.11.5 PLAY_AdjustFluency

BOOL PLAY_AdjustFluency(LONG nPort, int level)

调整图象播放的流畅性。流畅性和实时性是一对平衡体。当

level0时,图象最流畅;level6时,图象最实时。Level

的默认值为3

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

level将要调整图象的等级(0-6)

实时监视时,使用了新的帧率控制方式,目前该函数无效

4.11.6 PLAY_ChangeRate

BOOL PLAY_ChangeRate(LONG nPort, int rate)

改变图像播放的帧率

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

rate播放帧率

4.11.7 PLAY_OpenAudioRecord

BOOL PLAY_OpenAudioRecord(pCallFunction nProc, LONG

nBitsPerSample, LONG nSamplesPerSec, long nLength, long

nReserved, LONG nUser)

打开音频采集功能

nProc音频采集数据回调指针

回调函数参数说明:

void pCallFunction(LPBYTE pDataBuffer, DWORD DataLength,

long nUser)

回调数据指针pDataBuffer

回调数据长度DataLength

用户数据nUser

4.11.8 PLAY_CloseAudioRecord

BOOL PLAY_CloseAudioRecord( )

关闭音频采集功能

返回值成功返回TRUE,不成功返回FALSE

4.11.9 PLAY_SetOverlayMode

BOOL PLAY_SetOverlayMode(LONG nPort, BOOL bOverlay,

COLORREF colorKey)

设置OVERLAY模式显示画面。在一块显卡中同一时刻只能有一个

OVERLAY表面处于活动状态,如果此时系统中已经有程序使用了

OVERLAY那么播放器就不能再创建OVERLAY表面,它将自动改用

Off_Screen表面,并不返回FALSE。一些常用的播放器,以及我

们卡的预览都可能使用了OVERLAY表面。同样,如果播放器使用

OVERLAY表面,那么,其他的程序将不能使用OVERLAY表面,

别注意,我们的卡在预览时可能也要使用OVERLAY (用户可设

),如果先打开播放器(并且使用了OVERLAY),再启动预览,

那么预览可能因为得不到OVERLAY而失败。

使用OVERLAY模式的优点是:大部份的显卡都支持OVERLAY,在

一些不支持BLT硬件缩放和颜色转换的显卡上 (SIS系列显

)使用OVERLAY模式(OVERLAY模式下的缩放和颜色转换由显

卡支持)可以大大减小CPU利用率并提高画面质量(相对于软

件缩放和颜色转换)。缺点是:只能有一路播放器使用。该设置

必须在PLAY之前使用,而且需要设置透明色。

nPort音频采集数据回调指针

bOverlay 使OVERLAY

TRUE

式,如果不行再使用其他模式

FALSE

不进行OVERLAY模式的尝试

colorKey用户设置的透明色,透明色相当于一层透视膜,

显示的画面只能穿过这种颜色,而其他的颜色

将挡住显示的画面。用户应该在显示窗口中涂

上这种颜色,那样才能看到显示画面。一般应

该使用一种不常用的颜色作为透明色。这是一

个双字节值0x00rrggbb,最高字节为0,后三个

字节分别表示r,g,b的值

返回值成功返回TRUE,不成功返回FALSE

4.11.10 PLAY_SetPicQuality

BOOL PLAY_SetPicQuality(LONG nPort, BOOL bHighQuality)

设置图像质量,当设置成高质量时画面效果好,CPU利用率高。

在支持多路播放时,可以设为低质量,以降低CPU利用率;当某

路放大播放时将该路设置成高质量,以达到好的画面效果

nPort音频采集数据回调指针

返回值成功返回TRUE,不成功返回FALSE

bHighQuality等于1时图像高质量,等于0时低质量(默认值)

4.11.11 PLAY_SetStreamOpenMode

BOOL PLAY_SetStreamOpenMode(LONG nPort, DWORD nMode)

设置流播放的模式。必须在播放之前设置

nPort通道号

nModeSTREAME_REALTIME 实时模式(默认)

STREAME_FILE 文件模式

注:

实时模式,适合播放网络实时数据,解码器会

立刻解码;

文件模式,适合用户把文件数据用流方式输入;

注意:PLAY_InputData()返回FALSE时,用户

要等一下重新输入;

返回值成功返回TRUE,不成功返回FALSE

4.11.12 PLAY_SetTimerType

BOOL PLAY_SetTimerType(LONG nPort, DWORD nTimerType,

DWORD nReserved)

设置当前通道使用的定时器类型,注意:必须在Open之前调用

nPort通道号

nTimerTypeTIMER_1 多媒体定时器,精度高,但不能超过

16个;

TIMER_2 线程定时器,精度略低,无数量限制

nReserved保留

返回值成功返回TRUE,不成功返回FALSE

4.12 获得属性

4.12.1 PLAY_GetCaps

int PLAY_GetCaps( )

测试播放器需要的一些系统功能

返回值属性值,按位取。

注:属性值,1~9位分别表示以下信息(位与是TRUE表示支持)

SUPPORT_DDRAW支持DIRECTDRAW;如果不支持,则播放器不能工作

SUPPORT_BLT显卡支持BLT操作;如果不支持,则播放器不能工

SUPPORT_BLTFOURCC显卡BLT支持颜色转换;如果不支持,播放器会使用

软件方式作RGB转换

SUPPORT_BLTSHRINK显卡BLT支持X轴缩小;如果不支持,系统使用软

X件方式转换

SUPPORT_BLTSHRINK显卡BLT支持X轴缩小;如果不支持,系统使用软

Y件方式转换

SUPPORT_BLTSTRETC显卡BLT支持Y轴放大;如果不支持,系统使用软

HX件方式转换

SUPPORT_BLTSTRETC显卡BLT支持Y轴放大;如果不支持,系统使用软

HY件方式转换

SUPPORT_SSE CPU支持SSE指令,Intel Pentium3以上支持SSE

SUPPORT_MMX CPU支持MMX指令集

4.12.2 PLAY_GetColor

BOOL PLAY_GetColor(LONG nPort, DWORD nRegionNum, int

*pBrightness, int *pContrast, int *pSaturation, int *pHue)

相应的获得颜色值,参数同PLAY_SetColor

nPort通道号

nRegionNum显示区域,参考PLAY_SetDisplayRegion如果

只有一个显示区域(通常情况)设为0

nBrightness亮度,默认64 范围0-128

nContrast对比度,默认64 范围0-128

nSaturation饱和度,默认64 范围0-128

nHue色调,默认64 范围0-128

返回值成功返回TRUE,不成功返回FALSE

4.12.3 PLAY_GetDisplayBuf

DWORD PLAY_GetDisplayBuf(LONG nPort)

获得播放缓冲区最大缓冲的帧数

nPort通道号

返回值所获得的播放缓冲区最大缓冲帧数

4.12.4 PLAY_GetDisplayType

long PLAY_GetDisplayType(LONG nPort)

获得目前设置的显示模式

返回值颜色值

4.12.6 PLAY_GetOverlayMode

LONG PLAY_GetOverlayMode(LONG nPort)

检查当前播放器是否使用了OVERLAY模式

nPort通道号

返回值0-- 表示没有使用OVERLAY, 1--表示使用了OVERLAY表面

4.12.7 PLAY_GetPictureQuality

BOOL PLAY_GetPictureQuality(LONG nPort, BOOL*

bHighQuality)

获得当前图像质量

nPort通道号

bHighQuality1 表示高质量

0 表示低质量

返回值成功返回TRUE,不成功返回FALSE

4.12.8 PLAY_GetStreamOpenMode

LONG PLAY_GetStreamOpenMode(LONG nPort)

nPort通道号

返回值

STREAME_REALTIMESTREAME_FILE

4.12.9 PLAY_GetTimerType

BOOL PLAY_GetTimerType(LONG nPort, DWORD *pTimerType,

DWORD *pReserved)

获得定时器类型

nPort通道号

pTimerType定时器类型

pReserved保留

返回值成功返回TRUE,不成功返回FALSE

4.12.10 PLAY_GetBufferValue

DWORD PLAY_GetBufferValue(LONG nPort, DWORD nBufType)

4.12.11 PLAY_GetCurrentFrameNum

DWORD PLAY_GetCurrentFrameNum(LONG nPort)

得到当前播放的帧序号。而PLAY_GetPlayedFrames是总共解码

的帧数。如果文件播放位置不被改变,那么这两个函数的返回值

应该非常接近,除非码流丢失数据

nPort通道号

返回值当前播放的帧序号

4.12.12 PLAY_GetCurrentFrameRate

DWORD PLAY_GetCurrentFrameRate(LONG nPort)

得到当前码流中编码时的帧率

nPort通道号

返回值此版本播放器对应的文件头的长度

4.12.14 PLAY_GetFileTime

DWORD PLAY_GetFileTime(LONG nPort)

得到文件总的时间长度,单位秒

nPort通道号

返回值文件总的时间长度值

4.12.15 PLAY_GetFileTotalFrames

DWORD PLAY_GetFileTotalFrames(LONG nPort)

键帧之前的数据会被忽略。如果用户要截取文件中的一段数据,

则应该考虑从关键帧开始截取。结束位置则关系不大,最多丢失

3帧数据

nPort通道号

nValue当前位置,可以是时间或帧号,类型由

nType

指定

nType指定nValue的类型。

如果BY_FRAMENUM表示帧号;

nTypenValue

如果BY_FRAMTIME表示时间,

nTypenValue

单位ms

pFramePos查找到的关键帧的文件位置信息结构指针。

typedef struct{

long nFilePos; //文件位置;

long nFrameNum; //帧序号;

long nFrameTime; //帧时标(ms;

}FRAME_POS,*PFRAME_POS

返回值成功返回TRUE,不成功返回FALSE

4.12.17 PLAY_GetNextKeyFramePos

BOOL PLAY_GetNextKeyFramePos(LONG nPort, DWORD nValue,

DWORD nType, PFRAME_POS pFramePos)

查找指定位置之后的关键帧位置

nPort通道号

nValue当前位置,可以是时间或帧号,类型由

nType

指定

nType指定nValue的类型。

如果BY_FRAMENUM表示帧号;

nTypenValue

如果BY_FRAMTIME表示时间,

nTypenValue

单位ms

pFramePos查找到的关键帧的文件位置信息结构指针。

typedef struct{

long nFilePos; //文件位置;

long nFrameNum; //帧序号;

long nFrameTime; //帧时标(ms;

}FRAME_POS,*PFRAME_POS

返回值成功返回TRUE,不成功返回FALSE

4.12.18 PLAY_GetPictureSize

BOOL PLAY_GetPictureSize(LONG nPort, LONG *pWidth, LONG

*pHeight)

获得码流中原始图像的大小,根据此大小来设置显示窗口的区

域,可以不用显卡做缩放工作,对于那些不支持硬件缩放的显卡

来说非常有用

nPort通道号

pWidth原始图像的宽。在PALCIF格式下是352

pHeight原始图像的高。在PALCIF格式下是288

返回值成功返回TRUE,不成功返回FALSE

4.12.19 PLAY_GetPlayedFrames

DWORD PLAY_GetPlayedFrames(LONG nPort)

得到已经解码的视频帧数

nPort通道号

返回值已经解码的视频帧数

4.12.20 PLAY_GetPlayedTime

DWORD PLAY_GetPlayedTime(LONG nPort)

返回值文件当前播放的时间

4.12.22 PLAY_QueryInfo

BOOL PLAY_QueryInfo(LONG nPort , int cmdType, char* buf,

int buflen, int* returnlen)

信息状态查询函数。目前实现了对当前时间和帧率信息的查询

nPort通道号

cmdType指定状态查询指令

PLAY_CMD_GetTime 获取时间信息,单位

ms

PLAY_CMD_GetFileRate 获取帧率信息

PLAY_CMD_GetMediaInfo 获取媒体信息,信息

结构为 MEDIA_INFO

buf存放信息的缓冲

buflen缓冲长度

returnlen获取的信息的有效数据长度

返回值成功返回TRUE,不成功返回FALSE

Ex:

int len;

MEDIA_INFO tMediaInfo;

PLAY_QueryInfo(0, PLAY_CMD_GetMediaInfo, (char*)&tMediaInfo,

sizeof(MEDIA_INFO), &len);

4.12.23 PLAY_GetSourceBufferRemain

DWORD PLAY_GetSourceBufferRemain(LONG nPort)

获得流播放模式下源缓冲剩余数据

nPort通道号

返回值当前源缓冲的大小(BYTE

4.12.24 PLAY_GetRealFrameBitRate

BOOL PLAY_GetRealFrameBitRate(LONG nPort, double*

pBitRate)

获得视频的实时码率

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

pBitRate视频码率

4.13 多显卡控制

4.13.1 PLAY_InitDDrawDevice

BOOL PLAY_InitDDrawDevice()

返回值成功返回TRUE,不成功返回FALSE

4.13.2 PLAY_ReleaseDDrawDevice

void PLAY_ReleaseDDrawDevice()

释放枚举显示设备的过程中分配的资源

返回值

4.13.3 PLAY_SetDDrawDevice

BOOL PLAY_SetDDrawDevice(LONG nPort, DWORD nDeviceNum)

返回值

4.13.5 PLAY_GetDDrawDeviceInfo

BOOL PLAY_GetDDrawDeviceInfo(DWORD nDeviceNum, LPSTR

lpDriverDescription, DWORD nDespLen, LPSTR lpDriverName,

DWORD nNameLen, HMONITOR *hhMonitor)

得到指定显卡和监视器信息

nDeviceNum[in]显示设备的设备号,如果是0,则表示主

显示设备

lpDriverDescri[out]显示设备的描述信息

ption

nDespLen[in]表示已分配空间

lpDriverDescription

的大小,单位byte

lpDriverName[out]显示设备的设备名

nNameLen[in]表示已分配空间的大小,

lpDriverName

单位byte

hhMonitor[out]显示设备使用的监视器句柄,通过

Windows API 函数GetMonitorInfo,可以得

到详细信息,供用户定位窗口位置

返回值成功返回TRUE,不成功返回FALSE

4.13.6 PLAY_GetDDrawDeviceTotalNums

DWORD PLAY_GetDDrawDeviceTotalNums()

获得系统中与windows桌面绑定的总的显示设备数目(这里主要

是指显卡)

返回值0 表示系统中只有主显示设备

1 表示系统中安装了多块显卡,但只有一块显卡与

Windows桌面绑定

其他值 表示系统中与桌面绑定的显卡数目。在多显卡的系统

中可以通过设置显示属性,而指定任意一块显卡作为

主显示设备

4.13.7 PLAY_GetCapsEx

int PLAY_GetCapsEx(DWORD nDDrawDeviceNum)

获得指定显示设备的系统信息。没有实现该接口。

nWidth,long nHeight,long nType,char *sFileName)

YUV图像数据保存成BMP文件。转换函数占用的cpu资源,

果不需要保存图片,则不要调用

图像数据指针pBuf

图像数据大小nSize

图像宽度nWidth

图像高度nHeight

数据类型。T_RGB32T_UYVYnType

要保存的文件名。最好以BMP作为文件扩展名sFileName

返回值成功返回TRUE,不成功返回FALSE

4.14.2 PLAY_ConvertToJpegFile

BOOL PLAY_ConvertToJpegFile(char *pYUVBuf, long nWidth,

long nHeight, int YUVtype, int quality, char *sFileName)

YUV图像数据压缩成jpeg格式

pYUVBuf图像数据指针

nWidth图像宽度

nHeight图像高度

YUVtypeYUV数据类型,如T_YV12T_UYVY

quality图片压缩质量,(0, 100]

sFileName要保存的文件名。最好以jpg作为文件扩展名

4.14.3 PLAY_CatchPic

BOOL PLAY_CatchPic(LONG nPort, char* sFileName)

抓图,将图片保存为指定的文件。PLAY_SetDisplayCallBack

置的视频数据回调函数,只有在有视频数据解码出来时才调用,

并由用户处理视频数据(如抓图),如果不断有解码的数据,就

不断调用这个回调函数。PLAY_CatchPic一次只抓一幅图,

能在暂停和单帧播放时实现抓图。建议:如果用户想实现抓图(一

次抓一幅图),调用PLAY_CatchPic,而如果想得到一段时间内

的视频数据,调用PLAY_SetDisplayCallBack

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

sFileName文件名称

4.14.4 PLAY_CatchPicEx

BOOL PLAY_CatchPicEx(LONG nPort, char* sFileName,

tPicFormats ePicfomat)

PLAY_CatchPic的扩展接口,可指定图片格式,目前支持BMP

JPEG两种图片格式

通道号nPort

文件名称sFileName

图片格式,见tPicFomatsePicfomat

返回值成功返回TRUE,不成功返回FALSE

4.14.5 PLAY_CatchResizePic

BOOL PLAY_CatchResizePic(LONG nPort, char* sFileName,

LONG lTargetWidth, LONG lTargetHeight, tPicFormats

ePicfomat)

抓图接口,可以将图片调整为指定的宽高

nPort通道号

sFileName文件名称

lTargetWidth指定的图像宽度

lTargetHeight指定的图像高度

ePicfomat图片格式,见tPicFomats

返回值成功返回TRUE,不成功返回FALSE

4.14.6 PLAY_GetPicBMP

BOOL PLAY_GetPicBMP(LONG nPort, PBYTE pBmpBuf, DWORD

dwBufSize, DWORD* pBmpSize)

抓图,返回BMP格式的图像内存数据。

nPort通道号

pBmpBuf用于存放BMP图像数据的缓冲地址,由用户分

配,不得小于bmp 图像大小,推荐大小:

sizeof(BITMAPFILEHEADER) +

sizeof(BITMAPINFOHEADER) + w * h * 4

w h 分别为图像宽高

dwBufSize申请的缓冲区大小

pBmpSize获取到的实际bmp 图像大小

返回值成功返回TRUE,不成功返回FALSE

4.14.7 PLAY_GetPicJPEG

BOOL PLAY_GetPicJPEG(LONG nPort, PBYTE pJpegBuf, DWORD

dwBufSize, DWORD* pJpegSize, int quality)

抓图,返回JPEG格式的图像内存数据。

nPort通道号

pJpegBuf用于存放JPEG图像数据的缓冲地址,由用户分

配,不得小于JPEG图像大小,推荐大小:

w*h*3/2 其中w h 分别为图像宽高

dwBufSize申请的缓冲区大小

pJpegSize获取到的实际JPEG图像大小

qualityJpeg图像的压缩质量,取值范围为(0, 100]

返回值成功返回TRUE,不成功返回FALSE

4.15 字符叠加

4.15.1 PLAY_RigisterDrawFun

BOOL PLAY_RigisterDrawFun(LONG nPort, void (CALLBACK*

DrawFun)(long nPort, HDC hDc, LONG nUser), LONG nUser)

注册一个回调函数,获得当前表面的device context, 你可以

在这个DC上画图(或写字)就好像在窗口的客户区DC上绘图,

但这个DC不是窗口客户区的DC,而是DirectDraw里的

Off-Screenoverlay

表面的DC。注意,如果是使用表面,这个

接口无效,你可以直接在窗口上绘图,只要不是透明色就不会被

覆盖

nPort通道号

DrawFun文件名称

nUser用户数据

返回值成功返回TRUE,不成功返回FALSE

回调函数参数说明:

void CALLBACK DrawFun(long nPort, HDC hDc, LONG nUser)

nPort通道号

hDcOffScreen表面设备上下文,你可以像操作显示

窗口客户区DC那样操作它

nUser用户数据,就是上面输入的用户数据

4.16 多区域显示

4.16.1 PLAY_SetDisplayRegion

BOOL PLAY_SetDisplayRegion(LONG nPort, DWORD nRegionNum,

RECT *pSrcRect, HWND hDestWnd, BOOL bEnable)

设置或增加显示区域。可以做局部放大显示

nPort通道号

nRegionNum显示区域序号,0~(MAX_DISPLAY_WND-1)如果

nRegionNum

0则将设置的区域显示在主窗口

pSrcRect局部显示区域

hDestWnd显示窗口句柄

bEnable打开(设置)或关闭显示区域

返回值成功返回TRUE,不成功返回FALSE

4.16.2 PLAY_RefreshPlayEx

BOOL PLAY_RefreshPlayEx(LONG nPort, DWORD nRegionNum)

刷新显示,刷新多区域显示的窗口

nPort通道号

nRegionNum显示区域序号,0~(MAX_DISPLAY_WND-1)如果

nRegionNum

0,则刷新主窗口

返回值成功返回TRUE,不成功返回FALSE

4.17 数据流录像

4.17.1 PLAY_StartDataRecord

BOOL PLAY_StartDataRecord(LONG nPort, char *sFileName)

开始流数据录像。只对流模式有用,在PLAY_Play之后调用

4.17.2 PLAY_StopDataRecord

BOOL CALLMETHOD PLAY_StopDataRecord(LONG nPort)

停止流数据录像

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

4.18 清缓冲

4.18.1 PLAY_ResetSourceBuffer

BOOL PLAY_ResetSourceBuffer(LONG nPort)

清除流播放模式下源缓冲区剩余数据

nPort通道号

nBufType缓冲类型,见宏定义

返回值成功返回TRUE,不成功返回FALSE

缓冲类型定义:

BUF_VIDEO_SRC视频数据源缓冲,缓冲解码之前视频数据,只对流模式

有效,单位byte

BUF_AUDIO_SRC音频数据源缓冲,缓冲解码之前音频数据,只对流模式

有效, 单位byte

BUF_VIDEO_REND解码后视频数据缓冲,单位帧数

ER

BUF_AUDIO_REND解码后音频数据缓冲区,单位帧数,音频40ms数据定

ER为一帧

4.19 智能搜索

该部分功能只对有数据帧信息的文件有效

数据帧指音频数据和视频数据之外的的数据块,譬如通道标题,LOGO等。

4.19.1 PLAY_SetMDRange

BOOL CALLMETHOD PLAY_SetMDRange(LONG nPort, RECT* rc,

DWORD nVauleBegin, DWORD nValueEnd, DWORD nType)

设置搜索区域及范围

nPort通道号

rc搜索区域,为播放画面的某一部分

nVauleBegin搜索范围的上限,可以是时间或帧号,取决于

nType

nValueEnd搜索范围的下限,可以是时间或帧号,取决于

nType

nType可以是BY_FRAMENUMBY_FRAMETIME

返回值成功返回TRUE,不成功返回FALSE

4.19.2 PLAY_SetMDThreShold

BOOL PLAY_SetMDThreShold(LONG nPort, DWORD ThreShold)

设置智能搜索的阀值

nPort通道号

返回值成功返回TRUE,不成功返回FALSE

ThreShold阀值

4.19.3 PLAY_GetMDPosition

DWORD CALLMETHOD PLAY_GetMDPosition(LONG nPort, DWORD

Direction, DWORD nFrame, DWORD* MDValue)

获得搜索到的数据帧的帧序号

nPort通道号

4.20 获得版本号

4.20.1 PLAY_GetSdkVersion

DWORD PLAY_GetSdkVersion( )

得到当前播放器sdk的主版本号、次版本号和补丁号

返回值16位表示当前的主版本号。9~16位表示次版本号,1~8位表

示次补丁号。如:返回值0x00030107表示:主版本号是3,次

版本号是1,补丁号是7

4.21 获得错误号

4.21.1 PLAY_GetLastError

DWORD PLAY_GetLastError(LONG nPort)

获得当前错误的错误码。用户应该在调用某个函数失败时,调用

此函数以获得错误的详细信息

通道号nPort

返回值错误类型

4.22 其它

4.22.1 PLAY_InitDDraw

BOOL PLAY_InitDDraw(HWND hWnd)

初始化DirectDraw表面 目前不使用

hWnd应用程序主窗口的句柄

返回值

4.22.2 PLAY_RealeseDDraw

BOOL PLAY_RealeseDDraw()

释放DirectDraw表面。目前不使用

4.22.4 PLAY_RefreshPlay

BOOL PLAY_RefreshPlay(LONG nPort)

刷新显示。当用户暂停时如果刷新了窗口,则窗口中的图像因为

刷新而消失,此时调用这个接口可以重新把图像显示出来。只有

在暂停和单帧播放时才会执行,其它情况会直接返回

nPort通道号

返回值成功返回TRUE,不成功返回FALSE