HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 1 -
HikVision H264 播放器编程指南
版本 4.9
2008-06-13
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 2 -
特别声明: 如果用户使用超线程的 cpu 解码,请使用我们播放器 3.4 及其以上版本,否则会出现花屏。
版本说明:(ver 4.9)
更新:1、增加 PlayM4_GetPort ( ) 和 PlayM4_FreePort ( ),分别用于获取未使用的播放器通
道号和释放已使用的通道号。
2、增加密钥设置接口 PlayM4_SetSecretKey ( )。
3、增加设置文件播放结束回调接口 PlayM4_SetFileEndCallback ( )。
版本说明:(ver 4.8)
(build0813)
更新:1、增加抓图函数 PlayM4_GetBMP()和 PlayM4_GetJPEG()用于修正在暂停状态
下无法抓图的 bug;这两个函数在播放时可以随时调用。
2、增加是否跳帧函数,在帧号不连续时是否跳下一个 I 帧播放,默认情况下是跳下一
个 I 帧播放。
3、增加解码回调函数 PlayM4_SetDecCallBackMend(), 和以前解码回调函数区别在于
增加了用户传递参数。
版本说明:(ver 4.7)
(build0711)
更新:1、用于抓图存为 Jpeg 的函数 PlayM4_ConvertToJpegFile()和设置 Jpeg 图像质量的
函数 PlayM4_SetJpegQuality();
2、增加了一种错误宏类型 PLAYM4_JPEG_COMPRESS_ERROR, 主要用于表明抓图
存为 Jpeg 格式时, 进行 Jpeg 压缩出错的返回.
3、增加了设置是否去闪烁接口函数 PlayM4_SetDeflash();
版本说明:(ver 4.6)
(build1013)
修正 bug:NTSC 制式下抓图失败;
硬盘空间不足时抓图失败;
(build0728)
更新:优化了播放器 SDK 解码性能,降低播放器正常播放和快速播放文件时的 CPU 利用率;
配合 HC 卡 4.0 版本发布,解码库版本升级,同时修正了旧版本中存在的一两个小 bug;
版本说明:(ver 4.5)
(build0407)
更新:修正了上一版本调用函数 PlayM4_SetPicQuality()时,在某些显卡上出现花屏的 bug;
(build0303)
增 加 : 1 、 用 于 文 件 拼 接 的 两 个 函 数 PlayM4_GetOriginalFrameCallBack ( ) 和
PlayM4_GetFileSpecialAttr();
更新:配合 HC 卡 3.2 版本发布,解码库升级,新版本向下兼容,可以解以前的码流,而老
的解码库不能解 HC 卡 3.2 及以后版本的录象文件;
版本说明:(ver 4.3)
(build0901)
增加:1、增加解码时图象格式发生改变通知用户的回调函数,用户可以改变界面大小;
2、增加获取/调节视频参数接口,在回放时可以调节亮度、对比度、饱和度、色调等
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 3 -
参数,以获得更好的播放效果;
3、播放器的 DEMO 中增加了将解码后的 YUV 数据直接转成 AVI 格式文件的功能,
注意目前只能对视频数据进行处理,转换后的 AVI 文件占用磁盘空间很大,一秒钟的数据量
有 3.6M 左右,要转换的文件时间长度不要超过 500 秒,回放转换后的 AVI 文件需要安装
DivX5.2 版本的插件。
版本说明:(ver 4.3)
(build0626)
更新:修正了通过网络客户端显示图象时可能出现马赛克的问题;
修正了上一版本用文件长度方式检索时可能出现的 BUG;
版本说明:(ver 4.2)
(build0616)
更新:支持图像格式的动态改变,如从 4CIF 到 CIF,播放器自动识别,不用重新启动。
修改 PlayM4_SetVerifyCallBack( )函数,可以检测文件丢帧或丢数据
版本说明:(ver 4.0)
(build0420)
更新:支持 4CIF 格式的解码,改正了在用户回调解码退出时可能出现的错误。
版本说明:(ver 3.6)
(build 1230)
更新:支持图像格式的动态改变,如从 CIF 到 QCIF,播放器自动识别,不用重新启动。
增加:1、另外一个调整音量的接口(82)
2、水印校验接口(83);
3、解码后的音频数据回调,用户可用来分析音频数据(84)。
版本说明:(ver 3.4)
(build 0626)
更新:最多支持 100 路解码器,取消 16 路限制。
增加:1、Set/Get 使用的定时器(78~79);
2、Reset/Get 播放器使用的缓冲区(80~81);
版本说明:(ver 3.2)
(build 0430)
增加:1、音视频流分开解码(71~74)
2、在使用 off-screen 表面时,获得设备上下文,可以在显示窗口打标记。Overlay 表
面不需要这样做,可直接在窗口上打标记。(75)
3、获取和设置索引信息(76-77)
版本说明:(ver 3.0)
(build 0325)
增加:1、支持 DS-400XH 系列板卡生成的码流。
2、可设置最多 4 个显示区域,支持局部显示(可实现局部放大)。(68~70)
3、可以设置解码回调的流类型。(67)
修改: 1、改正原来解码回调只回调 I 帧的 BUG。
2、改正 QCIF 并且 NTSC 模式下,文件不能会放。
版本说明:(ver 2.5)
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 4 -
(build 1118)
修改:PlayM4_OpenStream 有时失败,返回错误值 PLAYM4_SYS_NOT_SUPPORT.
(build 1115)
增加:(65~66)
1. 设置显示模式(65~66)
修改:
1.修改了在使用中发现的一些 bug。
版本说明:(ver 2.4)
(build 0911)
增加:(42~63)
1、获得更多信息接口(42~46);
2、流模式下控制源缓冲区接口(47~59);
3、控制播放缓冲接口(51~52);
4、文件准确定位及单帧回退接口,需要一定的时间生成索引(53~57);
5、可以抽帧播放,减小 CPU 利用率;(58)
6、多显卡支持(59~64);
更新:
1、播放器效率大幅提高,在 Pentinum4 1.5GHZ 下可同时播放 9 路复杂图像视频。简单图像的
情况下,可以支持更多路。在多路播放情况下,需要显卡支持硬件缩放。
2、在文件回放到文件尾时,不再强制退出,而有用户决定。
3、获得的当前时间和帧号不再反映解码时状态,而是反映播放时状态。更符合用户习惯。
4、调整快放和慢放范围,可以连续调用 4 次,即播放速度可以设置 16 倍速(实际速度视系统
性能而定)。
5、支持只有 MMX 指令集的 CPU(如 Pentium II ) .
6、可定位到文件最后一帧。
修改:
1、在显卡不支持硬件缩放抓图时,图片数据错误。
版本说明:(ver 2.2)
(build 0703)
增加:(35-41)
获得错误码接口 PlayM4_GetLastError;
刷新显示接口 PlayM4_RefreshPlay;
获得图像大小接口 PlayM4_GetPictureSize;
设置 OVERLAY 模式显示接口 PlayM4_SetOverlayMode
设置图像质量接口 PlayM4_SetPicQuality
共享方式打开声音接口 PlayM4_PlaySoundShare;
共享方式关闭声音接口 PlayM4_StopSoundShare
更新:在暂停时可以单帧播放;
在 STREAM_FILE 模式下增加了暂停,快放,慢放,单帧播放操作。
当显卡不支持 BLT 缩放时,采用软件方法,但占用 CPU 资源很高。
修改:在复合流抽帧情况下,播放速度正常(前一版本播放速度太快)。
版本说明:(ver 2.0)
(build 0607)
更新:提高了图像质量,消除了色斑;
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 5 -
(build 0605)
增加:抓图;
用户可以控制解码后音视频数据;
设置流播放模式(实时和文件模式);
获得当前播放时间(单位毫秒);
设置当前播放位置到指定时间;
获得文件中的总帧数和当前解码的帧号;
获得当前帧率;
获得当前版本号;
支持 QCIF 格式播放。
更新:流播放的实时性和流畅性提高,播放器性能提高;
版本说明:(ver1.11)
修改在非 VC++开发时死机问题。
版本说明:(ver 1.1)
播放器支持多路播放(根据主机资源定,以后我们效率会继续提高,现在在 Pentinum4 下支
持 4 路)最大支持 16 路。增加了流接口和一些其他功能。注意:CPU 必须是 Intel Pentium
3 以上。初始化和释放 DirectDraw 表面的接口不再需要,每路可以相互独立。
版本说明:(ver 1.0)
目前此播放器 sdk 只支持一路播放,输入参数 nPort 必须是 0,以后会增加支持多路的播放。
目前此播放器的声音部分可能有不流畅的情况,以后我们会改进。此播放器使用了显卡的某
些功能,所以如果不能显示图像,请尝试以下操作:1)把屏幕颜色值设为 32 位。2)更换
显卡(建议 ATI 系列,因为 ATI 系列显卡对图形处理比较好)。
技术支持:如果发现本 SDK 中存在什么问题或对我们有什么要求请与我们联系
Email: hkvs@hikvision.com
电话:0571-88075998 /88081125
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 6 -
有关显示的说明:播放器的显示部分,主要采用了 DirectDraw 技术。目前使用了两种方式显示画面:1、
创建使用 off_screen 画面并 Blt(位转换货位传输,可做缩放、旋转、镜像等效果)到
主画面;2、创建使用 OVERLAY 画面。这两种方式有以下特点:第一种方式使用
Off_screen 画面,优点:多路播放可以相对对立,相互间不受影响,缺点:受显卡的影
响比较大,如果显卡不支持缩放等操作,当用户需要缩放时(显示窗口和图像原始尺寸
不同时),我们会使用软件方式进行缩放,如果放大 CPU 利用率会非常高,我们提供了
一个接口 PlayM4_GetCaps,用户可以用它测试你的显卡是否支持 Blt 的缩放等操作,表
1 是我们测试过的几款显卡;第二种方式使用 OVERLAY 画面,优点:目前的绝大部分
显卡都支持 OVERLAY 画面,OVERLAY 画面支持硬件的缩放,当第一种方式得不到显
卡支持时,使用 OVERLAY 画面可以得到显卡支持,缺点:具有独占性,在一块显卡上
同时只能有一个 OVERLAY 画面处于活动状态,因此同时只能有一路播放器使用
OVERLAY 画面,而且如果其他程序正在使用 OVERLAY 画面,那么播放器就不能再使
用 OVERLAY 画面了,同样,如果播放器使用了 OVERLAY 画面,其他程序也不能再使
用 OVERLAY 画面。
表 1 我们测试过的几款显卡有以下几种(Win2000 下):
显卡型号 显 存
(M)
是否支持颜色转
换
是否支持缩
小
是否支持放
大
ATI Rage128 32 是 是 是
ATI Radeon LE 32 是 是 是
ATI Radeon 7200 64 是 是 是
nVidia TNT2 Model64 16 和 32 是 是 是
nVidia TNT2 Pro 32 是 是 是
Geforce2
Mx,Mx200,Mx400
32 是 是 是
Geforce4 Mx420,Mx440 32 是 是 是
*****************************************************************************
Sis630 16 否 否 否
Sis305 32 是 否 否
注意:nVidia 公司显卡需要更新最新的驱动。老的驱动可能不支持缩小功能;其他没有测
试过的显卡,如果在你使用时发现不支持某些播放需要的功能,不妨安装该显卡的最新驱
动试试
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 7 -
函数说明:
1、 BOOL PlayM4_InitDDraw(HWND hWnd);
说明:初始化 DirectDraw 表面。在使用 vb,delphi 开发时请注意,它们生成的对话框具有 WS_CLIPCHILDREN
窗口风格,必须去掉这种风格,否则显示画面会被对话框上的控件覆盖。注意:1.1 版以上不需要调用。
输入参数:hWnd 应用程序主窗口的句柄。
2、 BOOL PlayM4_RealeseDDraw();
说明:释放 directDraw 表面;注意:1.1 版以上不需要调用。
3、 BOOL PlayM4_OpenFile(LONG nPort,LPSTR sFileName);
说明:打开播放文件;
输入参数:sFileName 文件名,文件不能超过 4G 或小于 4K;
4、 BOOL PlayM4_CloseFile(LONG nPort);
说明:关闭播放文件;
5、 BOOL PlayM4_Play(LONG nPort, HWND hWnd);
说明:播放开始,播放视频画面大小将根据 hWnd 窗口调整,要全屏显示,只要把 hWnd 窗口放大到全屏。
如果已经播放,只是改变当前播放速度为正常速度。
输入参数:hWnd 播放视频的窗口句柄。
6、 BOOL PlayM4_Stop(LONG nPort);
说明:播放结束
7、 BOOL PlayM4_Pause(LONG nPort,DWORD nPause);
说明:播放暂停/恢复:
输入参数:nPause=TRUE 暂停;否则恢复;
8、 BOOL PlayM4_Fast(LONG nPort);
说明:快速播放,每次调用将使当前播放速度加快一倍,最多调用 4 次;要恢复正常播放调用 PlayM4_Play
(),从当前位置开始正常播放;
9、 BOOL PlayM4_Slow(LONG nPort);
说明:慢速播放,每次调用将使当前播放速度慢一倍;最多调用 4 次;要恢复正常播放调用 PlayM4_Play
();
10、BOOL PlayM4_SetPlayPos(LONG nPort,float fRelativePos);
说明:设置文件播放指针的相对位置(百分比)。
输入参数:fRelativePos 范围 0-100%;
11、float PlayM4_GetPlayPos(LONG nPort);
说明:获得文件播放指针的相对位置;
返回值:范围 0-100%
12、BOOL PlayM4_SetFileEndMsg(LONG nPort,HWND hWnd,UINT nMsg);
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 8 -
说明:设置文件结束时要发送的消息;从 2.4 版开始,当文件播放完时,解码线程将不会自动结束,需要
用户做停止工作:应用程序在收到这个消息后要调用播放结束函数 PlayM4_Stop(nPort)。
输入参数:hWnd 消息发送的窗口。
nMsg 用户自定义的输入的消息;当播放到文件结束时用户从 hWnd 窗口过程中收到这个消息。
此消息函数中的 wParam 参数返回 nPort 的值。
13、BOOL PlayM4_SetVolume(LONG nPort,WORD nVolume);
说明:设置音量;可以在播放之前设置,返回值是 FALSE,但设置的值被保存,并作为启动声音时的初始
音量;
输入参数:nVolume 音量的值,范围 0-0XFFFF;
14.BOOL PlayM4_PlaySound(LONG nPort);
说明:打开声音;同一时刻只能有一路声音。如果现在已经有声音打开,则自动关闭原来已经打开的声音。
注意:默认情况下声音是关闭的!
15.BOOL PlayM4_StopSound();
说明:关闭声音;
16 . BOOL PlayM4_OpenStream(LONG nPort,PBYTE pFileHeadBuf,DWORD
nSize,DWORD nBufPoolSize);
说明:打开流接口(类似打开文件);
输入参数:pFileHeadBuf 用户从卡上得到的文件头数据。
nSize 文件头长度。
nBufPoolSize 设置播放器中存放数据流的缓冲区大小。范围是 SOURCE_BUF_MIN~
SOURCE_BUF_MAX。
17.BOOL PlayM4_InputData(LONG nPort,PBYTE pBuf,DWORD nSize);
说明:输入从卡上得到的流数据;打开流之后才能输入数据。
输入参数:pBuf 缓冲区地址;
nSize 缓冲区大小
返回值:TURE,表示已经输入数据。FALSE 表示失败,数据没有输入;
18.BOOL PlayM4_CloseStream(LONG nPort);
说明:关闭数据流;
19.int PlayM4_GetCaps();
说明:测试播放器需要的一些系统功能;
返回值:1~8 位分别表示以下信息(位与是 TRUE 表示支持):
SUPPORT_DDRAW 支持 DIRECTDRAW;如果不支持,则播放器不能工作。
SUPPORT_BLT 显卡支持 BLT 操作;如果不支持,则播放器不能工作。
SUPPORT_BLTFOURCC 显卡 BLT 支持颜色转换;如果不支持,播放器会使用软件方式作 RGB 转
换。
SUPPORT_BLTSHRINKX 显卡 BLT 支持 X 轴缩小;如果不支持,系统使用软件方式转换。
SUPPORT_BLTSHRINKY 显卡 BLT 支持 Y 轴缩小;如果不支持,系统使用软件方式转换。
SUPPORT_BLTSTRETCHX 显卡 BLT 支持 X 轴放大;如果不支持,系统使用软件方式转换。
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 9 -
SUPPORT_BLTSTRETCHY 显卡 BLT 支持 Y 轴放大;如果不支持,系统使用软件方式转换。
SUPPORT_SSE CPU 支持 SSE 指令,Intel Pentium3 以上支持 SSE 指令;
SUPPORT_MMX CPU 支持 MMX 指令集。
注意:如果显卡支持上面列出的显示功能,将会大大降低 CPU 利用率。解码后的图像是 352*288(PAL)
大小,如果显卡不支持放大缩小,则建议显示窗口也使用 352*288。
20.DWORD PlayM4_GetFileTime(LONG nPort);
说明:得到文件总的时间长度,单位秒;
21. DWORD PlayM4_GetPlayedTime(LONG nPort);
说明:得到文件当前播放的时间,单位秒;
22.DWORD PlayM4_GetPlayedFrames(LONG nPort);
说明:得到已经解码的视频帧数;
23.BOOL PlayM4_OneByOne(LONG nPort);
说明:单帧播放。要恢复正常播放调用 PlayM4_Play();
24.BOOL PlayM4_SetDecCallBack(LONG nPort,void (CALLBACK* DecCBFun)(long
nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long
nReserved2));
说明:设置回调函数,替换播放器中的显示部分,有用户自己控制显示,该函数在 PlayM4_Play 之前调
用,在 PlayM4_Stop 时自动失效,下次调用 PlayM4_Play 之前需要重新设置。注意解码部分
不控制速度,只要用户从回调函数中返回,解码器就会解码下一部分数据。这个功能的使用需要用
户对视频显示和声音播放有足够的了解,否则请慎重使用,有关知识请参阅 directx 开发包。
输入参数:DecCBFun 回调函数指针,不能为 NULL;
回调函数中的参数说明:
nPort 播放器通道号。
pBuf 解码后的音视频数据。
nSize 解码后的音视频数据 pBuf 的长度;
pFrameInfo 图像和声音信息。详见下。
nReserved1,nReserved2 保留参数。
结构说明:
typedef struct{
long nWidth; //画面宽,单位像素。如果是音频数据则为 0;
long nHeight; //画面高。如果是音频数据则为 0;
long nStamp; //时标信息,单位毫秒。
long nType; //数据类型,T_AUDIO16,T_RGB32, T_YV12,详见宏定义说明。
long nFrameRate;//编码时产生的图像帧率。
}FRAME_INFO;
宏定义说明:
T_AUDIO16 音频数据;采样率 16khz,单声道,每个采样点 16 位表示。
T_RGB32 视频数据。每个像素 4 个字节,排列方式与位图相似,“B-G-R-0 ……”,第一个像素位于
图像左下角。
T_UYVY 视频数据,uyvy 格式。“U0-Y0-V0-Y1-U2-Y2-V2-Y3….”,第一个像素位于图像左上角。
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 10 -
T_YV12 视频数据,yv12 格式。排列顺序“Y0-Y1-……”,“V0-V1….”,“U0-U1-…..”。
关于图像格式详细信息,用户可以查阅相关资料。
25 . BOOL PlayM4_SetDisplayCallBack(LONG nPort,void (CALLBACK*
DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long
nStamp,long nType,long nReceaved));
说明:设置抓图回调函数;注意要尽快返回,如果要停止回调,可以把回调函数指针 DisplayCBFun 设
为 NULL。一旦设置回调函数,则一直有效,直到程序退出。该函数可以在任何时候调用。
输入参数:DisplayCBFun 抓图回调函数。可以为 NULL;
回调函数参数说明:
nPort 通道号。
pBuf 返回图像数据;
nSize 返回图像数据大小。
nWidth 画面宽,单位像素。
nHeigh 画面高。
nStamp 时标信息,单位毫秒。
nType 数据类型, T_YV12,T_RGB32,T_UYVY,详见宏定义说明。
nReceaved 保留。
26.BOOL PLayM4_ConvertToBmpFile(char * pBuf,long nSize,long nWidth,long
nHeight,long nType,char *sFileName);
说明:将抓图得到的图像数据保存成 BMP 文件。转换函数占用的 cpu 资源,如果不需要保存图片,则不要
调用;
输入参数;
pBuf, nSize,nWidth,nHeight, nType 同抓图回调函数中的参数。
sFileName 要保存的文件名。最好以 BMP 作为文件扩展名。
27.DWORD PlayM4_GetFileTotalFrames(LONG nPort);
说明:得到文件中的总帧数。
返回值:文件中的总帧数。
28.DWORD PlayM4_GetCurrentFrameRate(LONG nPort);
说明:得到当前码流中编码时的帧率。
返回值:当前码流中编码时的帧率。
29.DWORD PlayM4_GetPlayedTimeEx(LONG nPort);
说明:得到文件当前播放的时间,单位毫秒;
30.BOOL PlayM4_SetPlayedTimeEx(LONG nPort,DWORD nTime);
说明:根据时间设置文件播放位置,此接口比 PlayM4_SetPlayPos 费时,但如果用时间来控制播放进度条
(与 PlayM4_GetPlayedTime(Ex)配合使用),那么可以使进度条平滑滚动。
输入参数:
nTime 设置文件播放位置到指定时间。单位毫秒。
31.DWORD PlayM4_GetCurrentFrameNum(LONG nPort);
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 11 -
说明:得到当前播放的帧序号,。而 PlayM4_GetPlayedFrames 是总共解码的帧数。如果文件播放位置不被
改变,那么这两个函数的返回值应该非常接近,除非码流丢失数据。
32.BOOL PlayM4_SetStreamOpenMode(LONG nPort,DWORD nMode);
说明:设置流播放的模式。必须在播放之前设置。
参数:nMode,STREAME_REALTIME 实时模式(默认),STREAME_FILE 文件模式。
宏定义说明:
STREAME_REALTIME 实时模式,适合播放网络实时数据,解码器会立刻解码。
STREAME_FILE 文件模式,适合用户把文件数据用流方式输入;注意:当 PlayM4_InputData()
返回 FALSE 时,用户要等一下重新输入。
注意:2.2 版以后可以做暂停,快放,慢放,单帧播放操作。
33.DWORD PlayM4_GetFileHeadLength();
说明:得到当前版本播放器能播放的文件的文件头长度。 主要应用在流播放器的 STREAME_FILE 模式下。
以便读出文件头作为 PlayM4_OpenStream()的输入参数。
返回值:此版本播放器对应的文件头的长度。
例如:
CFile m_TestFile;
void Start()
{
//获得文件头长度;
DWORD nLength= PlayM4_GetFileHeadLength();
PBYTE pFileHead=new BYTE[nLength];
//打开文件;
m_TestFile.Open("test.mp4 ", CFile::modeRead,NULL);
m_TestFile.Read(pFileHead,nLength);
//设置模式
PlayM4_SetStreamOpenMode(0,STREAME_FILE);
//打开流接口
if(!PlayM4_OpenStream(0,pFileHead, nLength,1024*100))
{
m_strPlayFileName="";
MessageBox("文件打不开");
}
//播放
m_bPlaying = PlayM4_Play( 0, m_hWnd);
delete []pFileHead;
}
///////////////////////////////////////////////////////////////////////////////
void InputData()
{
BYTE pBuf[4096];
m_TestFile.Read(pBuf,sizeof(pBuf));
while(!PlayM4_InputData(0,pBuf,sizeof(pBuf)))
{
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 12 -
if(!m_bPlaying)
break;//如果已经停止播放,则退出;
TRACE("SLEEEP \n");
Sleep(5);
}
}
34.DWORD PlayM4_GetSdkVersion();
说明:得到当前播放器 sdk 的版本号和 build 号。如果只是修改 bug,我们只升级 build 号。
返回值:高 16 位表示当前的 build 号。9~16 位表示主版本号,1~8 位表示次版本号。如:返回值 0x06040105
表示:build 号是 0604,版本号 1.5。
35.DWORD PlayM4_GetLastError(LONG nPort)
说明:获得当前错误的错误码。用户应该在调用某个函数失败时,调用此函数以获得错误的详细信息。
返回值:错误码详见宏定义。
宏定义说明:
PLAYM4_NOERROR 没有错误;
PLAYM4_PARA_OVER 输入参数非法;
PLAYM4_ORDER_ERROR 调用顺序不对;
PLAYM4_TIMER_ERROR 多媒体时钟设置失败;
PLAYM4_DEC_VIDEO_ERROR 视频解码失败;
PLAYM4_DEC_AUDIO_ERROR 音频解码失败;
PLAYM4_ALLOC_MEMORY_ERROR 分配内存失败;
PLAYM4_OPEN_FILE_ERROR 文件操作失败;
PLAYM4_CREATE_OBJ_ERROR 创建线程事件等失败;
PLAYM4_CREATE_DDRAW_ERROR 创建 directDraw 失败;
PLAYM4_CREATE_OFFSCREEN_ERROR 创建后端缓存失败;
PLAYM4_BUF_OVER 缓冲区满,输入流失败;
PLAYM4_CREATE_SOUND_ERROR 创建音频设备失败;
PLAYM4_SET_VOLUME_ERROR 设置音量失败;
PLAYM4_SUPPORT_FILE_ONLY 只能在播放文件时才能使用此接口;
PLAYM4_SUPPORT_STREAM_ONLY 只能在播放流时才能使用此接口;
PLAYM4_SYS_NOT_SUPPORT 系统不支持,解码器只能工作在 Pentium 3 以上;
PLAYM4_FILEHEADER_UNKNOWN 没有文件头;
PLAYM4_VERSION_INCORRECT 解码器和编码器版本不对应;
PALYM4_INIT_DECODER_ERROR 初始化解码器失败;
PLAYM4_CHECK_FILE_ERROR 文件太短或码流无法识别;
PLAYM4_INIT_TIMER_ERROR 初始化多媒体时钟失败;
PLAYM4_BLT_ERROR 位拷贝失败;
PLAYM4_UPDATE_ERROR 显示 overlay 失败;
36.BOOL PlayM4_RefreshPlay(LONG nPort)
说明:刷新显示。当用户暂停时如果刷新了窗口,则窗口中的图像因为刷新而消失,此时调用这个接口可
以重新把图像显示出来。只有在暂停和单帧播放时才会执行, 其它情况会直接返回。
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 13 -
37.BOOL PlayM4_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 之前使用,而且需要设置透明色。
输入参数:
bOverlay 如果为 TRUE,表示将首先尝试使用 OVERLAY 模式,如果不行再使用其他模式。如果为 FALSE,
则不进行 OVERLAY 模式的尝试。
colorKey 用户设置的透明色,透明色相当于一层透视膜,显示的画面只能穿过这种颜色,而其他的颜色将
挡住显示的画面。用户应该在显示窗口中涂上这种颜色,那样才能看到显示画面。一般应该使
用一种不常用的颜色作为透明色。这是一个双字节值 0x00rrggbb,最高字节为 0,后三个字节分
别表示 r,g,b 的值。
38. BOOL PlayM4_GetPictureSize(LONG nPort,LONG *pWidth,LONG *pHeight);
说明:获得码流中原始图像的大小,根据此大小来设置显示窗口的区域,可以不用显卡做缩放工作,对于
那些不支持硬件缩放的显卡来说非常有用。
输出参数:
pWidth 原始图像的宽。在 PAL 制 CIF 格式下是 352。
pHeight 原始图像的高。在 PAL 制 CIF 格式下是 288。
39.BOOL PlayM4_SetPicQuality(LONG nPort,BOOL bHighQuality);
说 明:设置图像质量,当设置成高质量时画面效果好,但 CPU 利用率高。在支持多路播放时,可以
设为低质量,以降低 CPU 利用率;当某路放大播放时将该路设置成高质量,以达到好的画面效
果。
输入参数:bHighQuality 等于 1 时图像高质量,等于 0 时低质量(默认值)。
40.BOOL PlayM4_PlaySoundShare(LONG nPort);
说 明:以共享方式播放声音,只管播放本路声音而不去关闭其他路的声音。注意:WIN98 及其之前
版本操作系统不支持创建多个声音设备。如果声卡已经被使用,那么此函数将返回 FALSE。
41.BOOL PlayM4_StopSoundShare(LONG nPort);
说 明:以共享方式关闭声音。Playm4_PlaySound 和 PlayM4_StopSound 是以独占方式播放声
音的。注意:在同一个进程中,所有通道必须使用相同的方式播放或关闭声音。
以下为 2.4 版新增接口
42. LONG PlayM4_GetStreamOpenMode(LONG nPort);
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 14 -
说 明:获得流模式类型。
返 回 值:STREAME_REALTIME 或 STREAME_FILE;
43.LONG PlayM4_GetOverlayMode(LONG nPort);
说 明:检查当前播放器是否使用了 OVERLAY 模式;
返 回 值:0,表示没有使用 OVERLAY;1 表示使用了 OVERLAY 表面。
44.COLORREF PlayM4_GetColorKey(LONG nPort);
说 明:获得 OVERLAY 表面使用的透明色;
返 回 值:颜色值;
45.WORD PlayM4_GetVolume(LONG nPort);
说 明:获得当前设置的音量。
返 回 值:音量值。
46.BOOL PlayM4_GetPictureQuality(LONG nPort,BOOL *bHighQuality);
说 明:获得当前图像质量
输出参数:bHighQuality 1 表示高质量,0 表示低质量。
47.DWORD PlayM4_GetSourceBufferRemain(LONG nPort);
说 明:获得流播放模式下源缓冲剩余数据;
返 回 值:当前源缓冲的大小(BYTE)。
48.BOOL PlayM4_ResetSourceBuffer(LONG nPort);
说 明:清除流播放模式下源缓冲区剩余数据
49 . BOOL PlayM4_SetSourceBufCallBack(LONG nPort,DWORD nThreShold,void (CALLBACK *
SourceBufCallBack)(long nPort,DWORD nBufSize,DWORD dwUser,void*pResvered),DWORD
dwUser,void *pReserved);
说 明:设置源缓冲区阀值和剩余数据小于等于阀值时的回调函数指针。
输入 参数:nThreShold 阀值。
SourceBufCallBack 回调函数指针;
dwUser 用户数据;
pReserved 保留数据;
回调函数声明:
void CALLBACK SourceBufCallBack(long nPort,DWORD nBufSize, DWORD dwUser,void*pContext)
参 数:nPort 播放器通道号。
nBufSize 缓冲区中剩余数据;
dwUser 用户数据;
pResvered 保留数据;
50.BOOL PlayM4_ResetSourceBufFlag(LONG nPort);
说 明:重置回调标志位为有效状态。流模式下源缓冲到达阀值时(如果用户设置了回调函数)不一
定会回调,用户需要重置回调标志位后才能回调。而且每次回调后标志位都被设为无效,用户可以
在适当的时候重置回调标志,这个接口的主要目的是防止重复回调(数据在阀值附近摆动因为用户
HikVision H264 播放器编程指南
杭州海康威视数字技术有限公司版权所有
Copyright(C)HangZhou Hikvision Digital Technology Co,.Ltd 2002-2008. All rights reserved.
- 15 -
输入数据时,播放器也在读走数据)。初始化状态下,回调标志位是有效的。
51.BOOL PlayM4_SetDisplayBuf(LONG nPort,DWORD nNum);
说 明:设置播放缓冲区(即解码后的图像缓冲区)大小;这个缓冲区比较重要,他直接影响播放的
流畅性和延时性。在一定范围内缓冲越大越流畅,同时延时越大。在播放文件时用户最好可以考
虑开大缓冲(如果内存足够大),我们的默认值是 15(帧),在 25 帧/秒的情况下即 0.6 秒的数据。
在播放流时我们的默认值是 10(帧),如果用户追求最大延时最小,可以考虑试当减小这个值。
输入参数:nNum 播放缓冲区最大缓冲帧数。范围:MIN_DIS_FRAMES ~MAX_DIS_FRAMES。一帧
352*288 图像的所需内存最小值是 352*288*3/2 大约 150K 。最大值是 352*288*4 大约 405K。
宏定义:
MIN_DIS_FRAMES 播放缓冲最小值
MAX_DIS_FRAMES 播放缓冲最大值
52.DWORD PlayM4_GetDisplayBuf(LONG nPort);
说 明:获得播放缓冲区最大缓冲的帧数;
返 回 值:播放缓冲区最大缓冲帧数。
本文档为【Hikvision_H264播放器编程指南V4.9】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。