前言

非常感谢您使用我们公司的产品，我们将竭诚为您提供最好的服务。

本手册可能包含技术上不准确的地方或文字错误。

本手册的内容将做定期的更新，恕不另行通知；更新的内容将会在本手册的新版本中加入。

我们随时会改进或更新本手册中描述的产品或程序。


概述

播放库SDK是我司网络硬盘录像机、视频服务器、IP设备等产品播放相关的二次开发包，适用于各系列编码产品录像文件和数据流的解码与播放。

播放库SDK主要功能

主要用于实时码流预览、录像文件回放、播放控制（如：暂停、单帧前进、单帧后退）、获取码流基本信息（如：创建文件索引、解码帧信息、分辨率、帧率）、支持JPG和BMP两种格式的播放截图等。

播放库SDK解码播放模式包括文件模式和流模式：

文件模式

播放库SDK内部线程实现读取指定录像文件进行解码播放，支持私有、PS、TS、3GP、AVI等封装的录像文件格式，支持的视频编码格式包括私有H.264编码、标准H.264、mpeg2、mpeg4、mjpeg、H.265、SVAC、Smart264、Smart265等，音频格式包括G.711、G.722、G.726、MPEG、AAC、PCM等。

流模式

流模式是指将待解码的数据以流的方式送入到播放库缓冲区中进行解码播放，支持私有、PS、TS、RTP等封装的录像文件格式，支持的视频编码格式包括私有H.264编码、标准H.264、mpeg2、mpeg4、mjpeg、H.265、SVAC、Smart264、Smart264等，音频格式包括G.711、G.722、G.726、MPEG、AAC、PCM等。

我们提供Windows、WP8、Android、iOS版本的SDK。


SDK支持的系统说明

Windows下播放库SDK：
  • 32位、64位SDK
  • Windows10/Windows8/Windows7/Windows XP/Windows Server 2008/Windows Server 2012

注：系统显卡驱动建议安装供应商官方最新版本，Server系统上显卡驱动可能不是显卡供应商官方提供的，与系统兼容会有点问题，多路预览存在崩溃的风险，所以预览多路时不建议使用Server系统。
xp系统下鱼眼展开基线不支持。
在使用播放库的同时，如果出现展开画面不出来情况，需要去https://www.microsoft.com/en-us/download/details.aspx?stat=1&id=8109 这个地址下载安装DirectX软件开发工具库和安装。


更新记录

V7.3.9.10_Build20200411
1. 新增接口：PlayM4_RegisterIVSDrawFunCB_EX。
2. 新增接口：PlayM4_SetGlobalBaseTime。
3. 新增接口：PlayM4_GetEngineSupportEx。
4. 新增接口：PlayM4_SetDecOrDisplayCallbackType。
5. 新增接口：PlayM4_GetTimeZoneInfo。
6. 新增接口：PlayM4_SetRunTimeInfoCallbackType。
7. 结构体：RENDERSUPPORT，占用一个保留字节，扩展参数nGPUType（渲染探测GPU类型）。
8. 结构体：HDECODESUPPORT，扩展硬解码探测分辨率，HXVA_RESOLUTION_6400W。
9. 接口：PlayM4_RenderPrivateDataEx，PLAYM4_PRIDATA_RENDER扩展PLAYM4_RENDER_TRACK_TEM（轨迹信息） 和PLAYM4_RENDER_THERMAL（废气检测和烟火屏蔽信息）和PLAYM4_THERMAL_FLAG、PLAYM4_TRACK_FLAG。
10. 接口：PlayM4_RenderPrivateData，PLAYM4_PRIDATA_RENDER扩展PLAYM4_RENDER_TRACK_TEM（轨迹信息） 和PLAYM4_RENDER_THERMAL（废气检测和烟火屏蔽信息）。
11. 接口：PlayM4_ResetBuffer，nBufType扩展BUF_VIDEO_SRC_EX。
12. 接口：PlayM4_SetSecretKey，lKeyType扩展AES256解密。
V7.3.8.10_Build20190830
1. 支持SDP信息开流，支持从SDP信息中获取PT值。
2. 支持AES256解密。
3. 新增对opus和AAC_LD音频的支持。
4. 软解时兼容中西文字符的叠加显示。
5. 支持多算法类型智能信息显示。
6. 支持64路同步回放（单个同步组由16放开到64）。
7. 新增接口：PlayM4_GetStreamInfo。
8. 新增接口：PlayM4_SetHLogFlag。
9. 新增接口：PlayM4_SetIdemuxPara。
10. 结构体：HDECODESUPPORT，占用3个保留字节，新增参数：bD3D11VA（判断是否支持D3D11VA硬解码）、chD3D11VAH264_Max_Resolution（ D3D11VA,h264编码支持的最大的分辨率大概值）、chD3D11VAH265_Max_Resolution（D3D11VA,h265编码支持的最大的分辨率大概值）。
V7.3.7.10 Build20190104
1. 增加2400w多轨硬解码。
2. 支持西文(utf8字符集-非中文字符集，utf8格式也支持韩文和日文)字符路径按照utf8字符格式传入播放库，能够打开文件进行播放。
3. 支持MP4索引前置文件流式播放和定位。
4. 新增鱼眼3D矫正-圆柱-圆柱切开-弧面-小行星。
5. 音频渲染默认采用Dsound渲染引擎-替换原来的waveout和openal。
6. 新增接口：PlayM4_GetSupplementaryTimeZone。
7. 新增接口：PlayM4_GetSupplementaryTimeZone。
8. 鱼眼电子放大，支持取消电子放大。
9. 去掉底层库依赖msvcr90.dll，部分无该库的地方无法启动程序。
10. 新增接口：PlayM4_FEC_GetViewParam。
11. 新增接口：PlayM4_FEC_SetViewParam。
12. 新增接口：PlayM4_FEC_SetDisplayRegion。
13. 新增接口：PlayM4_FEC_SetCorrectEffect。
V7.3.6.10 Build20180524
1. 新增字符叠加的字体库路径接口：PlayM4_SetConfigFontPath。
2. 支持小鹰眼软解。
V7.3.4.X Build20170905
1. 鱼眼库增加鱼眼球面显示功能：PlayM4_FEC_Rotate。
2. PlayM4_FEC_Rotate为老的鱼眼球面接口（已不建议使用）；7.3.4版本的球面鱼眼为新的矫正类型0x500。鱼眼半球矫正的视角旋转变化和缩放功能：PlayM4_FEC_SetViewParam和PlayM4_FEC_GetViewParam。
3. RunTimeInfo，对应接口PlayM4_SetRunTimeInfoCallBackEx，新增PLAYM4_RTINFO_ENCRYPT_ERROR（秘钥错误）。
4. PlayM4_FEC_GetPort中FECCORRECTTYPE新增FEC_CORRECT_SEMISPHERE（半球(球面)矫正-（硬解不支持-可以开多路））。
V7.3.3.X
1. 修改音频播放机制：G系列音频采样率按照封装层上的数据播放，不采用默认值，某些采样率打错的文件声音播放可能会异常，请先确认。
2. 鱼眼库增加鱼眼球面显示功能：PlayM4_FEC_Rotate。
3. 增加普通测温功能。
4. 新增2400w相机解码预览、单帧进，单帧退，快放、慢放、按时间戳和帧号定位、子码流预览+主码流5路电子放大、jpeg和bmp抓图功能。2400w解码推荐配置：i7-6700k@4Ghz，显卡gtx1080
V7.3.2.X
1. 增加鱼眼多画面矫正功能。
2. 增加avi文件播放。
3. 支持小鹰眼码流。
V7.3.1.X
1. 新增设置硬解码扩展接口：PlayM4_SetDecodeEngineEx。
2. 新增鱼眼抓图接口：PlayM4_FEC_Capture。
3. 新增智能信息子类型显示开关控制接口：PlayM4_RenderPrivateDataEx。
4. 新增获取当前解码引擎接口：PlayM4_GetDecodeEngine。
5. 新增支持接口：PlayM4_SyncToAudio。
6. 新增支持Smart265编码格式包括文件和实时流的解码播放。
V7.3.0.X
1. 增加支持SVAC编码格式包括文件和实时流的解码播放。
2. 增加支持3GP封装格式的文件解码播放。
3. 新增设置硬解码错误信息回调函数功能接口：PlayM4_SetRunTimeInfoCallBackEx。
4. PlayM4_SetDisplayBuf中缓冲区帧数nNum增加支持设置15帧。
V7.2.2.X
1. 实现图片叠加显示设置：PlayM4_RenderPrivateData中nIntelType增加类型：PLAYM4_RENDER_ADD_PIC。
2. 实现热成像信息显示设置：PlayM4_RenderPrivateData中nIntelType增加类型：PLAYM4_RENDER_FIRE_DETCET。
3. 兼容获取时间戳有溢出的文件的文件总时间问题。
4. 增加MPEG2音频双声道播放功能。
5. 增加支持Smart264编码格式包括文件和实时流的解码播放，支持定位以及单帧前进/后退等功能。
V7.2.1.X
1. 增加多线程解码。
2. PlayM4_SetDecodeEngine：添加硬解码接口。
3. PlayM4_SetAdditionDataCallBack：添加私有数据回调接口。
4. PlayM4_GetStreamAdditionalInfo：获取显示帧私有信息接口。
V7.2.0.X
1. 实现实时流的自适应播放：PlayM4_SetDisplayBuf中nNum支持设置1、6，6表示自适应播放模式。
2. 实现RTP加密码流的播放。
3. 实现POS信息叠加：PlayM4_RenderPrivateData中nIntelType增加类型PLAYM4_RENDER_ADD_POS。
4. 实现实时流预录像：PlayM4_SetPreRecordFlag、PlayM4_SetPreRecordCallBack。
5. 添加智能信息开关：PlayM4_RenderPrivateData。
V7.1.0.X
1. 添加图像增强接口。
2. 添加倍帧接口。
V6.4.0.X
1. 添加鱼眼功能接口。
2. FECPLACETYPE：鱼眼相机安装方式
3. FECCORRECTTYPE：鱼眼相机矫正方式
4. FISHEYEPARAM：鱼眼参数结构体
5. PTZPARAM：PTZ参数说明
6. CYCLEPARAM：圆参数说明
V6.3.2.7 build20111209
1. 添加流/文件模式同步回放功能。
2. 添加设备抽场码流的支持。
3. 优化倒放快放速度。
4. 更新底层解码库，修正部分新码流解码绿屏的情况。
5. PlayM4_SetSycGroup：添加文件同步回放接口。
6. PlayM4_SetSycStartTime：设置同步回放开始时间。
V6.3.0.5 build20111205
1. 添加支持倒放的接口PlayM4_ReversePlay、PlayM4_GetSystemTime 和PlayM4_SetPlayedTimeEx。
2. 添加播放库头文件中有，而以前版本的播放库编程指南中没有的接口说明。
3. 修正显示方面的几个问题。
4. PlayM4_ReversePlay：倒放接口。
5. PlayM4_GetSystemTime：获取系统时间。
6. PlayM4_SetPlayedTimeEx：设定定位时间。
V6.2.2.3 build20131231
1. 修正RTP快放时有音频问题。
2. 修正部分有水印设备，注册解码回调崩溃。
3. 支持标准264多参考帧解码；改善实时流延时问题。
V6.2.1.1
1. 新增支持DS-65xx系列、DS-66xx系列DVS码流以及RTP封装码流的智能设备码流。
2. 支持DS-91xx-ST系列设备码流（标准264两场）；修正显示方面的几个问题。
V6.1.1.21
1. 修正win7，service下部分显卡关闭应用程序出现异常的情况。
2. 内部兼容多种水印加密。
3. 修正暂停情况下不能单帧操作。
4. 修正私有文件丢B帧引起快放的问题。
V6.1.1.17
1. 修正配置丢B帧后的抓图问题。
2. 增加对超长文件路径的支持。
3. 修正单帧前进/后退交错操作可能出现的播放帧序错误问题。
4. 减小预览延时。
5. 增加对纯音频流/文件的支持，与旧版本保持一致。
6. 修正音频解码回调的时标。
7. 增加对新版本水印的支持。
V6.1.1.12
1. 增加PlayM4_SkipErrorData 和 PlayM4_CheckDiscontinuousFrameNum 的接口实现。
2. 补充接口PlayM4_AdjustWaveAudio 的实现；再次修正PlayM4_GetSrcRemainData的返回值不正确的问题。
3. 解决某些屏保激活后导致的无显示问题。
4. 增加了消息和回调不能同时注册的保护。
5. 最大支持显示设备到32个, 满足客户多屏上墙的需要。
6. 修正2CIF码流抓取jpeg图像导致的内存泄漏问题。
7.PlayM4_SkipErrorData： 码流错误直接跳至下一关键帧。
8. PlayM4_CheckDiscontinuousFrameNum：检查帧号是否连续。
9. PlayM4_AdjustWaveAudio：调整WAVE波形。
V6.1.1.8
1. 修正PlayM4_GetNextKeyFramePos 有时失败的问题；修正某些8100系列DVR、4200系列板卡产品播放画面出现块效应的问题。
2. 修正定位操作后视频解码回调出的数据不正确的问题；暂不支持纯音频流的播放。
V6.1.1.7
1. 修正某些9000系列混合DVR产品录像文件获取结束全局时间不正确的问题。
2. 增加对AMR音频的支持；增加对PCM-L16音频的支持。
V6.1.1.6
1. 增加对65系列DVS设备的支持。
2. 提高4CIF码流的解码效率；修正音视频解码回调的实现，与4.9版本保持一致。
V6.1.1.5
1. 修正了PlayM4_GetSourceBufferRemain 返回值不正确的问题。
2. 修正了单帧前进有时失败的问题。
V6.1.1.3
1. 增加对MJPEG编码的支持。
2. 增加对G726音频的支持。
3. 修正锁屏后可能导致的无显示问题。
V6.1.1.X
1. 支持多屏显示的自适应。
2. PlayM4_GetFileSpecialAttr 、PlayM4_GetOriginalFrameCallBack不再支持，相关功能由其他库实现。
3. 增加对8100系列DVR、4200系列板卡产品的支持；增加对9000系列混合DVR产品的密钥支持。
V6.1.0.3
1. 增加对mpeg音频的支持。
2. 修正播放变分辨率文件时导致的丢帧问题。
V6.1.0.2
1. 增加对部分8100系列DVR产品的支持。
V6.0.0.1
1.增加对9000系列产品的支持;最多支持500路解码，取消100路限制。


SDK接口调用主要流程

播放库SDK编程指南

SDK接口调用的主要流程

其中虚线框的流程是可选部分，不会影响其他流程和模块的功能使用。按实现功能的不同可以分成上述几个模块，实现每个模块的功能时获取播放库端口号、打开文件/打开数据流、解码和释放SDK资源这4个流程是必不可少的。

  • 获取播放库端口号（PlayM4_GetPort）：获取播放端口号，内存预分配等操作。
  • 打开待播放的文件（PlayM4_OpenFile）/数据流（PlayM4_OpenStream）：这部分用于打开待播放的文件或者实时数据流，此时会对打开的文件进行判断是否是播放库支持的文件，若是实时流模式则打开数据流部分需要送入正确的媒体信息头。
  • 设置解码回调函数（PlayM4_SetDecCallBackExMend）： 获取解码后的音视频数据，当前播放库支持的视频解码后格式为YV12格式，音频解码后的格式为PCM格式数据。若客户需要其他格式的数据，则需要自行实现转换。
  • 注册抓图回调函数（PlayM4_SetDisplayCallBack）：设置显示回调，获取解码后送入到显卡显示的当前视频帧数据。
  • 开始解码（PlayM4_Play）：开始解码线程，若需要显示，则送入有效的窗口句柄，若不需要显示则可以将窗口句柄置为NULL，设置为NULL时候不影响正常解码。
  • 文件模式模块：打开待解码的文件，开始解码并显示。以及获取解码后的音视频数据、定位和抓图等功能。具体流程详见文件模块流程。
  • 流模式模块 ：打开待解码的实时流数据，开始解码并显示。以及获取解码后的音视频数据、抓图回调抓图等功能。具体流程详见流模式模块流程。
  • 倒放模块 ：倒放模块流程。具体流程详见倒放模块流程。
  • 鱼眼控制模块：实现鱼眼的控制。具体流程详见鱼眼模块流程。
  • 同步回放模块：实现多个文件同步回放的接口调用流程。具体流程详见同步回放模块流程。
  • 文件定位模块：文件播放后按照时间或者帧号进行定位的流程。具体流程详见文件定位模块流程。
  • 画图回调模块：实现对当前解码的图像上叠加客户设定的线框或者字符等。具体流程详见画图回调模块流程。
  • 抓图模块 ：实现将对当前解码的视频帧抓取为BMP或者JPEG图片。具体流程详见抓图模块流程。
  • 鹰眼模块 ：鹰眼即可同时提供全景与特写画面，兼顾全景与细节。其中全景画面由8个传感器拼接而成，可实现360度的全景监控；一体化机芯和高速云台设计，在全景监控的同时为用户提供快速细节定位功能。具体流程详见鹰眼模块流程。

注：本手册下文提供的代码都是在VC环境下编译的。


倒放模块流程

正常播放是指按照时间顺序播放，倒放需要调用如下接口PlayM4_ReversePlay

  • 开始倒放接口：开始当前通道的倒放。
  • 获取当前播放帧的全局时间模块：获取当前播放帧的全局时间，调用的接口为PlayM4_GetSystemTime。
  • 设置流播放起始帧模块：设置流播放起始帧。
  • 流模式进行倒放，需要以GOP为单位，倒着送入到播放库中进行倒放。

示例代码

文件模式倒放

#include <stdio.h>
#include <string.h>
#include <iostream>
#include "Windows.h"
#include "PlayM4.h"
using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

LONG g_lPort  =  -1;

void CALLBACK FileRefDoneCB(DWORD nPort,DWORD nUser)
{
   TRACE("File reference created!\n");
}

void main()
{
   BOOL   bFlag = FALSE;
   DWORD  dwErr = 0;

     //---------------------------------------
    // 获取控制台窗口句柄
    HMODULE hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

    if (g_lPort == -1)
    {
      bFlag = PlayM4_GetPort(&g_lPort);
      if (bFlag == FALSE)
      {
         dwErr = PlayM4_GetLastError(g_lPort);
         return;
       }
    }

    //---------------------------------------
    // 获取显示窗口句柄
    HWND hWnd = GetConsoleWindow();

    PlayM4_SetFileRefCallBack(g_lPort,FileRefDoneCB,NULL);

    bFlag = PlayM4_OpenFile(g_lPort,"test.mp4");

    bFlag = PlayM4_Play(g_lPort,hWnd);

    PlayM4_ReversePlay(g_lPort);

    sleep(10000);

    PlayM4_Stop(g_lPort);

    PlayM4_CloseFile(g_lPort);

    PlayM4_FreePort(g_lPort);

    g_lPort = -1;

}


画图回调模块流程

在画图回调模块流程，先开始正常播放，通过画图回调函数在hdc上画线框或者叠加的字符。

需要调用接口PlayM4_RegisterDrawFun，在画图回调模块流程，先开始正常播放，通过画图回调函数在hdc上画线框或者叠加的字符。

需要注意的是：画图回调实现的效果是在当前显示状态下显示，实际上并没有修改码流数据，再次播放时候看不到上次画的线框或者叠加的字符。

示例代码

文件画图回调

#include <stdio.h>
#include <string.h>
#include <iostream>
#include "Windows.h"
#include "PlayM4.h"
using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

LONG g_lPort  =  -1;

void CALLBACK DrawFunCB(long nPort,HDC hDc,LONG nUser)
{
    SetBkMode(hDc, TRANSPARENT);
    SetTextColor(hDc, RGB(0, 128, 128));

    CRegisterDemoDlg *lp = (CRegisterDemoDlg *)nUser;
    CRect rFrntFace(100,100,200,400);
    ::DrawEdge(hDc,rFrntFace,EDGE_BUMP,BF_ADJUST | BF_BOTTOMLEFT | BF_TOPRIGHT);
}

void main()
{
     BOOL   bFlag = FALSE;
     DWORD  dwErr = 0;

     //---------------------------------------
    // 获取控制台窗口句柄
     HMODULE hKernel32 = GetModuleHandle("kernel32");
     GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

      if (g_lPort == -1)
      {
          bFlag = PlayM4_GetPort(&g_lPort);
          if (bFlag == FALSE)
          {
               dwErr = PlayM4_GetLastError(g_lPort);
               return;
           }
        }

    //---------------------------------------
    // 获取显示窗口句柄
    HWND hWnd = GetConsoleWindow();

    //注册画图回调
    PlayM4_RegisterDrawFun(g_lPort,DrawFunCB,NULL);

    bFlag = PlayM4_OpenFile(g_lPort,"test.mp4");

    bFlag = PlayM4_Play(g_lPort,hWnd);

    sleep(10000);

    PlayM4_Stop(g_lPort);

    PlayM4_CloseFile(g_lPort);

    PlayM4_FreePort(g_lPort);

    g_lPort = -1;

}


流模式模块流程

  • 流模式模块需要先获取播放库通道号，然后设置流模式（相关接口PlayM4_GetPort、PlayM4_SetStreamOpenMode），送入正确的媒体信息头打开数据流 （相关接口PlayM4_OpenStream），开始解码播放（相关接口PlayM4_Play)，然后送入正确的码流数据(相关接口PlayM4_InputData)。

  • 实时流需要获取解码后的数据，则可以调用解码回调接口（相关接口PlayM4_SetDecCallBackExMend）。
  • 多路实时流若都需要获取解码后的数据，每个需要获取解码数据的通道都可以调用解码回调接口（PlayM4_SetDecCallBackExMend），在解码回调函数中根据nPort号判断是具体哪路数据。
  • 文件方式播放下，不能调用PlayM4_CloseStream；流播放下，不能调用PlayM4_CloseFile接口。 流开关接口和文件开关接口不能交叉使用。

示例代码

示例：流模式解码数据(以本地PC上的录像文件模拟实时流数据输入）

#include <stdio.h>
#include <iostream>
#include "iostream"
#include "Windows.h"
#include "PlayM4.h"
using namespace std;
LONG  g_nPort  = -1;
#define READ_BUF_SIZE 200
#define PRIVT_HEAD_LEN 40

void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,
                       FRAME_INFO * pFrameInfo,
                       long nReserved1,long /*nReserved2*/)
{

     //---------------------------------------
     // 获取解码后音频数据
     if (pFrameInfo->nType == T_AUDIO16)
     {
       printf("test:: get audio data !\n");
      }

     //---------------------------------------
     // 获取解码后视频数据
      else if ( pFrameInfo->nType == T_YV12 )
     {
        printf("test:: get video data !\n");
      }
}

using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

void main()
{
  BOOL bFlag    = FALSE;
  int  nError   = 0;
  FILE* fp      =  NULL;
  char* pBuffer = NULL;

 //---------------------------------------
 // 获取控制台窗口句柄
 HMODULE hKernel32 = GetModuleHandle("kernel32");
 GetConsoleWindow  = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

  //---------------------------------------
  // 获取播放库通道号
  PlayM4_GetPort(&g_nPort);

  //打开待解码文件
  fp = fopen( "test.mp4", ("rb") );
  if (fp == NULL)
  {
     printf("cannot open the file !\n");
     return;
  }

  pBuffer = new char[READ_BUF_SIZE];
  if (pBuffer == NULL)
  {
    return;
  }

  //读取文件中文件头
  fread( pBuffer, PRIVT_HEAD_LEN, 1, fp );

  //设置流模式类型
  PlayM4_SetStreamOpenMode(g_nPort,STREAME_FILE);
  //打开流模式
  PlayM4_OpenStream(g_nPort,(PBYTE)pBuffer,PRIVT_HEAD_LEN,1024 * 1024);

  //设置解码回调
  PlayM4_SetDecCallBackExMend(g_nPort,DecCBFun,NULL,0,NULL);

  //---------------------------------------
  // 获取显示窗口句柄
  HWND hWnd = GetConsoleWindow();
  PlayM4_Play(g_nPort,hWnd);

  while (!feof(fp))
  {
     fread( pBuffer, READ_BUF_SIZE, 1, fp );

     while (1)
     {
       bFlag = PlayM4_InputData(g_nPort,(PBYTE)pBuffer,READ_BUF_SIZE);
       if (bFlag == FALSE)
       {
           nError = PlayM4_GetLastError(g_nPort);

           //若缓冲区满，则重复送入数据
           if (nError == PLAYM4_BUF_OVER)
          {
          Sleep(2);
          continue;
           }
        }

        //若送入成功，则继续读取数据送入到播放库缓冲
        break;
      }
  }

  Sleep(10000);
  //---------------------------------------
  // 停止解码
   PlayM4_Stop(g_nPort);

   //关闭流，回收源数据缓冲
   PlayM4_CloseStream(g_nPort);

   //释放播放库端口号
   PlayM4_FreePort(g_nPort);

   if (fp != NULL)
   {
        fclose(fp);
        fp = NULL;
   }

  if (pBuffer != NULL)
  {
    delete [] pBuffer;
    pBuffer = NULL;
  }
  return;
}


鹰眼模块流程

同步回放是指多个文件在有相同的时间段，然后多个窗口按照相同的时间戳播放。其中需要调用接口（PlayM4_SetSycGroup、PlayM4_SetSycStartTime）。

示例代码

示例一：同步回放

#include <stdio.h>
#include <iostream>
#include "stdafx.h"
#include "SynPlayMode.h"
#include "SynPlayModeDlg.h"
#include "PlayM4.h
#include "Windows.h"
using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

long m_lPort1 = -1;
long m_lPort2 = -1;
BOOL bFlag = FALSE;

void main() {

  //---------------------------------------
  // 获取播放库端口号
  bFlag = PlayM4_GetPort(&m_lPort1);
  bFlag = PlayM4_GetPort(&m_lPort2);

  //打开待播放文件
  bFlag = PlayM4_OpenFile(m_lPort1,"file1.mp4");
  bFlag = PlayM4_OpenFile(m_lPort2,"file2.mp4");

  //---------------------------------------
  //设置同步回放
  bFlag =	PlayM4_SetSycGroup(m_lPort1,0);
  bFlag =	PlayM4_SetSycGroup(m_lPort2,0);

 //---------------------------------------
  // 获取控制台窗口句柄
  HMODULE hKernel32 = GetModuleHandle("kernel32");
  GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
   HWND hWnd = GetConsoleWindow();
   HWND hWnd1 = GetDlgItem(IDC_STATIC_PIC2)->GetSafeHwnd();

 //开始播放
   PlayM4_Play(m_lPort1,hWnd);
   PlayM4_Play(m_lPort2,hWnd1);

  sleep(10000);

  //停止播放
   PlayM4_Stop(m_lPort1);
   PlayM4_Stop(m_lPort2);

  //关闭文件
  PlayM4_CloseFile(m_lPort1);
  PlayM4_CloseFile(m_lPort2);

  //释放播放库端口
  PlayM4_FreePort(m_lPort1);
  m_lPort1 = -1;

  PlayM4_FreePort(m_lPort2);
  m_lPort2 = -1;

  return;
}


文件定位模块流程

播放本地PC上的录像文件，播放库SDK支持按照帧号或者时间对文件进行定位，流程如下：

  • 先获取播放库端口号（PlayM4_GetPort）；
  • 打开待播放的文件（PlayM4_OpenFile）；
  • 创建文件索引（PlayM4_SetFileRefCallBack）；
  • 开始播放解码（PlayM4_Play）；
  • 按照时间或者帧号进行定位（PlayM4_SetCurrentFrameNum、PlayM4_SetPlayPos、PlayM4_SetPlayedTimeEx）；

    定位实现：

    • 创建文件索引（PlayM4_SetFileRefCallBack）。
    • 设置当前帧号（PlayM4_SetCurrentFrameNum），或者设定当前播放位置（PlayM4_SetPlayPos），设置当前播放时间（PlayM4_SetPlayedTimeEx）。

    示例代码

    播放文件

    #include <stdio.h>
#include <iostream>
#include "Windows.h"
#include "PlayM4.h"
using namespace std;
LONG nPort = -1;
BOOL bFlag = FALSE;
BOOL g_bRefDone= FALSE;
using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

void CALLBACK FileRefDoneCB(DWORD nPort,DWORD nUser)
{
       g_bRefDone = TRUE;
    TRACE("File reference created!\n");
}
void main()
{

    //---------------------------------------
    // 获取控制台窗口句柄
    HMODULE hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

    //---------------------------------------
    // 获取播放库端口号
    bFlag = PlayM4_GetPort(&nPort);

    //---------------------------------------
    // 获取显示窗口句柄
    HWND hWnd = GetConsoleWindow();

   //---------------------------------------
    // 创建文件索引
    PlayM4_SetFileRefCallBack(nPort,FileRefDoneCB,NULL);

    //打开待播放的文件
    bFlag = PlayM4_OpenFile(nPort,"test.mp4");
    if (bFlag == FALSE)
    {
    int nErr = PlayM4_GetLastError(nPort);
    printf("Open file failed %d!",nErr);
    return;
    }

  //开始播放文件
    PlayM4_Play(nPort, hWnd);

    while (1)
   {
      if (g_bRefDone == FALSE)
      {
           Sleep(2);
           continue;
       }
       else//索引创建成功
       {
          break;
        }
    }

   //定位到帧号为20的视频位置
   PlayM4_SetCurrentFrame(nPort,20);

   //定位到为2s的视频位置(从文件开始播放计时，播放2s的位置，即相对时间）
   PlayM4_SetPlayedTimeEx(nPort,2000);

   //定位到为5s的视频位置(从文件开始播放计时，播放5s的位置，即相对时间）
   PlayM4_SetPlayedTime(nPort,5);
   Sleep(10000);

    //停止播放
    PlayM4_Stop(nPort);

    //停止播放声音
    PlayM4_StopSound();

    //关闭文件
    PlayM4_CloseFile(nPort);

    PlayM4_FreePort(nPort);
    nPort  =  -1;

    return;
}


文件模块流程

    实现文件模块需要先获取播放库端口号。

    文件方式播放下，不能调用PlayM4_CloseStream；流播放下，不能调用PlayM4_CloseFile接口。 流开关接口和文件开关接口不能交叉使用。

    示例代码

    播放文件

    #include <stdio.h>
#include <iostream>
#include "Windows.h"
#include "PlayM4.h"
using namespace std;
LONG nPort = -1;
BOOL bFlag = FALSE;
using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

void main()
{

    //---------------------------------------
    // 获取控制台窗口句柄
    HMODULE hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

    //---------------------------------------
    // 获取播放库端口号
    bFlag = PlayM4_GetPort(&nPort);

    //---------------------------------------
    // 获取显示窗口句柄
    HWND hWnd = GetConsoleWindow();

    //打开待播放的文件
    bFlag = PlayM4_OpenFile(nPort,"test.mp4");
    if (bFlag == FALSE)
    {
    int nErr = PlayM4_GetLastError(nPort);
    printf("Open file failed %d!",nErr);
    return;
    }

  //开始播放文件
    PlayM4_Play(nPort, hWnd);

    //播放声音
    PlayM4_PlaySound(nPort);

    Sleep(10000);

    //停止播放
    PlayM4_Stop(nPort);

    //停止播放声音
    PlayM4_StopSound();

    //关闭文件
    PlayM4_CloseFile(nPort);

    PlayM4_FreePort(nPort);
    nPort  =  -1;

    return;
}


鱼眼模块流程

鱼眼功能模块是对鱼眼摄像机图像的矫正，使用时需要开启预览模块、获取鱼眼矫正处理子端口、设置鱼眼矫正参数、设置显示窗口、设置鱼眼窗口的绘图回调。

  • 开启和关闭鱼眼模块：开启鱼眼模块基本参数，调用的接口PlayM4_FEC_Enable、PlayM4_FEC_Disable。
  • 获取/删除鱼眼矫正处理子端口：调用的接口有PlayM4_FEC_GetPort、PlayM4_FEC_DelPort。
  • 设置/获取鱼眼矫正参数：调用的接口有PlayM4_FEC_SetParam、PlayM4_FEC_GetParam。
  • 设置显示窗口：调用的接口有PlayM4_FEC_SetWnd。
  • 设置鱼眼窗口画图回调：调用的接口有PlayM4_FEC_SetCallBack 。
  • 设置鱼眼硬解码需要设置PlayM4_FEC_SetConfig接口；软解码开启鱼眼时则不需要设置此接口；

示例代码

示例：鱼眼模块流程

#include <stdio.h>
#include <iostream>
#include "stdafx.h"
#include "SynPlayMode.h"
#include "SynPlayModeDlg.h"
#include "PlayM4.h
#include "Windows.h"
void FisheyePlay()
{
    BOOL bRet = FALSE;
    FISHEYEPARAM stFEPara1 = {0};
    FISHEYEPARAM stFEPara2 = {0};
    FISHEYEPARAM stFEPara3 = {0};

         //获取播放库端口
    PlayM4_GetPort(&m_lPort);
    if (-1 == m_lPort)
    {
           CString str;
           str.Format("PlayM4_GetPort fail\n");
           MessageBox(str);
           return;
    }

         //打开待播放的文件
    if (FALSE == PlayM4_OpenFile(m_lPort,m_strFileName.GetBuffer(m_strFileName.GetLength())))
    {
           CString str;
           str.Format("PlayM4_OpenFile fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
           MessageBox(str);
           goto EXIT1;
    }

          //播放视频文件
    if (FALSE == PlayM4_Play(m_lPort,GetDlgItem(IDC_FISHEYE_MAIN_WND)->GetSafeHwnd()))
    {
           CString str;
           str.Format("PlayM4_Play fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
           MessageBox(str);
           goto EXIT2;
    }

    //启动鱼眼功能
    if (FALSE == PlayM4_FEC_Enable(m_lPort))
    {
           CString str;
           str.Format("PlayM4_FEC_Enable fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
           MessageBox(str);
           goto EXIT2;
    }

    //子端口1 顶装，PTZ矫正，获取鱼眼矫正处理子端口
    if (FALSE == PlayM4_FEC_GetPort(m_lPort,&m_nSubPort1,FEC_PLACE_CEILING,FEC_CORRECT_PTZ))
    {
            CString str;
            str.Format("PlayM4_FEC_GetPort1 fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
            MessageBox(str);
            goto EXIT3;
    }

    //更新位置和Zoom值
    stFEPara1.nUpDateType = FEC_UPDATE_PTZPARAM | FEC_UPDATE_PTZZOOM;//更新的类型
    stFEPara1.stPTZParam.fPTZPositionX = 0.2; //PTZ显示的中心坐标
    stFEPara1.stPTZParam.fPTZPositionY = 0.3; //
    stFEPara1.fZoom                    = 0.1; //PTZ显示的范围参数
    //stCycleParam 用于圆心对当前鱼眼所有子端口都有影响

          //设置鱼眼矫正参数
    if (FALSE == PlayM4_FEC_SetParam(m_lPort,m_nSubPort1,&stFEPara1))
    {
            CString str;
            str.Format("PlayM4_FEC_SetParam1 fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
            MessageBox(str);
            goto EXIT3;
    }

    //子端口2 顶装，PTZ矫正 获取鱼眼矫正处理子端口
    if (FALSE == PlayM4_FEC_GetPort(m_lPort,&m_nSubPort2,FEC_PLACE_CEILING,FEC_CORRECT_PTZ))
    {
            CString str;
            str.Format("PlayM4_FEC_GetPort2 fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
            MessageBox(str);
            goto EXIT3;
    }

    //更新位置
    stFEPara2.nUpDateType = FEC_UPDATE_PTZPARAM;
    stFEPara2.stPTZParam.fPTZPositionX = 0.7; //(0,1)
    stFEPara2.stPTZParam.fPTZPositionY = 0.8; //(0,1)

        //设置鱼眼参数
    if (FALSE == PlayM4_FEC_SetParam(m_lPort,m_nSubPort2,&stFEPara2))
    {
            CString str;
            str.Format("PlayM4_FEC_SetParam2 fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
            MessageBox(str);
            goto EXIT3;
    }

    //Zoom
    stFEPara3.nUpDateType = FEC_UPDATE_PTZZOOM;
    stFEPara3.fZoom                    = 0.9; //(0,1)

        //设置鱼眼参数
    if (FALSE == PlayM4_FEC_SetParam(m_lPort,m_nSubPort2,&stFEPara3))
    {
          CString str;
          str.Format("PlayM4_FEC_SetParam3 fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
          MessageBox(str);
          goto EXIT3;
    }

    //add
    //子端口3 顶装，PTZ矫正 获取鱼眼矫正处理子端口
    if (FALSE == PlayM4_FEC_GetPort(m_lPort,&m_nSubPort3,FEC_PLACE_CEILING,FEC_CORRECT_PTZ))
    {
          CString str;
          str.Format("PlayM4_FEC_GetPort2 fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
          MessageBox(str);
          goto EXIT3;
    }

        //设置鱼眼参数
    stFEPara3.nUpDateType = FEC_UPDATE_PTZPARAM;
    stFEPara3.stPTZParam.fPTZPositionX = 0.7; //(0,1)
    stFEPara3.stPTZParam.fPTZPositionY = 0.8; //(0,1)
    stFEPara3.fZoom                    = 0.9; //(0,1)

    if (FALSE == PlayM4_FEC_SetParam(m_lPort,m_nSubPort2,&stFEPara3))
    {
          CString str;
          str.Format("PlayM4_FEC_SetParam3 fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
          MessageBox(str);
          goto EXIT3;
    }

    //设置鱼眼参数
    stFEPara3.nUpDateType = FEC_UPDATE_PTZZOOM;
    if (FALSE == PlayM4_FEC_SetParam(m_lPort,m_nSubPort2,&stFEPara3))
    {
          CString str;
          str.Format("PlayM4_FEC_SetParam3 fail[0x%x]\n",PlayM4_GetLastError(m_lPort));
          MessageBox(str);
          goto EXIT3;
    }

    //设置显示窗口
    PlayM4_FEC_SetWnd(m_lPort,m_nSubPort1,GetDlgItem(IDC_FISHEYE_SUB_WND1)->GetSafeHwnd());
    PlayM4_FEC_SetWnd(m_lPort,m_nSubPort2,GetDlgItem(IDC_FISHEYE_SUB_WND2)->GetSafeHwnd());
    PlayM4_FEC_SetWnd(m_lPort,m_nSubPort3,GetDlgItem(IDC_FISHEYE_SUB_WND3)->GetSafeHwnd());

    return;

EXIT3:
    //删除鱼眼子端口
    if (-1 != m_nSubPort1)
    {
          PlayM4_FEC_DelPort(m_lPort,m_nSubPort1);
          m_nSubPort1 = -1;
    }

      //删除鱼眼子端口
    if (-1 != m_nSubPort2)
    {
           PlayM4_FEC_DelPort(m_lPort,m_nSubPort2);
           m_nSubPort2 = -1;
    }

      //删除鱼眼子端口
    if (-1 != m_nSubPort3)
    {
           PlayM4_FEC_DelPort(m_lPort,m_nSubPort3);
           m_nSubPort3 = -1;
    }

    //关闭鱼眼模块
    PlayM4_FEC_Disable(m_lPort);

EXIT2:
    PlayM4_CloseFile(m_lPort);
EXIT1:
    if (-1 != m_lPort)
    {
           PlayM4_FreePort(m_lPort);
           m_lPort = -1;
    }
}


抓图模块流程

抓图模块适用于获取当前解码后送入到显卡显示的数据（解码后的数据）功能。该模块的所有功能都需要先进行注册显示回调，PlayM4_SetDisplayCallBack、PlayM4_SetDisplayCallBackEx。

回调函数中不能调用参数有端口号的接口，所以只能调用PlayM4_ConvertToBmpFile 和PlayM4_ConvertToJpegFile ：调用的接口有 PlayM4_ConvertToBmpFile、PlayM4_ConvertToJpegFile

示例代码

文件模式抓图（连续抓图和手动抓图）

#include <stdio.h>
#include <string.h>
#include <iostream>
#include "Windows.h"
#include "PlayM4.h"
using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

LONG     g_lPort                =  -1;
CString  m_strCapPicPath        = _T("");
CString  sFilePath              = _T("");
UINT	   m_npic_bmp             = 0;

void CALLBACK DisplayCBFun(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReserved)
{
    TRACE("zytest: get vid pic !\n");

    if(m_strCapPicPath.Compare(""))
    {
         sFilePath.Format("%s\\capture%02d.bmp", "g:\\", m_npic_bmp++);
    }
    else
    {
         sFilePath.Format("C:\\capture%02d.bmp", m_npic_bmp++);
    }

    //连续抓BMP图片
    PlayM4_ConvertToBmpFile(pBuf,nSize,nWidth,nHeight,nType,sFilePath.GetBuffer(sFilePath.GetLength()));
}

void main()
{
       BOOL   bFlag          = FALSE;
    DWORD  dwErr          = 0;
    LONG dwWidth          = 0;
    LONG dwHeight         = 0;
    DWORD dwSize          = 0;
    DWORD dwCapSize       = 0;

     //---------------------------------------
    // 获取控制台窗口句柄
    HMODULE hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow  = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

    //获取播放库端口号
      if (g_lPort == -1)
      {
          bFlag = PlayM4_GetPort(&g_lPort);
          if (bFlag == FALSE)
          {
               dwErr = PlayM4_GetLastError(g_lPort);
               return;
           }
        }

    //---------------------------------------
    // 获取显示窗口句柄
    HWND hWnd = GetConsoleWindow();

    //打开待播放的文件
    bFlag = PlayM4_OpenFile(g_lPort,"test.mp4");

    //设置显示回调
    PlayM4_SetDisplayCallBack(g_lPort,DisplayCBFun);

    //解码显示
    bFlag = PlayM4_Play(g_lPort,hWnd);

    sleep(10000);

    //获取当前视频文件的分辨率
    bFlag  = PlayM4_GetPictureSize(g_lPort,&dwWidth,&dwHeight);
    dwSize = dwWidth * dwHeight * 5;

    //申请抓图内存
    if (m_pCapBuf == NULL)
    {
          m_pCapBuf = new BYTE[dwSize];
          if (m_pCapBuf == NULL)
          {
                return;
           }
      }

    //抓图BMP图片
    bFlag = PlayM4_GetBMP(g_lPort,m_pCapBuf,dwSize,&dwCapSize);
    if (bFlag == FALSE)
    {
         dwErr = PlayM4_GetLastError(m_lPort);
     }

    if (m_pCapBuf != NULL)
    {
        delete [] m_pCapBuf;
        m_pCapBuf = NULL;
    }

    //停止解码
    PlayM4_Stop(g_lPort);

    //关闭文件
    PlayM4_CloseFile(g_lPort);

    //释放端口号
    PlayM4_FreePort(g_lPort);

     g_lPort = -1;

}


鹰眼模块流程

鹰眼即可同时提供全景与特写画面，兼顾全景与细节。其中全景画面由8个传感器拼接而成，可实现360度的全景监控；一体化机芯和高速云台设计，在全景监控的同时为用户提供快速细节定位功能。

  • 鹰眼参数设置：设置鹰眼参数，调用的接口PlayM4_SR_SetConfig。
  • 硬解码鹰眼矫正需要调用接口PlayM4_SetDecodeEngineEx；如果软解则不需要调用这个接口，播放库的7.3.6及其以上版本支持鹰眼软解码。
  • 设置鹰眼旋转参数：调用的接口有PlayM4_SR_Rotate。
  • 鹰眼抓图：调用的接口有PlayM4_SR_Capture。
  • 鹰眼(小鹰眼)对显卡要求比较高，差的显卡可能无法实现功能。建议最低要求：intel和nvida，比如 Intel：Graphics HD 4600/4700及以上；Nvidia：GTX970及以上。推荐配置如下：I7，内存8G，HD GRAPHICS 4600 、GTX970。

示例代码

示例：鹰眼模块流程

    PlayM4_SetDecodeEngine(nPort, HARD_DECODE_ENGINE);//需要先开硬解码
    int iEagleType = CFG_DISPLAY_MODEL_MODE; // 全部渲染
    PLAYM4SRMODELMODE stParam;
    stParam.emTextureMode = PLAYM4_TEXTURE_DOUBLE;//双面贴纹理
    stParam.ulDisplayType = PLAYM4_MODEL_SOLID;
    stParam.nTransformMode = 0;
    stParam.emModelType = PLAYM4_MODELTYPE_EAGLE_EYE;
    stParam.bModelMode = true;
    PlayM4_SR_SetConfig(nPort, iEagleType, (void*)&stParam);


PlayM4_GetSdkVersion

获取播放库SDK版本号和build号。

DWORD  PlayM4_GetSdkVersion(
);

Parameters

无

Return Values

高16位表示当前的build号。9~16位表示主版本号，1~8位表示次版本号。如：返回值0x06040105表示：build号是0604，版本号1.5。

Remarks

如果只是修改bug，我们只升级后面两位版本号。


PlayM4_GetLastError

获取错误号。

DWORD  PlayM4_GetLastError(
  LONG   nPort
);

Parameters

nPort
[in] 播放通道号

播放库错误码：

错误类型 | 错误值 | 错误信息
PLAYM4_NOERROR | 0 | 没有错误；
PLAYM4_PARA_OVER | 1 | 输入参数非法；
PLAYM4_ORDER_ERROR | 2 | 调用顺序不对；
PLAYM4_TIMER_ERROR | 3 | 多媒体时钟设置失败；
PLAYM4_DEC_VIDEO_ERROR | 4 | 视频解码失败；
PLAYM4_DEC_AUDIO_ERROR | 5 | 音频解码失败；
PLAYM4_ALLOC_MEMORY_ERROR | 6 | 分配内存失败；
PLAYM4_OPEN_FILE_ERROR | 7 | 文件操作失败；
PLAYM4_CREATE_OBJ_ERROR | 8 | 创建线程事件等失败；
PLAYM4_CREATE_DDRAW_ERROR | 9 | 创建DierctDraw失败；
PLAYM4_CREATE_OFFSCREEN_ERROR | 10 | 创建后端缓存失败；
PLAYM4_BUF_OVER | 11 | 缓冲区满，输入流失败；
PLAYM4_CREATE_SOUND_ERROR | 12 | 创建音频设备失败；
PLAYM4_SET_VOLUME_ERROR | 13 | 设置音量失败；
PLAYM4_SUPPORT_FILE_ONLY | 14 | 只能在播放文件时才能使用此接口；
PLAYM4_SUPPORT_STREAM_ONLY | 15 | 只能在播放流时才能使用此接口；
PLAYM4_SYS_NOT_SUPPORT | 16 | 不支持；
PLAYM4_FILEHEADER_UNKNOWN | 17 | 没有文件头；
PLAYM4_VERSION_INCORRECT | 18 | 解码器和编码器版本不对应；
PALYM4_INIT_DECODER_ERROR | 19 | 初始化解码器失败；
PLAYM4_CHECK_FILE_ERROR | 20 | 文件太短或码流无法识别；
PLAYM4_INIT_TIMER_ERROR | 21 | 初始化多媒体时钟失败；
PLAYM4_BLT_ERROR | 22 | 位拷贝失败(32位播放库下容易出现此问题，主要是渲染创建失败）；
PLAYM4_UPDATE_ERROR | 23 | 显示overlay失败；
PLAYM4_OPEN_FILE_ERROR_MULTI | 24 | 打开文件失败，流类型是复合流；
PLAYM4_OPEN_FILE_ERROR_VIDEO | 25 | 打开文件失败，流类型是视频流；
PLAYM4_JPEG_COMPRESS_ERROR | 26 | JPEG压缩失败；
PLAYM4_EXTRACT_NOT_SUPPORT | 27 | 文件不支持；
PLAYM4_EXTRACT_DATA_ERROR | 28 | 数据错误；
PLAYM4_SECRET_KEY_ERROR | 29 | 解码密钥错误；
PLAYM4_DECODE_KEYFRAME_ERROR | 30 | 解码关键帧失败；
PLAYM4_NEED_MORE_DATA | 31 | 数据不足；
PLAYM4_INVALID_PORT | 32 | 无效端口号；
PLAYM4_NOT_FIND | 33 | 查找失败；
PLAYM4_NEED_LARGER_BUFFER | 34 | 需要更大的缓冲区；
PLAYM4_FAIL_UNKNOWN | 99 | 未知的错误；

鱼眼部分错误码：

错误类型 | 错误值 | 错误信息
PLAYM4_FEC_ERR_ENABLEFAIL | 100 | 鱼眼模块加载失败;
PLAYM4_FEC_ERR_NOTENABLE | 101 | 鱼眼模块没有加载;
PLAYM4_FEC_ERR_NOSUBPORT | 102 | 子端口没有分配;
PLAYM4_FEC_ERR_PARAMNOTINIT | 103 | 没有初始化对应端口的参数;
PLAYM4_FEC_ERR_SUBPORTOVER | 104 | 子端口已经用完;
PLAYM4_FEC_ERR_EFFECTNOTSUPPORT | 105 | 该安装方式下这种效果不支持;
PLAYM4_FEC_ERR_INVALIDWND | 106 | 非法的窗口;
PLAYM4_FEC_ERR_PTZOVERFLOW | 107 | PTZ位置越界;
PLAYM4_FEC_ERR_RADIUSINVALID | 108 | 圆心参数非法;
PLAYM4_FEC_ERR_UPDATENOTSUPPORT | 109 | 指定的安装方式和矫正效果，该参数更新不支持;
PLAYM4_FEC_ERR_NOPLAYPORT | 110 | 播放库端口没有启用;
PLAYM4_FEC_ERR_PARAMVALID | 111 | 参数为空;
PLAYM4_FEC_ERR_INVALIDPORT | 112 | 非法子窗口;
PLAYM4_FEC_ERR_PTZZOOMOVER | 113 | PTZ矫正范围越界;
PLAYM4_FEC_ERR_OVERMAXPORT | 114 | 矫正通道饱和，最大支持的矫正通道为四个;
PLAYM4_FEC_ERR_ENABLED | 115 | 该端口已经启用了鱼眼模块;
PLAYM4_FEC_ERR_D3DACCENOTENABLE | 116 | D3D加速没有开启;
PLAYM4_FEC_ERR_PLACETYPE | 117 | 安装方式不正确；一个播放库port需要对应一种安装方式;
PLAYM4_FEC_ERR_CorrectType | 118 | 矫正方式错误：如矫正方式已有，则不能开多个；比如一个播放库port设定除了PTZ和鱼眼半球矫正方式外，其他的矫正方式则只能开一路；设置180度矫正不能和PTZ矫正仪器开，半球矫正与其他矫正则无关联性。;
PLAYM4_FEC_ERR_NULLWND | 119 | 鱼眼窗口为NULL;
PLAYM4_FEC_ERR_PARA | 120 | 鱼眼参数错误;

Return Values

错误码，详见错误码宏定义。


PlayM4_SetHLogFlag

HLog日志开关接口。

BOOL PlayM4_SetHLogFlag(
  LONG     nPort,
  BOOL     bFlag,
  char    *pConfigFilePath
);

Parameters

nPort
[in] 播放通道号
bFlag
[in] 开关标记
pConfigFilePath
[in] 配置文件路径名（目前配置文件路径参数不起作用，作为后续可能的扩展功能预留）

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 任一port调用开关配置，对进程内全部port都会起作用。
  • 目前配置文件参数不起作用，只作为后续可能的扩展使用。

See Also

PlayM4_OpenStream PlayM4_CloseStream
PlayM4_Play PlayM4_Stop
PlayM4_InputData
PlayM4_SetDecodeEngine


PlayM4_GetPort

获取未使用的通道号。

BOOL  PlayM4_GetPort(
  LONG*    nPort
);

Parameters

nPort
[out] 播放通道号，指向用于获取端口号的LONG型变量指针

Return Values

TRUE表示成功，FALSE表示失败。获取错误码调用PlayM4_GetLastError。

Remarks

获取未使用的通道号,通道号的上限为500。

See Also

PlayM4_FreePort


PlayM4_FreePort

释放已使用的通道号。

BOOL  PlayM4_FreePort(
  LONG      nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

释放已使用的通道号，释放成功后，最好将nPort置为-1。

停止解码释放资源后，窗口显示停在最后一帧画面，若要消除，应用层可以自行刷新窗口恢复显示播放前的窗口状态。

See Also

PlayM4_GetPort


PlayM4_OpenFile

打开文件。

BOOL  PlayM4_OpenFile(
  LONG     nPort,
  LPSTR    sFileName
);

Parameters

nPort
[in] 播放通道号
sFileName
[in] 文件名

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

AVI和3GPP只支持文件模式。

文件方式播放下，不能调用PlayM4_CloseStream；流播放下，不能调用PlayM4_CloseFile接口。流开关接口和文件开关接口不能交叉使用。

See Also

PlayM4_CloseFile


PlayM4_CloseFile

关闭文件。

BOOL  PlayM4_CloseFile(
  LONG    nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

文件方式播放下，不能调用PlayM4_CloseStream；流播放下，不能调用PlayM4_CloseFile接口。流开关接口和文件开关接口不能交叉使用。

See Also

PlayM4_OpenFile


PlayM4_SetStreamOpenMode

设置流播放模式。

BOOL  PlayM4_SetStreamOpenMode(
  LONG       nPort,
  DWORD      nMode
);

Parameters

nPort
[in] 播放通道号
nMode
[in] 流播放模式，如下所示：
宏定义 | 宏定义值 | 含义
STREAME_REALTIME | 0 | 此模式（默认）下, 会尽量保正实时性, 防止数据阻塞; 而且数据检查严格
STREAME_FILE | 1 | 此模式下按时间戳播放

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

必须在播放之前设置。2.2以上版本SDK以后可以做暂停，快放，慢放，单帧播放操作。PlayM4_SetStreamOpenMode在PlayM4_OpenStream之前调用才有效。

See Also

PlayM4_GetStreamOpenMode


PlayM4_GetStreamOpenMode

获取流播放模式。

LONG  PlayM4_GetStreamOpenMode(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

STREAME_REALTIME或STREAME_FILE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_SetStreamOpenMode


PlayM4_OpenStream

打开流。

BOOL  PlayM4_OpenStream(
  LONG           nPort,
  PBYTE          pFileHeadBuf,
  DWORD          nSize,
  DWORD          nBufPoolSize
);

Parameters

nPort
[in] 播放通道号
pFileHeadBuf
[in] 文件头数据
nSize
[in] 文件头长度
nBufPoolSize
[in] 设置播放器中存放数据流的缓冲区大小。范围是SOURCE_BUF_MIN~ SOURCE_BUF_MAX。该值过小会导致无法解码。
宏定义 | 宏定义值 | 含义
SOURCE_BUF_MIN | 1024*50 | 缓冲数据流缓冲最小值
SOURCE_BUF_MAX | 1024*100000 | 缓冲数据流缓冲最大值

Return Values

成功返回TRUE；失败返回FALSE。

Remarks

当前播放库已经支持无头码流，文件头长度可以为零，若无头码流则码流必须为我司设备编码的码流，且建议从文件开头部分到能解析出正确的I帧，此时数据大小必须小于10K。

avi和3gpp封装不支持流模式。

支持MP4索引前置文件流式播放和定位

文件方式播放下，不能调用PlayM4_CloseStream；流播放下，不能调用PlayM4_CloseFile接口。流开关接口和文件开关接口不能交叉使用。

Example

以流模式解码数据码流为例，本示例以本地录像文件test.mp4模拟的实时码流数据

CFile  m_TestFile;
long   nPort = -1;
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_GetPort(&nPort);

    //设置模式
    PlayM4_SetStreamOpenMode(nPort,STREAME_FILE);

    //打开流接口
    If (!PlayM4_OpenStream(nPort,pFileHead, nLength,1024*1000))
    {
      m_strPlayFileName="";
      MessageBox("文件打不开");
     }

    //读取数据送入播放库解码
     InputData();

    //开始解码，若需要显示视频图像则送入正确的窗口句柄；若只需要解码不需要显示，则可以将窗口句柄设置为NULL，即PlayM4_Play( nPort, NULL))
     m_bPlaying  =  PlayM4_Play( nPort, m_hWnd);
     delete []pFileHead;

     //播放完成后，回收播放资源
     //停止解码
      PlayM4_Stop(nPort);
     //关闭数据流
      PlayM4_CloseStream(nPort);
     //释放播放通道号
      PlayM4_FreePort(nPort);
      nPort = -1;
}

///////////////////////////////////////////////////////////////////////////////
void InputData()
{
    BYTE pBuf[4096];
    DWORD  dwError = 0;

    while (1)
    {
       if(!(m_TestFile.Read(pBuf,sizeof(pBuf)))
        {
              //File end;
               return;
       }

       while (!PlayM4_InputData(nPort,pBuf,sizeof(pBuf)))
       {
           if(!m_bPlaying)
               return;//如果已经停止播放，则退出；

           dwError = PlayM4_GetLastError(nPort);
           if (dwError == 11)//缓冲区满，输入流失败，需要重复送入数据
           {
               sleep(2);
               continue;
            }
        }
    }

}

See Also

PlayM4_CloseStream


PlayM4_CloseStream

关闭流。

BOOL PlayM4_CloseStream(
  LONG  nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

文件方式播放下，不能调用PlayM4_CloseStream；流播放下，不能调用PlayM4_CloseFile接口。流开关接口和文件开关接口不能交叉使用。

See Also

PlayM4_OpenStream


PlayM4_InputData

输入流数据。

BOOL PlayM4_InputData(
  LONG      nPort,
  PBYTE     pBuf,
  DWORD     nSize
);

Parameters

nPort
[in] 播放通道号
pBuf
[in] 流数据缓冲区地址
nSize
[in] 流数据缓冲区大小

Return Values

TRUE表示已经输入数据。FALSE 表示失败，数据没有输入成功。获取错误码调用PlayM4_GetLastError。

Remarks

输入流数据，需要在开启流之后才能输入数据，返回False一般是由于内部缓冲区满。

我们建议：

1.在实时流情况下，因数据满而无法送入播放库，可以选择丢弃，后果是画面可能跳帧或者花屏，如果无法接受，则sleep几毫秒后，再尝试多送几次；

2.文件流回放模式下，数据满而导致无法送入播放库，需要不断尝试，直到PlayM4_InputData返回成功为止。

若PlayM4_InputData的数据是40字节头时，播放库内部会重新PlayM4_CloseStream然后再PlayM4_OpenStream，即关闭当前码流，重新开始新的码流。

See Also

PlayM4_SetStreamOpenMode PlayM4_OpenStream

PlayM4_CloseStream


PlayM4_OpenStreamAdvanced

打开流（以协议的方式）。

BOOL PlayM4_OpenStreamAdvanced(
  LONG                  nPort,
  int                   nProtocolType,
  PLAYM4_SESSION_INFO   pstSessionInfo,
  DWORD                 nBufPoolSize
);

Parameters

nPort
[in] 播放通道号
nProtocolType
[in] 协议类型，若取值为PLAYM4_PROTOCOL_RTSP，表示RTSP协议
pstSessionInfo
[in] 协议信息结构体，若取值为PLAYM4_SESSION_INFO_SDP，表示nSessionInfoTypeSDP信息
nBufPoolSize
[in] 协议数据大小

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

该接口是使用非私有40个字节开流，现支持用SDP开流。

网络状况差，数据部均匀或者有丢弃可能会引起卡顿等现象。

Hik设备音频格式支持AAC、G711、MP2L2的SDP开流，暂不支持G722、G726、PCM；第三方设备由于音频格式语法打发和HIK有差异，则是否支持需要具体分析。

当前只支持RTSP协议取流。

文件方式播放下，不能调用PlayM4_CloseStream；流播放下，不能调用PlayM4_CloseFile接口。流开关接口和文件开关接口不能交叉使用。

See Also

PlayM4_SetStreamOpenMode PlayM4_OpenStream PlayM4_CloseStream


PlayM4_Play

开启播放。

BOOL PlayM4_Play(
  LONG   nPort,
  HWND   hWnd
);

Parameters

nPort
[in] 播放通道号
HWND
[in] 播放视频的窗口句柄

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

播放开始，播放视频画面大小将根据hWnd窗口调整，要全屏显示，只要把hWnd窗口放大到全屏。

开始解码线程，若送入的显示窗口句柄为NULL，则不显示，但是不影响解码。

See Also

PlayM4_Stop PlayM4_Pause

PlayM4_Fast PlayM4_Slow


PlayM4_Stop

关闭播放。

BOOL PlayM4_Stop(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_Play PlayM4_Pause

PlayM4_Fast PlayM4_Slow


PlayM4_Pause

暂停/恢复播放。

BOOL PlayM4_Pause(
  LONG     nPort,
  DWORD    nPause
);

Parameters

nPort
[in] 播放通道号
nPause
[in] 1：暂停，0：恢复

Return Values

TRUE表示调用成功，FALSE表示调用失败。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_Play PlayM4_Pause

PlayM4_Fast PlayM4_Slow


PlayM4_Slow

慢速播放。

BOOL PlayM4_Slow(
  LONG  nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

每次调用将使当前播放速度慢一倍；最多调用4次；要恢复正常播放调用PlayM4_Play()，从当前位置开始正常播放。

See Also

PlayM4_Play PlayM4_Stop

PlayM4_Pause PlayM4_Fast


PlayM4_Fast

快速播放。

BOOL PlayM4_Fast(
  LONG   nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

每次调用将使当前播放速度加快一倍，正常速度调用此接口最多调用6次，即最高64倍速；要恢复正常播放调用PlayM4_Play(),从当前位置开始正常播放；高清码流在高倍速播放时，由于受到解码和显示的限制，可能达不到所设置的速度。

See Also

PlayM4_Play PlayM4_Stop

PlayM4_Pause PlayM4_Stop


PlayM4_OneByOne

单帧前进。

BOOL PlayM4_OneByOne(
  LONG   nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

恢复正常播放需要调用PlayM4_Play()。

See Also

PlayM4_OneByOneBack PlayM4_Play


PlayM4_OneByOneBack

单帧回退。

BOOL PlayM4_OneByOneBack(
  LONG   nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

每调用一次倒退一帧。只支持文件播放，且必须在文件索引生成之后才能调用，暂时不支持TS封装文件，且需要文件帧号是连续的。

由于同步机制影响，单帧后退时，智能信息的显示与正放时有所不同。

如果单帧回放的文件帧号不连续，则调用单帧回退接口会报错误码16，不支持。

See Also

PlayM4_OneByOne PlayM4_Play


PlayM4_PlaySound

以独占方式打开声音。

BOOL PlayM4_PlaySound(
  LONG   nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

同一时刻只能有一路声音。如果现在已经有声音打开，则自动关闭原来已经打开的声音,默认情况下声音是关闭的。

PlayM4_PlaySound、PlayM4_PlaySoundShare、PlayM4_StopSound、PlayM4_StopSoundShare需要配对调用；

在播放声音过程中，建议PlayM4_PlaySound，PlayM4_PlaySoundShare不要混用。

Remarks

  • 该接口是以独占的式打开声音，即同一时刻只能有一路声音。如果现在已经有声音打开，则自动关闭原来已经打开的声音，默认情况下声音是关闭的。
  • PlayM4_PlaySoundShare、PlayM4_StopSoundShare是以共享的方式打开声音。PlayM4_PlaySound、PlayM4_StopSound和PlayM4_PlaySoundShare、PlayM4_StopSoundShare需要配对调用。在播放声音过程中，建议PlayM4_PlaySound、PlayM4_PlaySoundShare不要混用。
  • 如果PlayM4_OpenStream的时候40字节文件头未申明音频编码类型，PlayM4_PlaySound会报错。
  • G系列音频采样率按照封装层上的数据播放，如果解码文件或者码流的封装层上标识的音频采样率不正确，会导致声音播放异常。
  • 播放低帧率文件时，必须先开启声音再播放，否则可能造成声音播放不正常。

See Also

PlayM4_StopSound PlayM4_PlaySoundShare PlayM4_StopSoundShare


PlayM4_StopSound

关闭声音（独占方式）。

BOOL PlayM4_StopSound(
);

Parameters

无

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

同一时刻只能有一路声音。如果现在已经有声音打开，则自动关闭原来已经打开的声音,默认情况下声音是关闭的。

PlayM4_PlaySound、PlayM4_PlaySoundShare、PlayM4_StopSound、PlayM4_StopSoundShare需要配对调用；

在播放声音过程中，建议PlayM4_PlaySound，PlayM4_PlaySoundShare不要混用。

See Also

PlayM4_PlaySound PlayM4_PlaySoundShare PlayM4_StopSoundShare


PlayM4_PlaySoundShare

以共享方式打开声音。

BOOL PlayM4_PlaySoundShare(
  LONG    nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 该接口是以共享方式打开声音，而Playm4_PlaySound和PlayM4_StopSound是以独占方式播放声音的。
  • PlayM4_PlaySoundShare、PlayM4_StopSoundShare需要配对调用；在播放声音过程中，建议PlayM4_PlaySound，PlayM4_PlaySoundShare不要混用。
  • 如果PlayM4_OpenStream的时候40字节文件头未申明音频编码类型，PlayM4_PlaySoundShare会报错。
  • G系列音频采样率按照封装层上的数据播放，如果解码文件或者码流的封装层上标识的音频采样率不正确，会导致声音播放异常。
  • 播放低帧率文件时，必须先开启声音再播放，否则可能造成声音播放不正常。
  • WIN98及其之前版本操作系统不支持创建多个声音设备。如果声卡已经被使用，那么此函数将返回FALSE。

See Also

PlayM4_PlaySound PlayM4_StopSound PlayM4_StopSoundShare


PlayM4_StopSoundShare

关闭声音（共享方式）。

BOOL PlayM4_StopSoundShare(
  LONG   nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

以共享方式关闭声音。Playm4_PlaySound和PlayM4_StopSound是以独占方式播放声音的。

WIN98及其之前版本操作系统不支持创建多个声音设备。如果声卡已经被使用，那么此函数将返回FALSE;

PlayM4_PlaySoundShare，PlayM4_StopSoundShare需要配对调用；在播放声音过程中，建议PlayM4_PlaySound，PlayM4_PlaySoundShare不要混用。

See Also

PlayM4_PlaySound PlayM4_StopSound PlayM4_PlaySoundShare


PlayM4_SetVolume

设置音量。

BOOL PlayM4_SetVolume(
  LONG   nPort,
  WORD   nVolume
);

Parameters

nPort
[in] 播放通道号
nVolume
[in] 音量值，范围0-0XFFFF

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

可以在播放之前设置，返回值是TRUE，但设置的值被保存，并作为启动声音时的初始音量。这里的音量是指声卡输出的主音量，会影响到其他的声音应用。

See Also

PlayM4_GetVolume PlayM4_AdjustWaveAudio

PlayM4_PlaySound PlayM4_StopSound

PlayM4_PlaySoundShare PlayM4_StopSoundShare


PlayM4_GetVolume

获取音量。

WORD PlayM4_GetVolume(
  LONG   nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

音量值。这里的音量是指声卡输出的主音量，会影响到其他的声音应用。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_SetVolume PlayM4_AdjustWaveAudio

PlayM4_PlaySound PlayM4_StopSound

PlayM4_PlaySoundShare PlayM4_StopSoundShare


PlayM4_AdjustWaveAudio

调整WAVE波形。

BOOL PlayM4_AdjustWaveAudio(
  LONG  nPort,
  LONG  nCoefficient
);

Parameters

nPort
[in] 播放通道号
nCoefficient
[in] 调整参数，0表示不调整，其他取值范围从MIN_WAVE_COEF到MAX_WAVE_COEF。若设定为MIN_WAVE_COEF表示音量最低，若设定为MAX_WAVE_COEF表示音量最大。
宏定义 | 宏定义值 | 含义
MIN_WAVE_COEF | -100 | 音频最小值
MAX_WAVE_COEF | 100 | 音量最大值

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 调用该接口调整WAVE波形，可以改变声音的大小。该接口和PlayM4_SetVolume的不同在于，它是调整声音数据，只对该路其作用，而PlayM4_SetVolume是调整声卡音量，对整个系统起作用。
  • 调整WAVE波形会破坏音质，除非想每路单独调整音量，否则请谨慎使用。
  • 在开启声音后调用该接口，设置的值才能生效。
  • Win64位版本播放库不支持该接口。
  • 此接口只支持单声道，不支持双声道。

See Also

PlayM4_SetVolume PlayM4_GetVolume

PlayM4_PlaySound PlayM4_StopSound

PlayM4_PlaySoundShare PlayM4_StopSoundShare


PlayM4_IgnoreHeaderAudioDefine

忽略掉海康头中的音频声明。

BOOL PlayM4_IgnoreHeaderAudioDefine(
  int  nPort,
  int  nEnable
);

Parameters

nPort
[in] 播放通道号
nEnable
[in] 开启标记，0-表示不忽略；非0-表示忽略。取值为int型非0，包含正数和负数。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 调用该接口设置是否忽略hik头中音频格式声明判断。
  • 打开声音时根据忽略标记是否判断hik头中是否有音频格式进行报错或者不报错。
  • 此接口设置的标记对关闭流之后仍然有效。

See Also

PlayM4_GetPort PlayM4_OpenFile

PlayM4_OpenStream PlayM4_Play


PlayM4_SetColor

设置视频参数。

BOOL PlayM4_SetColor(
  LONG     nPort,
  DWORD    nRegionNum,
  int      nBrightness,
  int      nContrast,
  int      nSaturation,
  int      nHue
);

Parameters

nPort
[in] 播放通道号
nRegionNum
[in] 显示区域，参考PlayM4_SetDisplayRegion；如果只有一个显示区域(通常情况)设为0
nBrightness
[in] 亮度 ，默认64； 范围0-128
nContrast
[in] 对比度，默认64； 范围0-128
nSaturation
[in] 饱和度，默认64； 范围0-128
nHue
[in] 色调 ，默认64； 范围0-128

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

如果全部为默认值将不进行颜色调节。

此接口不支持2400万的码流功能，如果调用设置，可能会引起未知错误。

See Also

PlayM4_GetColor PlayM4_SetImageSharpen


PlayM4_GetColor

获取视频参数。

BOOL PlayM4_GetColor(
  LONG     nPort,
  DWORD    nRegionNum,
  int      *pBrightness,
  int      *pContrast,
  int      *pSaturation,
  int      *pHue
);

Parameters

nPort
[in] 播放库端口号
nRegionNum
[in] 显示区域
pBrightness
[out] 亮度 ，默认64； 范围0-128
pContrast
[out] 对比度，默认64； 范围0-128
pSaturation
[out] 饱和度，默认64； 范围0-128
pHue
[out] 色调 ，默认64； 范围0-128

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口不支持2400万的码流功能，如果调用设置，可能会引起未知错误。

See Also

PlayM4_SetColor PlayM4_SetImageSharpen


PlayM4_SetImageSharpen

设置图像锐化。

BOOL PlayM4_SetImageSharpen(
  LONG     nPort,
  DWORD    nLevel
);

Parameters

nPort
[in] 播放通道号
nLevel
[in] 锐化级别（1～6，0不做锐化，1低级，6高级）默认不做锐化

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口不支持2400万的码流功能，如果调用设置，可能会引起未知错误。

See Also

PlayM4_SetColor PlayM4_GetColor


PlayM4_SetRotateAngle

设置图像旋转模式。

BOOL PlayM4_SetRotateAngle(
  LONG     nPort,
  DWORD    nRegionNum,
  DWORD    dwType
);

Parameters

nPort
[in] 播放通道号
nRegionNum
[in] 显示区域号
dwType
[in] 详见“Remarks”说明

Remarks

调用PlayM4_FEC_Enable开启鱼眼模块功能后不支持该旋转功能。

视频旋转时，私有数据的图片叠加和热成像智能信息不会随着旋转，还是保持原来的状态。

不同的dwType值对应不同的宏定义值和旋转模式，如下表所示：

dwType值 | 宏定义值 | 对应旋转模式
R_ANGLE_0 | -1 | 不旋转
R_ANGLE_L90 | 0 | 向左旋转90度
R_ANGLE_R90 | 1 | 向右旋转90度
R_ANGLE_180 | 2 | 旋转180度

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口不支持2400万的码流功能，如果调用设置，可能会引起未知错误。

若开启了硬解码则不支持旋转功能。

See Also

PlayM4_SetColor PlayM4_GetColor

PlayM4_SetImageSharpen


PlayM4_GetCurrentFrameRate

获取当前帧率。

DWORD PlayM4_GetCurrentFrameRate(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回当前码流中当前编码帧率；失败返回0xffffffff。获取错误码调用PlayM4_GetLastError。

Remarks

如果码流中的帧率小于1，则返回0。在未调用PlayM4_Play接口时调用此接口则接口返回值无实际参考意义。

See Also

PlayM4_Play PlayM4_Stop


PlayM4_GetFileHeadLength

获取文件头长度。

DWORD PlayM4_GetFileHeadLength(
);

Parameters

无

Return Values

返回用于交互的媒体文件头或媒体信息头的大小，得到当前版本播放器能播放的文件的文件头长度。 主要应用在流播放器的 STREAME_FILE模式下。以便读出文件头作为PlayM4_OpenStream()的输入参数。

获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_SetStreamOpenMode PlayM4_GetStreamOpenMode

PlayM4_OpenStream PlayM4_CloseStream

PlayM4_Play PlayM4_Stop


PlayM4_GetFileTime

获取文件总时间。

DWORD PlayM4_GetFileTime(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

四舍五入后的文件总时间长度，单位：秒，若失败则返回0xffffffff。获取错误码调用PlayM4_GetLastError。

Remarks

不支持对正在写入的文件进行时间的读取。在未调用PlayM4_Play接口时调用此接口则接口返回值无实际参考意义。

See Also

PlayM4_OpenFile PlayM4_CloseFile

PlayM4_Play PlayM4_Stop

PlayM4_GetFileTotalFrames


PlayM4_GetFileTotalFrames

获取文件总帧数。

DWORD PlayM4_GetFileTotalFrames(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回文件总帧数；失败返回0xffffffff，获取错误码调用PlayM4_GetLastError。

Remarks

不支持对正在写入的文件进行帧数的读取。 在未调用PlayM4_Play接口时调用此接口则接口返回值无实际参考意义。

See Also

PlayM4_Play PlayM4_Stop

PlayM4_GetFileTime


PlayM4_GetPictureSize

获取原始图像大小。

BOOL PlayM4_GetPictureSize(
  LONG     nPort,
  LONG    *pWidth,
  LONG    *pHeight
);

Parameters

nPort
[in] 播放通道号
pWidth
[out] 原始图像的宽度
pHeight
[out] 原始图像的高度

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

获得码流中原始图像的大小，根据此大小来设置显示窗口的区域，可以不使用显卡做缩放工作，对于那些不支持硬件缩放的显卡来说非常有用。该函数获取的是刚刚播放那帧数据的长宽，因此只有当播放开始后才能获取准确的值。

建议配合PlayM4_SetEncTypeChangeCallBack/PlayM4_SetEncChangeMsg使用。且在未调用PlayM4_Play接口时调用此接口，接口返回值无实际参考意义。

开启硬解码后调用该接口，返回的是编码层宽高，比如图像分辨率为1080P时该接口返回的宽高为1920*1088。

See Also

PlayM4_OpenFile PlayM4_CloseFile

PlayM4_Play PlayM4_Stop


PlayM4_GetPlayedFrames

获取已解码的视频帧数。

DWORD PlayM4_GetPlayedFrames(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回已经解码的视频帧数；失败返回0xffffffff。获取错误码调用PlayM4_GetLastError。

Remarks

在未调用PlayM4_Play接口时调用此接口则接口返回值无实际参考意义。

See Also

PlayM4_OpenFile PlayM4_CloseFile

PlayM4_Play PlayM4_Stop


PlayM4_GetPlayedTime

获取已播放时间。

DWORD PlayM4_GetPlayedTime(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回文件当前播放时间，单位秒；失败返回0xffffffff。获取错误码调用PlayM4_GetLastError。

Remarks

在未调用PlayM4_Play接口时调用此接口则接口返回值无实际参考意义。

See Also

PlayM4_OpenFile PlayM4_CloseFile

PlayM4_Play PlayM4_Stop


PlayM4_GetSpecialData

获取当前显示帧的全局时间。

DWORD PlayM4_GetSpecialData(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

失败返回-1，成功则返回一个全局时间的压缩值，精确到秒

#define GET_YEAR(_time_) (((_time_)>>26) + 2000)

#define GET_MONTH(_time_) (((_time_)>>22) & 15)

#define GET_DAY(_time_) (((_time_)>>17) & 31)

#define GET_HOUR(_time_) (((_time_)>>12) & 31)

#define GET_MINUTE(_time_) (((_time_)>>6) & 63)

#define GET_SECOND(_time_) (((_time_)>>0) & 63)

获取错误码调用PlayM4_GetLastError。

Remarks

有正常图像显示后才能调用此接口。

See Also

PlayM4_GetPort PlayM4_FreePort

PlayM4_OpenFile PlayM4_CloseFile

PlayM4_Play PlayM4_Stop


PlayM4_GetSystemTime

获取当前播放帧的全局时间。

BOOL PlayM4_GetSystemTime(
  LONG                nPort,
 PLAYM4_SYSTEM_TIME  *pstSystemTime
);

Parameters

nPort
[in] 播放通道号
pstSystemTime
[out] 全局时间

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

6.3版本开始有此接口，获取当前播放帧对应的全局时间。

See Also

PlayM4_SetFileRefCallBack

PlayM4_ReversePlay


PlayM4_GetStreamInfo

获取码流封装和视频编码类型信息。

int PlayM4_GetStreamInfo(
  LONG    nPort,
  int    *pSysFormat,
  int    *pCodeType
);

Parameters

lPort
[in] 播放通道号
pSysFormat
[out] 封装类型，如下表所示：

pSysFormat类型宏定义 | 宏定义值 | 类型含义
SYSTEM_NULL | 0x0 | 没有系统层，纯音频流或视频流
SYSTEM_HIK | 0x1 | 海康文件层
SYSTEM_MPEG2_PS | 0x2 | PS封装
SYSTEM_MPEG2_TS | 0x3 | TS封装
SYSTEM_RTP | 0x4 | RTP封装
SYSTEM_RTMP | 0xD | rtmp封装
SYSTEM_RTPHIK | 0x401 | rtp封装hik
SYSTEM_RTP_JT | 0x104 | rtpjt封装
pCodeType
[out] 视频编码类型，如下表所示：

pSysFormat类型宏定义 | 宏定义值 | 类型含义
VIDEO_NULL | 0x0000 | 无视频编码
VIDEO_H264 | 0x0001 | 海康H.264和部分较早标注H264都可以用这个定义
VIDEO_MPEG2 | 0x0002 | 标准MPEG2
VIDEO_MPEG4 | 0x0003 | 标准MPEG4
VIDEO_MJPEG | 0x0004 | Motion Jpeg
VIDEO_AVC264 | 0x0100 | 标准H264/AVC
VIDEO_AVC265 | 0x0005 | 标准H265/AVC
VIDEO_SVAC | 0x0006 | SVAC编码

Return Values

成功返回TRUE；失败返回FALSE，获取错误码调用PlayM4_GetLastError。

Remarks

码流正常解码显示之后调用。

只获取单一的封装或者视频编码类型信息。

两个指针参数都不为空


PlayM4_SetIdemuxPara

设置解析参数。

BOOL PlayM4_SetIdemuxPara(
  LONG     nPort,
  int       nChunkSize
);

Parameters

nPort
[in] 播放通道号
nChunkSize
[in] 块大小值

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 数据正常送入Input之前，设置解析参数才可以生效，否则码流数据已经送入并进行解析，设置的值不生效，如果RTMP码流没有正常设置chunksize则不能正常解析。
  • 该配置参数只针对RTMP封装类型数据。

See Also

PlayM4_OpenStream PlayM4_CloseStream
PlayM4_Play PlayM4_Stop
PlayM4_InputData
PlayM4_SetDecodeEngine


PlayM4_GetPlayPos

获取文件当前播放位置（百分比）。

float PlayM4_GetPlayPos(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

范围0-100%，获取错误码调用PlayM4_GetLastError。

Remarks

获得文件播放指针的相对位置在PlayM4_Play之后调用才有效。

See Also

PlayM4_SetPlayPos


PlayM4_SetPlayPos

设置文件当前播放位置（百分比）。

BOOL PlayM4_SetPlayPos(
  LONG     nPort,
  float    fRelativePos
);

Parameters

nPort
[in] 播放通道号
fRelativePos
[in] 播放位置，范围：0~100%

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 设置文件播放指针的相对位置（百分比），在PlayM4_Play之后调用有效。
  • 在建立文件索引（PlayM4_SetFileRefCallBack）的前提下，为精确定位，否则即为粗略定位。3GP封装文件只支持创建索引后定位；smart264文件，不创建索引时所需定位时间很长，建议创建索引之后再进行定位。

See Also

PlayM4_SetPlayedTimeEx PlayM4_GetPlayedTimeEx

PlayM4_SetCurrentFrameNum PlayM4_GetCurrentFrameNum


PlayM4_SetPlayedTimeEx

设置文件当前播放时间（毫秒）。

BOOL PlayM4_SetPlayedTimeEx(
  LONG     nPort,
  DWORD    nTime
);

Parameters

nPort
[in] 播放通道号
nTime
[in] 设置文件播放到指定时间，单位毫秒

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 该接口需要在PlayM4_Play之后调用，且在文件播放或者文件流播放模式下有效，时间戳定位存在正负1帧的误差。
  • 文件播放模式：PlayM4_OpenFile打开文件播放。精确定位需要建立文件索引，否则为粗略定位。接口中nTime参数表示相对文件的第一个I帧的偏移时间，单位为毫秒。3GP封装文件只支持创建索引后定位；smart264文件，不创建索引时所需定位时间很长，建议创建索引之后再进行定位。
  • 文件流播放模式：PlayM4_OpenStream并且PlayM4_SetStreamOpenMode设置播放模式为STREAME_FILE。此时，定位的内部实现机制：先调用PlayM4_ResetBuffer清空播放库缓冲中的数据，然后按照nTime设定播放起始帧位置，即调用此接口送入第一个I帧的相对时间位置，单位为毫秒。正放和倒放都适用此接口，倒放播放时，设置播放起始帧位置，nTime是指相对于送入的第一个GOP起始I帧的相对时标。不同的nTime值代表不同的含义，如下表所示。
nTime取值 | 含义
0 | 从第一个GOP的I帧作为起始帧
40（帧率25为例,1秒为1000毫秒，其中时间间隔为1000 / 25 = 40毫秒） | I帧后第一帧作为播放起始帧
-1 | 超过该GOP的时间，则定位到该GOP的最后一帧

See Also

PlayM4_GetPlayedTimeEx


PlayM4_GetPlayedTimeEx

获取文件当前播放时间（毫秒）。

DWORD PlayM4_GetPlayedTimeEx(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

文件当前播放的时间，单位毫秒,在PlayM4_Play之后调用才有效。获取错误码调用PlayM4_GetLastError。

Remarks

该接口需要在PlayM4_Play之后调用，且在文件播放或者文件流播放模式下有效，时间戳定位存在正负1帧的误差。

See Also

PlayM4_SetPlayedTimeEx


PlayM4_SetCurrentFrameNum

设置文件当前播放帧号。

BOOL PlayM4_SetCurrentFrameNum(
  LONG     nPort,
  DWORD    nFrameNum
);

Parameters

nPort
[in] 播放通道号
nFrameNum
[in] 帧号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 设置当前播放播放位置到指定帧号，根据帧号来定位播放位置，在PlayM4_Play之后调用才有效。
  • 在建立文件索引（PlayM4_SetFileRefCallBack）的前提下，为精确定位，否则即为粗略定位。3GP封装文件只支持创建索引后定位；smart264文件，不创建索引时所需定位时间很长，建议创建索引之后再进行定位。

See Also

PlayM4_GetCurrentFrameNum


PlayM4_GetCurrentFrameNum

获取文件当前播放帧号。

DWORD PlayM4_GetCurrentFrameNum(
  LONG     nPort
);

Parameters

nPort
[in] 播放库通道号

Return Values

当前播放的帧序号，获取错误码调用PlayM4_GetLastError。

Remarks

得到当前播放的帧序号。有在PlayM4_Play之后调用才有效。

See Also

PlayM4_SetCurrentFrameNum


PlayM4_SetGlobalBaseTime

设置解析输出的全局时间基准值。

BOOL PlayM4_SetGlobalBaseTime(
  LONG     nPort,
 PLAYM4_SYSTEM_TIME  stGlobalBaseTime
);

Parameters

nPort
[in] 播放通道号
stGlobalBaseTime
[in] 全局时间基准值

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

GetPort之后即可调用该接口。

只针对码流自身没有打全局时间的情况，否则设置的全局时间基准值不生效。

全局时间基准值参数，其中年的范围为[2000, 3000]。并且时间不得早于当前电脑系统时间

See Also

PlayM4_GetDisplayType


PlayM4_SetDecCBStream

设置解码回调流类型。

BOOL PlayM4_SetDecCBStream(
  LONG     nPort,
  DWORD    nStream
);

Parameters

nPort
[in] 播放通道号
nStream
[in] 取值如下:
取值 | 含义
1 | 视频流;
2 | 音频流;
3 | 复合流;

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

建议在解码回调函数前使用，调用这个接口可以设定解码回调函数中的解码数据类型，比如设定为视频则只能获取解码后的YV12视频数据；若设定为音频流则只能获取解码后的PCM数据；若设定为复合流则可获取解码后的音视频数据，如不调用则默认为复合流类型。

See Also

PlayM4_SetDecCallBack PlayM4_SetDecCallBackMend

PlayM4_SetDecCallBackExMend PlayM4_SetDecodeFrameType


PlayM4_SetDecodeFrameType

设置视频帧解码类型。

BOOL PlayM4_SetDecodeFrameType(
  LONG     nPort,
  DWORD    nFrameType
);

Parameters

nPort
[in] 播放通道号
nFrameType
[in] 解码帧类型说明，详见“Remarks”说明

Remarks

nFrameType解码帧类型说明，如下表所示：

nFrameType宏定义 | nFrameType含义 | 宏定义值
DECODE_NORMAIL | 正常解码 | 0
DECODE_KEY_FRAME | 只解关键帧 | 1
DECODE_NONE | 不解视频帧 | 2
DECODE_SVC_HALF | 解码svc码流1/2 | 3
DECODE_SVC_QUARTER | 解码svc码流1/4 | 4
DECODE_SVC_EIGHTH | 解码svc码流1/8 | 5
DECODE_ALL_FRAME | 全解，分辨率大于等于1080P多倍速时不自动抽帧 | 6

设置为“不解视频帧”（DECODE_NONE）模式后将不支持定位、单帧前进、单帧后退功能。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_SetDecCBStream PlayM4_SetAudioCallBack

PlayM4_SetDecCallBack PlayM4_SetDecCallBackMend

PlayM4_SetDecCallBackExMend


PlayM4_SetDecOrDisplayCallbackType

选择解码或显示回调中是回调绝对时间戳（帧号）还是相对时间戳（帧号）。

BOOL  PlayM4_SetDecOrDisplayCallbackType(
  int     nPort,
  int     nModule,
  int     nType
);

Parameters

nPort
[in] 播放通道号
nModule
[in] nModule 表示回调模块选择，0 表示同时设置解码回调和显示回调 1：表示解码回调，2：表示显示回调；
nType
[in] nType 表示回调绝对时间戳（帧号）还是相对时间戳（帧号）的类型设置，0：表示回调相对时间戳和相对帧号 1: 表示回调绝对时间戳和绝对帧号;

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

1. 默认解码或者显示回调给出去的时间戳或者帧号为相对值；显示回调是没有帧号回调的，所以显示回调下 0：表示回调相对时间戳 1: 表示回调绝对时间戳。

2. 音频无绝对时间戳回调，设置实际不起效。

See Also

PlayM4_GetPort


PlayM4_SetDecCallBackMend

解码回调（增加用户传递参数）。

BOOL PlayM4_SetDecCallBackMend(
  long       nPort,
  DecCBFun   fDecCBFun,
  long       nUser
);

Parameters

nPort
[in] 播放通道号
fDecCBFun
[in] 解码回调函数，若不需要回调函数则置为NULL,否则不能为NULL

Callback Function

typedef void(CALLBACK *DecCBFun)(
  long        nPort,
  char        *pBuf,
  long        nSize,
 FRAME_INFO  *pFrameInfo,
  long        nUser,
  long        nReserved2
);

Callback Function Parameters

nPort
[out] 播放器通道号
pBuf
[out] 解码后的音视频数据指针
nSize
[out] 解码后的音视频数据pBuf的长度
pFrameInfo
[out] 图像和声音信息结构体指针
nUser
[out] 用户数据
nReserved2
[out] 保留参数
nUser
[in] 用户数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置回调函数，替换播放器中的显示部分，由用户自己控制显示，该函数在PlayM4_Play之前调用，在PlayM4_Stop时自动失效，下次调用PlayM4_Play之前需要重新设置。

注意解码部分不控制速度，只要用户从回调函数中返回，解码器就会解码下一部分数据。

这个功能的使用需要用户对视频显示和声音播放有足够的了解，否则请慎重使用，有关知识请参阅directx开发包。

解码回调函数PlayM4_SetDecCallBack区别在于增加了用户传递参数，当前解码的视频数据格式为YV12，音频解码格式为PCM。

调用此回调函数后，则视频图像无显示。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

视频帧解码回调和显示回调出去的YUV数据外面只能读操作进行拷贝，然后将回调返回，不能直接进行写操作来改变给出去YUV指针里面的yuv数据。

解码回调和显示回调出去后；用户需要及时返回；如果等到上层所有操作都结束再返回，可能会影响到播放库主线程执行。

See Also

PlayM4_SetDecCallBack PlayM4_SetDisplayCallBack

PlayM4_SetDecCBStream PlayM4_SetDecodeFrameType

PlayM4_SetDecCallBackExMend


PlayM4_SetDecCallBackExMend

解码回调（带目标数据和数据大小和用户指针）。

BOOL PlayM4_SetDecCallBackExMend(
  LONG      nPort,
  DecCBFun  fDecCBFun,
  char      *pDest,
  long      nDestSize,
  long      nUser
);

Parameters

nPort
[in] 播放通道号
DecCBFun
[in] 解码回调函数，若不需要回调函数则置为NULL，否则不能为NULL

Callback Function

typedef void(CALLBACK *DecCBFun)(
  long        nPort,
  char        *pBuf,
  long        nSize,
 FRAME_INFO   *pFrameInfo,
  long        nUser,
  long        nReserved2
);

Callback Function Parameters

nPort
[out] 播放器通道号
pBuf
[out] 解码后的音视频数据指针
nSize
[out] 解码后的音视频数据pBuf的长度
pFrameInfo
[out] 图像和声音信息结构体指针
nUser
[out] 用户数据
nReserved2
[out] 保留参数
pDest
[in] 目标数据，暂时设置为NULL
nDestSize
[in] 目标数据大小，暂时设置为0
nUser
[in] 用户指针

Return Values

TRUE表示成功，FALSE表示全部失败。获取错误码调用PlayM4_GetLastError。

Remarks

PlayM4_SetDecCallBackExMend与PlayM4_SetDecCallBackMend相比：

PlayM4_SetDecCallBackExMend会解码并显示，并将解码的数据以回调函数的方式给用户，但是PlayM4_SetDecCallBackMend仅仅将解码后的数据给用户，并不显示。

其中参数pDest和nDestSize没有具体的用处。可以置为NULL和0。

当前解码的视频数据格式为YV12，音频解码格式为PCM。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

视频帧解码回调和显示回调出去的YUV数据外面只能读操作进行拷贝，然后将回调返回，不能直接进行写操作来改变给出去YUV指针里面的yuv数据。

解码回调和显示回调出去后；用户需要及时返回；如果等到上层所有操作都结束再返回，可能会影响到播放库主线程执行。

See Also

PlayM4_SetDecCBStream PlayM4_SetDecodeFrameType

PlayM4_SetAudioCallBack PlayM4_SetDisplayCallBack


PlayM4_SetFileEndCallback

文件结束回调。

BOOL PlayM4_SetFileEndCallback(
  LONG             nPort,
  FileEndCallback  fFileEndCBFun,
  void             *pUser
);

Parameters

nPort
[in] 播放通道号
FileEndCallback
[in] 文件结束回调函数

Callback Function

typedef void(FileEndCallback *fFileEndCBFun)(
  long        nPort,
  void        *pUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
pUser
[out] 用户数据
pUser
[in] 用户数据

Return Values

TRUE表示成功，FALSE表示失败。获取错误码调用PlayM4_GetLastError。

Remarks

设置文件结束时要发送的消息；从2.4版本SDK起，当文件播放完时，解码线程将不会自动结束，需要用户做停止工作设置文件播放结束回调函数。

在PlayM4_OpenSteam/PlayM4_OpenFile之前调用才有效。

关于回调函数。因为vb不支持多线程，所以当回调函数是VB声明的函数时，在vc的线程中调用vb的函数，会有问题。

详见：Microsoft Knowledge Base Article - Q198607 “PRB: Access Violation in VB Run-Time Using AddressOf ”。

回调与消息不能同时使用。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

See Also

PlayM4_SetFileEndMsg


PlayM4_SetEncChangeMsg

播放库SDK编程指南

PlayM4_SetEncChangeMsg*

分辨改变通知消息。

BOOL PlayM4_SetEncChangeMsg(
  LONG    nPort,
  HWND    hWnd,
  UINT    nMsg
);

Parameters

nPort
[in] 播放通道号
hWnd
[in] hWnd 消息发送的窗口
nMsg
[in] 用户输入的消息；当解码分辨率发生改变时要发送此定义的消息。消息函数中的wParam参数值是返回nPort的值

Return Values

TRUE表示成功，FALSE表示失败。获取错误码调用PlayM4_GetLastError。

Remarks

设置解码时编码分辨率发生改变时要发送的消息。

回调与消息不能同时使用。

不再支持此接口。

See Also

PlayM4_SetFileEndCallback


PlayM4_SetEncTypeChangeCallBack

设置变分辨率回调函数。

BOOL PlayM4_SetEncTypeChangeCallBack(
  LONG            nPort,
  funEncChange    cbfunEncChange,
  long            nUser
);

Parameters

nPort
[in] 播放通道号
cbfunEncChange
[in] 变分辨率回调函数
nUser
[in] 用户数据

Callback Function

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

Callback Function Parameters

nPort
[out] 播放通道号
nUser
[out] 用户数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

消息和回调函数不能同时使用。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

See Also

PlayM4_Play PlayM4_Stop


PlayM4_ThrowBFrameNum

设置丢B帧个数。

BOOL  PlayM4_ThrowBFrameNum(
  LONG   nPort,
  DWORD  nNum
);

Parameters

nPort
[in] 播放通道号
nNum
[in] 不解码B帧的帧数。范围0~2

Return Values

TRUE表示成功，FALSE表示失败。获取错误码调用PlayM4_GetLastError。

Remarks

设置不解码B帧帧数；

不解码B帧，可以减小CPU利用率。

如在快速播放，和支持多路而CPU利用率太高的情况下可以考虑使用。

若编码类型中无B帧，则调用此接口无效。


PlayM4_CheckDiscontinuousFrameNum

检查帧号是否连续。

BOOL PlayM4_CheckDiscontinuousFrameNum(
  LONG    nPort,
  BOOL    bCheck
);

Parameters

nPort
[in] 播放通道号
bCheck
[in] 是否设置检查帧号连续性。若为TRUE：则检查帧号连续性。如果实际码流帧号不连续，会跳到下一个I帧；若为FALSE：不检查帧号连续性。如果数据能解码，则播放，不直接跳至下一个I帧。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

检查帧号是否连续，在码流不连续的情况下，设置检查后，会跳下一个关键帧解码。4.8 build0813 6.1.1.17版本开始支持。

这个接口现在可以在打开文件之前调用。

目前只有MJPEG、SVC、MPEG4和MPEG2以及海康编码支持这个功能，264和265不支持此功能。


PlayM4_SetCheckWatermarkCallBack

设置水印回调函数。

BOOL PlayM4_SetCheckWatermarkCallBack(
  LONG               nPort,
  funCheckWatermark  fCheckWatermarkFun,
  DWORD              nUser
);

Parameters

nPort
[in] 播放通道号
funCheckWatermark
[in] 检查水印回调函数
nUser
[out] 用户数据

Callback Function

typedef void(CALLBACK *funCheckWatermark)(
  long             nPort,
 WATERMARK_INFO    *pFrameInfo,
  DWORD            nUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
pWatermarkInfo
[out] 水印信息结构体指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

一般只有私有封装和PS封装层有水印，其他没有水印。编码只支持标准264水印。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

See Also

PlayM4_Play PlayM4_Stop


PlayM4_SetSecretKey

解码密钥。

BOOL PlayM4_SetSecretKey(
  LONG     nPort,
  LONG     lKeyType,
  char     *pSecretKey,
  LONG     lKeyLen
);

Parameters

nPort
[in] 播放通道号
lKeyType
[in] 密钥类型（取值为0不加密；取值为1表示AES 128解密，取值为2表示AES256解密）
pSecretKey
[in] 密钥串首地址
lKeyLen
[in] 密钥长度，单位为bit（32字节为256 bit）

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

如果在编码时设置了密钥，那么在解码之前需要调用该接口设置密钥才能正常解码。该接口在PlayM4_OpenStream/PlayM4_OpenFile之前调用才有效。检查参数lKeyType，现只支持AES机密方式，取值1， lKeyLen根据实际秘钥长度来输入该lKeyLen值大小，如果不按照实际长度传入参数，可能会导致解密失败。

See Also

PlayM4_OpenStream PlayM4_OpenFile

PlayM4_SetEncryptTypeCallBack


PlayM4_SetEncryptTypeCallBack

加密码流回调函数。

BOOL PlayM4_SetEncryptTypeCallBack(
  LONG                nPort,
  DWORD               nType,
  EncryptTypeCBFun    fEncryptTypeCBFun,
  long                nUser
);

Parameters

nPort
[in] 播放通道号
nType
[in] nType=0表示码流加密标记位发生变化就回调，nType=1表示码流有加密位发生回调
fEncryptTypeCBFun
[in] 加密码流回调函数
nUser
[in] 用户数据

Callback Function

typedef void(CALLBACK *EncryptTypeCBFun)(
  long            nPort,
 ENCRYPT_INFO    *pEncryptInfo,
  long            nUser,
  long            nReserved2
);

Callback Function Parameters

nPort
[out] 播放通道号
pEncryptInfo
[out] 加密数据信息
nUser
[out] 用户数据
nReserved2
[out] 保留数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

仅仅支持加密码流，通过回调函数将加密的码流数据回调给用户。若无加密信息的码流调用此接口无效果。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

See Also

PlayM4_SetSecretKey


PlayM4_GetTimeZoneInfo

获取码流中携带的时区偏移信息。

int PlayM4_GetTimeZoneInfo(
  LONG     nPort,
   int    *pTimeZone
);

Parameters

nPort
[in] 播放通道号
pTimeZone
[out] 时区偏移信息指针：最高位正负表示加减；后面31位表示时区偏移的分钟；（单位为分钟）

Return Values

若成功返回1,失败返回0。获取错误码调用PlayM4_GetLastError。

Remarks

当前只支持rtp和ps封装的获取时区偏移信息（hik私有）。

文件模式和流模式都支持这个接口。

See Also

PlayM4_OpenFile PlayM4_CloseFile

PlayM4_Play PlayM4_Stop

PlayM4_GetFileTotalFrames


PlayM4_SetDisplayRegion

设置或增加显示区域。

BOOL PlayM4_SetDisplayRegion(
  LONG      nPort,
  DWORD     nRegionNum,
  RECT     *pSrcRect,
  HWND      hDestWnd,
  BOOL      bEnable
);

Parameters

nPort
[in] 播放通道号
nRegionNum
[in] 显示区域序号，0~(MAX_DISPLAY_WND-1)，设定哪个窗口进行区域显示。如果nRegionNum为0，表示对主要显示窗口（PlayM4_Play中设置的窗口）进行设置，将忽略hDestWnd和bEnable的设置
pSrcRect
[in] 设置在要显示的原始图像上的区域，如：如果原始图像是352*288，那么pSrcRect可设置的范围只能在（0，0，352，288）之中。如果pSrcRect=NULL,将显示整个图像
hDestWnd
[in] 设置显示窗口。如果该区域的窗口已经设置过（打开过），那么该参数被忽略
bEnable
[in] 打开（设置）或关闭显示区域

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

该接口在正常播放状态下调用，设置或增加显示区域，可以做局部放大显示。

不论设置主窗口或增加子窗口，电子放大区域范围（pSrcRect）取值必须大于0，nRight和nBottom的取值必须大于16。若设置的窗口无画面，则设置异常值后显示原始画面大小，不做放大处理；若设置的画窗口已有画面，则设置异常值后保持当前画面不变。

视频放大或缩小时，私有数据的图片叠加和热成像智能信息不会随着放大或缩小，还是保持原来的状态。

7.3.0版本后，暂停、单帧时电子放大窗口不自动刷新，需要应用调用PlayM4_RefreshPlayEx手动刷新。

对2400w码流下的电子放大，放大区域和目的句柄的设置应该一一对应；如果设置电子放大错误参数是报成功，实际展现是没有画面.

如果play之前调用电子放大接口，则接口对rect参数有效性无法做判断；因此该接口建议在正常播放状态下使用，未调用play之前设置的rect参数不做异常参数判断。

示例代码

示例：接口调用示例

int PlayM4_SetDisplayRegion(int nPort,unsigned int nRegionNum, RECT *pSrcRect, HWND hDestWnd, int bEnable)；
RECT strSrcRect = {0};
strSrcRect.left = 0;
strSrcRect.top  = 0;
strSrcRect.right = 200;
strSrcRect.bottom = 150;
PlayM4_SetDisplayRegion(nPort，1，&strSrcRect, hDestWnd,1);
参数说明：
参数1： nPort表示已经获取的播放库内部分配的端口号 ；
参数2： 设定需要显示区域序号为1；
参数3： &strSrcRect表示设置需要显示的区域（相对原始图像）；
参数4： hDestWnd表示显示窗口句柄；
参数5： 1表示打开显示区域；


PlayM4_SetDisplayRegionOnWnd

设置多窗口分割。

BOOL PlayM4_SetDisplayRegionOnWnd(
  LONG      nPort,
  DWORD     nRegionNum,
  RECT     *pSrcRect,
  BOOL      bEnable
);

Parameters

nPort
[in] 播放通道号
nRegionNum
[in] 显示区域序号，0~(MAX_DISPLAY_WND-1)。如果nRegionNum为0，表示对主要显示窗口（PlayM4_Play中设置的窗口）进行设置，将忽略hDestWnd和bEnable的设置
pSrcRect
[in] 设置在要显示的原始图像上的区域，如：如果原始图像是352*288，那么pSrcRect可设置的范围只能在（0，0，352，288）之中。如果pSrcRect=NULL,将显示整个图像
bEnable
[in] 打开（设置）或关闭显示区域

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

该接口在正常播放状态下调用，设置或增加显示区域，可以做局部放大显示。

不论设置主窗口或增加子窗口，电子放大区域范围（pSrcRect）取值必须大于0，nRight和nBottom的取值必须大于16。若设置的窗口无画面，则设置异常值后显示原始画面大小，不做放大处理；若设置的画窗口已有画面，则设置异常值后保持当前画面不变。

调用此接口时，可能出现智能信息和私有信息显示异常的现象。

7.3.0版本后，暂停、单帧时电子放大窗口不自动刷新，需要应用调用PlayM4_RefreshPlayEx手动刷新。

对2400w码流下的电子放大，放大区域和目的句柄的设置应该一一对应；如果设置电子放大错误参数是报成功，实际展现是没有画面.

如果play之前调用电子放大接口，则接口对rect参数有效性无法做判断；因此该接口建议在正常播放状态下使用，未调用play之前设置的rect参数不做异常参数判断。

See Also

PlayM4_SetDisplayRegion


PlayM4_RefreshPlay

刷新显示。

BOOL PlayM4_RefreshPlay(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

刷新显示。当用户暂停时如果刷新了窗口，则窗口中的图像因为刷新而消失，此时调用这个接口可以重新把图像显示出来；只有在暂停和单帧播放时才会执行，其它情况会直接返回。

See Also

PlayM4_RefreshPlayEx


PlayM4_RefreshPlayEx

刷新显示（多显示区域）。

BOOL PlayM4_RefreshPlayEx(
  LONG     nPort,
  DWORD    nRegionNum
);

Parameters

nPort
[in] 播放通道号
nRegionNum
[in] 显示区域序号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

刷新显示，同PlayM4_RefreshPlay。为支持PlayM4_SetDisplayRegion而增加一个参数。

See Also

PlayM4_RefreshPlay


PlayM4_IdleAutoRefresh

空闲自动刷新。

BOOL PlayM4_IdleAutoRefresh(
  int  nPort,
  int  nEnable,
  int  nWaitTime
);

Parameters

nPort
[in] 播放通道号
nEnable
[in] 开启标记，0-取消；非0-开启。取值为int型非0，包含正数和负数。
nWaitTime
[in] 等待时间：0~1000ms。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 调用该接口主要用户低帧率场景，在GetPort之后即可调用，设定刷新标记和时间，CPU在空闲时候根据设置的时间刷新画面。
  • 设置时间太短，则会导致刷新太频繁，因此会增加CPU的消耗，不建议使用。
  • 此接口不刷新电子放大画面的刷新。

See Also

PlayM4_GetPort PlayM4_OpenFile

PlayM4_OpenStream PlayM4_Play


PlayM4_SetDisplayType

设置显示模式。

BOOL PlayM4_SetDisplayType(
  LONG     nPort,
  LONG     nType
);

Parameters

nPort
[in] 播放通道号
nType
[in] 几种模式，按位表示，每一位表示一种模式（详见“Remarks”说明），取值：0- 关闭，1- 开启
例如：nType = 5 (即 0x00000001 | 0x00000004)，表示DISPLAY_NORMAL和DISPLAY_YC_SCALE两种模式同时设置

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

每一位表示一种显示模式，如下表所示：

nType宏定义 | nType含义 | 宏定义值
DISPLAY_NORMAL | 正常分辨率数据送显卡显示 | 0x00000001
DISPLAY_QUARTER | 1/4分辨率数据送显卡显示 | 0x00000002
DISPLAY_YC_SCALE | YC伸张 | 0x00000004
DISPLAY_NOTEARING | 无显示撕裂效果 | 0x00000008
  • 设置显示的模式，在小画面显示时，采用DISPLAY_QUARTER 可以减小显卡工作量，从而支持更多路显示，但画面显示质量有下降。在正常和大画面显示时应该使用DISPLAY_NORMAL。
  • 当发现画面显示存在撕裂现象时，可以设置DISPLAY_NOTEARING缓解撕裂现象。
  • 正常分辨率显示(DISPLAY_NORMAL)和1/4显示分辨率(DISPLAY_QUARTER)不能同时设置，其他可以组合使用。

See Also

PlayM4_GetDisplayType


PlayM4_GetDisplayType

获取显示模式。

LONG PlayM4_GetDisplayType(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

显示模式，如DISPLAY_NORMAL 或 DISPLAY_QUARTER。获取错误码调用PlayM4_GetLastError。

以下是该接口可能返回的值

返回值 | 宏定义 | 返回值
DISPLAY_NORMAL | 0x00000001 | 正常分辨率数据送显卡显示。
DISPLAY_QUARTER | 0x00000002 | 1/4分辨率数据送显卡显示。
DISPLAY_YC_SCALE | 0x00000004 | YC伸张。
DISPLAY_NOTEARING | 0x00000008 | 无显示撕裂效果。

See Also

PlayM4_SetDisplayType


PlayM4_GetSourceBufferRemain

获取源缓冲区剩余数据大小。

DWORD PlayM4_GetSourceBufferRemain(
  LONG    nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

缓冲区剩余有效帧数据大小，单位：byte，若剩余为无效数据则返回0，获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_SetSourceBufCallBack PlayM4_ResetSourceBuffer


PlayM4_SetSourceBufCallBack

设置源缓冲区阈值及回调指针。

BOOL PlayM4_SetSourceBufCallBack(
  LONG               nPort,
  DWORD              nThreShold,
  SourceBufCallBack  fSourceBufCallBackFun,
  DWORD              dwUser,
  void               *pReserved
);

Parameters

nPort
[in] 播放通道号
nThreShold
[in] 阀值
SourceBufCallBack
[in] 回调函数指针
dwUser
[in] 用户数据
pResvered
[in] 保留数据

Callback Function

typedef void(CALLBACK *SourceBufCallBack)(
  long       nPort,
  DWORD      nBufSize,
  DWORD      dwUser,
  void       *pResvered
);

Callback Function Parameters

nPort
[out] 播放器通道号
nBufSize
[out] 缓冲区中剩余数据
dwUser
[out] 用户数据
pResvered
[out] 保留数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 设置源缓冲区阀值和剩余数据小于等于阀值时的回调函数指针，只有缓存小于设定阈值就会触发回调。一次触发后需要调用PlayM4_ResetSourceBufFlag接口重置参数，使得再次有效。
  • 回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。
  • nBufSize为缓冲区所有剩余数据的大小，不检查数据有效性。

See Also

PlayM4_ResetSourceBuffer PlayM4_GetSourceBufferRemain


PlayM4_ResetSourceBuffer

清空所有缓冲区的剩余数据。

BOOL PlayM4_ResetSourceBuffer(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

调用该接口后将清空库内部所有数据缓冲。

See Also

PlayM4_GetSourceBufferRemain PlayM4_SetSourceBufCallBack


PlayM4_SetDisplayBuf

设置播放缓冲区最大缓冲帧数。

BOOL PlayM4_SetDisplayBuf(
  LONG     nPort,
  DWORD    nNum
);

Parameters

nPort
[in] 播放通道号
nNum
[in] 播放缓冲区最大缓冲帧数，取值：1、6（默认，自适应播放模式）、15

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 通过该接口可以设置播放缓冲区（即解码后的图像缓冲区）大小，这个缓冲区直接影响播放的流畅性和延时性，在一定范围内缓冲越大越流畅，同时延时越大。nNum为6表示自适应模式，还支持设置1、45帧的缓冲区大小；其他值无效，默认为自适应模式。
  • 一帧352*288图像的所需内存最小值是 352*288*3/2大约150K 。最大值是352*288*4大约405K。
  • 接口在PlayM4_OpenStream之后、PlayM4_Play之前调用有效。
  • 此接口7.3.3及其以上版本可以设置45个节点，为了应对4K码流，I帧传输时间波动大的问题，以及深眸设备的帧时间戳与视频时间戳差值较大情况下需要设置15个节点，防止无法匹配；使用此接口前请先确认下以免内存使用过大。

See Also

PlayM4_GetDisplayBuf


PlayM4_GetDisplayBuf

获取播放缓冲区最大缓冲帧数

DWORD PlayM4_GetDisplayBuf(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

播放缓冲区最大缓冲帧数，获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_SetDisplayBuf


PlayM4_ResetBuffer

清空指定缓冲区的剩余数据。

BOOL PlayM4_ResetBuffer(
  LONG     nPort,
  DWORD    nBufType
);

Parameters

nPort
[in] 播放通道号
nBufType
[in] 缓冲区类型，详见“Remarks”说明

Remarks

缓冲区类型，如下表所示：

缓冲区宏定义 | 缓冲区含义 | 宏定义值
BUF_VIDEO_SRC | 视频数据源缓冲区，调用后清空库内部所有数据缓冲 | 1
BUF_AUDIO_SRC | 音频数据源缓冲区，当前版本不支持 | 2
BUF_VIDEO_RENDER | 解码后视频缓冲区总节点个数，以帧为单位 | 3
BUF_AUDIO_RENDER | 解码后音频缓冲区总节点个数，以帧为单位 | 4
BUF_VIDEO_DECODED | 视频解码缓冲区节点个数，以帧为单位 | 5
BUF_AUDIO_DECODED | 音频解码缓冲区节点个数，以帧为单位 | 6
BUF_VIDEO_SRC_EX | 未挂起的视频节点个数（重置缓冲区需要设定这个参数），以帧为单位 | 7

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_ResetSourceBufFlag PlayM4_GetBufferValue


PlayM4_ResetSourceBufFlag

播放库SDK编程指南

PlayM4_ResetSourceBufFlag*

重置回调标志为有效状态。

BOOL PlayM4_ResetSourceBufFlag(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

重置回调标志位为有效状态。

当前版本暂不支持此接口。

See Also

PlayM4_ResetBuffer PlayM4_GetBufferValue


PlayM4_GetBufferValue

获取指定缓冲区的大小。

DWORD PlayM4_GetBufferValue(
  LONG     nPort,
  DWORD    nBufType
);

Parameters

nPort
[in] 播放通道号
nBufType
[in] 缓冲区类型，详见“Remarks”说明

Remarks

缓冲区类型，如下表所示：

缓冲区宏定义 | 缓冲区含义 | 宏定义值
BUF_VIDEO_SRC | 视频数据源缓冲区，缓冲解码之前视频数据，只对流模式有效，单位byte | 1
BUF_AUDIO_SRC | 音频数据源缓冲区，缓冲解码之前音频数据，只对流模式且音视频数据分开送到情况下有效，单位byte。对于V7.2.x及以上版本播放库，音频数据源缓冲区与视频数据缓冲区复用，该类型与BUF_VIDEO_SRC类型效果相同 | 2
BUF_VIDEO_RENDER | 解码后视频缓冲区总节点个数，以帧为单位 | 3
BUF_AUDIO_RENDER | 解码后音频缓冲区总节点个数，以帧为单位 | 4
BUF_VIDEO_DECODED | 解码后视频缓冲区数据节点个数，以帧为单位 | 5
BUF_AUDIO_DECODED | 解码后音频缓冲区数据节点个数，以帧为单位 | 6

Return Values

根据参数不同，返回缓冲区值，源缓冲区返回byte,解码后缓冲区返回帧数。获取错误码调用PlayM4_GetLastError。

Remarks

获取播放器中的缓冲区大小（帧数或者byte）。这个接口可以帮助用户了解缓冲区中的数据，从而在网络延时方面有所估计。

See Also

PlayM4_ResetBuffer PlayM4_ResetSourceBufFlag


PlayM4_SetFileRefCallBack

设置建立索引回调。

BOOL PlayM4_SetFileRefCallBack(
  LONG             nPort,
  FileRefDoneCB    pFileRefDone,
  DWORD            nUser
);

Parameters

nPort
[in] 播放通道号
FileRefDoneCB
[in] 索引回调函数
nUser
[in] 用户指针

Callback Function

typedef void(CALLBACK *pFileRefDone)(
  DWORD    nPort,
  DWORD    nUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
nUser
[out] 用户数据

Remarks

建立文件索引回调。为了能在文件中准确快速的定位，在文件打开的时候生成文件索引。

如果是大文件，建立索引时间会相对时间长，主要是因为从硬盘读数据比较慢。

建立索引的过程是在后台完成，需要使用索引的函数要等待这个过程结束，而其他接口不会受到影响。

打开文件时是否建立文件的关键帧索引, 如果索引回调未触发, 表明录像文件异常。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_GetKeyFramePos PlayM4_GetNextKeyFramePos

PlayM4_GetRefValue PlayM4_SetRefValue


PlayM4_GetKeyFramePos

查找指定位置之前的关键帧位置。

BOOL PlayM4_GetKeyFramePos(
  LONG      nPort,
  DWORD     nValue,
  DWORD     nType,
 FRAME_POS *pFramePos
);

Parameters

nPort
[in] 播放通道号
nValue
[in] 当前位置，可以是时间或帧号，类型由nType指定，详见“Remarks”说明
nType
[in] nType类型，详见“Remarks”说明

Remarks

不同nType取值表示不同的含义，如下表所示：

nType取值 | nType取值含义
BY_FRAMENUM | 如果nType 是BY_FRAMENUM，则nValue表示帧号
BY_FRAMTIME | 如果nType 是BY_FRAMTIME，则nValue表示时间，单位毫秒
pFramePos
[out] 查找到的关键帧的文件位置、帧序号、时标信息

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

查找指定位置之前的关键帧位置。图像解码必须从关键帧开始，如果用户保存的文件不是从关键帧开始的，那么到下一个关键帧之前的数据会被忽略。如果用户要截取文件中的一段数据，则应该考虑从关键帧开始截取。结束位置则关系不大，最多丢失3帧数据。

See Also

PlayM4_GetNextKeyFramePos


PlayM4_GetNextKeyFramePos

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

BOOL PlayM4_GetNextKeyFramePos(
  LONG      nPort,
  DWORD     nValue,
  DWORD     nType,
 FRAME_POS *pFramePos
);

Parameters

nPort
[in] 播放通道号
nValue
[in] 当前位置，可以是时间或帧号，类型由nType指定，详见“Remarks”说明
nType
[in] nType类型，详见“Remarks”说明

Remarks

不同nType取值表示不同的含义，如下表所示：

nType取值 | nType取值含义
BY_FRAMENUM | 如果nType 是BY_FRAMENUM，则nValue表示帧号
BY_FRAMTIME | 如果nType 是BY_FRAMTIME，则nValue表示时间，单位毫秒
pFramePos
[out] 查找到的关键帧的文件位置、帧序号、时标信息

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

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

See Also

PlayM4_GetKeyFramePos


PlayM4_GetRefValue

获取文件索引。

BOOL PlayM4_GetRefValue(
  LONG     nPort,
  BYTE    *pBuffer,
  DWORD   *pSize
);

Parameters

nPort
[in] 播放通道号
*pBuffer
[out] 索引信息
pSize
[out] 输入pBuffer的大小，输出索引信息大小

Return Values

TRUE表示成功，FALSE表示失败。获取错误码调用NET_DVR_GetLastError。

Remarks

获取文件索引信息，以便下次打开同一个文件时直接使用这个信息。必须在索引建成后才能获得信息。

可以在第一次指定*pSize=0,pBuffer=NULL,从*pSize的返回值获得需要的缓冲区大小。然后分配足够的缓冲，再调用一次。

See Also

PlayM4_SetRefValue

PlayM4_GetNextKeyFramePos


PlayM4_SetRefValue

设置文件索引。

BOOL PlayM4_SetRefValue(
  LONG     nPort,
  BYTE    *pBuffer,
  DWORD    nSize
);

Parameters

nPort
[in] 播放通道号
pBuffer
[in] 索引信息
nSize
[in] 索引信息的长度

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置文件索引。如果已经有了文件索引信息，可以不再调用生成索引的回调函数PlayM4_SetFileRefCallBack，直接输入索引信息。

索引信息及其长度必须准确，在OpenFile之后，PlayM4_Play之前调用。

Smart码流获取索引部分信息可以用GetRefValueEx接口，实现smart码流的完全获取和设置索引；smart码流文件定位功能暂不支持。

See Also

PlayM4_GetRefValue

PlayM4_GetNextKeyFramePos


PlayM4_SetDisplayCallBack

显示回调。

BOOL PlayM4_SetDisplayCallBack(
  LONG            nPort,
  DisplayCBFun    fDisplayCBFun
);

Parameters

nPort
[in] 播放通道号
fDisplayCBFun
[in] 显示回调函数，若不需要回调函数则可以为NULL，否则不能置为NULL

Callback Function

typedef void(CALLBACK *DisplayCBFun)(
  long    nPort,
  char    *pBuf,
  long    nSize,
  long    nWidth,
  long    nHeight,
  long    nStamp,
  long    nType,
  long    nReceved
);

Callback Function Parameters

nPort
[out] 播放器通道号
pBuf
[out] 返回图像数据的指针
nSize
[out] 返回图像数据大小
nWidth
[out] 画面宽，单位像素
nHeigh
[out] 画面高
nStamp
[out] 时标信息，单位毫秒
nType
[out] 数据类型，T_YV12，T_RGB32，T_UYVY，具体定义如下表所示：
nType数据类型宏定义 | 宏定义值 | nType数据类型含义
T_YV12 | 3 | 视频数据，yv12格式。排列顺序“Y0-Y1-……”，“V0-V1….”，“U0-U1-…..”。
T_UYVY | 1 | 视频数据，uyvy格式。“U0-Y0-V0-Y1-U2-Y2-V2-Y3….”，第一个像素位于图像左上角。
T_RGB32 | 7 | 视频数据。每个像素4个字节，排列方式与位图相似，“B-G-R-0 …”，第一个像素位于图像左下角。
T_AUDIO16 | 101 | 音频数据;采样率16khz，单声道，每个采样点16位表示。具体的音频数据参数以解码后的获取的为准。
nReceved
[out] 保留

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置显示回调函数；注意要尽快返回，如果要停止回调，可以把回调函数指针DisplayCBFun设为NULL。

一旦设置回调函数，则一直有效，直到程序退出。该函数可以在任何时候调用。

回调在时钟线程中触发, 不能出现耗时操作, 否则会打乱时钟脉冲, 影响显示。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

视频帧解码回调和显示回调出去的YUV数据外面只能读操作进行拷贝，然后将回调返回，不能直接进行写操作来改变给出去YUV指针里面的yuv数据。

解码回调和显示回调出去后；用户需要及时返回；如果等到上层所有操作都结束再返回，可能会影响到播放库主线程执行。

See Also

PlayM4_SetDisplayCallBackEx PlayM4_SetJpegQuality

PlayM4_ConvertToBmpFile PlayM4_ConvertToJpegFile

PlayM4_GetCropJPEG PlayM4_GetCropBMP


PlayM4_SetDisplayCallBackEx

显示回调（带用户指针）。

BOOL PlayM4_SetDisplayCallBackEx(
  LONG            nPort,
  DisplayCBFun    fDisplayCBFun,
  long            nUser
);

Parameters

nPort
[in] 播放通道号
fDisplayCBFun
[in] 抓图回调函数，若不需要回调函数则置为NULL，否则不能为NULL
nUser
[in] 用户指针

Callback Function

typedef void(CALLBACK *DisplayCBFun)(
 DISPLAY_INFO   *pstDisplayInfo,
);

Callback Function Parameters

pstDisplayInfo
[out] 当前显示信息结构体指针

Return Values

TRUE表示成功，FALSE表示失败。获取错误码调用PlayM4_GetLastError。

Remarks

当前获取到的图像数据类型为YV12格式。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

视频帧解码回调和显示回调出去的YUV数据外面只能读操作进行拷贝，然后将回调返回，不能直接进行写操作来改变给出去YUV指针里面的yuv数据。

解码回调和显示回调出去后；用户需要及时返回；如果等到上层所有操作都结束再返回，可能会影响到播放库主线程执行。

See Also

PlayM4_SetDisplayCallBack PlayM4_SetJpegQuality

PlayM4_ConvertToBmpFile PlayM4_ConvertToJpegFile

PlayM4_GetCropJPEG PlayM4_GetCropBMP


PlayM4_ConvertToBmpFile

图像数据转为BMP格式 。

BOOL PlayM4_ConvertToBmpFile(
  char     *pBuf,
  long      nSize,
  long      nWidth,
  long      nHeight,
  long      nType,
  char     *sFileName
);

Parameters

pBuf
[in] 抓图回调函数中图像缓冲区
nSize
[in] 抓图回调函数中图像的大小
nWidth
[in] 抓图回调函数中图像宽度
nHeight
[in] 抓图回调函数中图像高度
nType
[in] 抓图回调函数中图像类型
sFileName
[in] 要保存的文件名，最好以BMP作为文件扩展名

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

将解码后数据保存成BMP文件。送入的图像数据必须是YV12数据，可从解码回调或者显示回调中获取，此接口可在播放库回调函数中使用。

除YV12格式以外，其他数据类型暂不支持。

pbuf所指向的内容在函数里面不能被修改。

See Also

PlayM4_ConvertToJpegFile PlayM4_SetJpegQuality

PlayM4_SetDisplayCallBack PlayM4_SetDisplayCallBackEx

PlayM4_GetCropBMP PlayM4_GetCropJPEG

PlayM4_GetBMP PlayM4_GetJPEG


PlayM4_ConvertToJpegFile

图像数据转为JPEG 格式。

BOOL PlayM4_ConvertToJpegFile(
  char    *pBuf,
  long     nSize,
  long     nWidth,
  long     nHeight,
  long     nType,
  char    *sFileName
);

Parameters

pBuf
[in] 抓图回调函数中图像缓冲区
nSize
[in] 抓图回调函数中图像的大小
nWidth
[in] 抓图回调函数中图像宽度
nHeight
[in] 抓图回调函数中图像高度
nType
[in] 抓图回调函数中图像类型，（当前的播放库获取的类型是yv12）
sFileName
[in] 要保存的文件名，最好以JPG作为文件扩展名

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

将解码后数据以默认编码质量保存成JPEG文件, 该函数可在回调函数中使用, 用法参见PlayM4_ConvertToBmpFile。

pbuf所指向的内容在函数里面不能被修改。

See Also

PlayM4_ConvertToBmpFile PlayM4_SetJpegQuality

PlayM4_SetDisplayCallBack PlayM4_SetDisplayCallBackEx

PlayM4_GetCropBMP PlayM4_GetCropJPEG

PlayM4_GetBMP PlayM4_GetJPEG


PlayM4_GetBMP

直接抓取BMP图像。

BOOL PlayM4_GetBMP(
  LONG    nPort,
  PBYTE   pBitmap,
  DWORD   nBufSize,
  DWORD  *pBmpSize
);

Parameters

nPort
[in] 播放通道号
pBitmap
[in] 存放BMP图像数据地址，由用户分配，不得小于bmp图像大小，即sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + w * h * 4， 其中w和h分别为图像宽高
nBufSize
[in] 申请的缓冲区大小
pBmpSize
[out] 获取到的实际bmp图像大小

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

获取的数据为一帧bmp数据，写成文件即可用图片浏览工具查看。

pbuf所指向的内容在函数里面不能被修改。

704*240和704*288的2cif分辨率抓图时，图片缓存需要申请至少w*h*9（4cif大小图片）。这两种分辨率bmp抓图比较特殊；其他分辨率不用处理；

See Also

PlayM4_GetJPEG PlayM4_ConvertToJpegFile

PlayM4_ConvertToBmpFile


PlayM4_GetJPEG

直接抓取JPEG图像。

BOOL PlayM4_GetJPEG(
  LONG     nPort,
  PBYTE    pJpeg,
  DWORD    nBufSize,
  DWORD   *pJpegSize
);

Parameters

nPort
[in] 播放通道号
pJpeg
[in] 存放JEPG图像数据地址，由用户分配，不得小于JPEG图像大小，建议大小w * h * 3/2， 其中w和h分别为图像宽高
nBufSize
[in] 申请的缓冲区大小
pJpegSize
[out] 获取到的实际JPEG图像数据大小

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

获取的数据为一帧JPEG数据，写成文件即可用图片浏览工具查看。

pbuf所指向的内容在函数里面不能被修改。

See Also

PlayM4_ConvertToBmpFile PlayM4_ConvertToJpegFile

PlayM4_GetBMP


PlayM4_SetJpegQuality

设置JPEG图像质量。

BOOL PlayM4_SetJpegQuality(
  LONG   nQuality
);

Parameters

nQuality
[in] 图像质量参数，范围0~100

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置抓取的JPEG图像质量, 设置范围0~100, 建议使用75~90, 若不调用该函数, 则采用默认图像质量, 目前默认为80。

需要在抓图进行前调用，建议在PlayM4_OpenFile之前使用。

有效值范围（0~100）外的都取默认值80，且不报错。

See Also

PlayM4_ConvertToJpegFile PlayM4_GetJPEG

PlayM4_GetCropJPEG


PlayM4_GetCropBMP

抓取选择区域图片为BMP格式。

BOOL PlayM4_GetCropBMP(
  LONG           nPort
 CROP_PIC_INFO  *pstPicInfo
);

Parameters

nPort
[in] 播放通道号
pstPicInfo
[in] 选择区域参数结构体指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

抓取出来的图片宽高是16的倍数，最小支持抓图分辨率为32 *32。写入奇数时会自动转变成偶数，[1,1,31,31]会转化成[0,0,32,32]。

See Also

PlayM4_GetCropJPEG


PlayM4_GetCropJPEG

抓取选择区域图片为JPEG格式。

BOOL PlayM4_GetCropJPEG(
  LONG          nPort,
 CROP_PIC_INFO *pstPicInfo
);

Parameters

nPort
[in] 播放通道号
pstPicInfo
[in] 选择区域参数结构体指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

抓取出来的图片宽高是16的倍数，最小支持抓图分辨率为32 *32。写入奇数时会自动转变成偶数，[1,1,31,31]会转化成[0,0,32,32]。

See Also

PlayM4_GetBMP PlayM4_GetJPEG

PlayM4_ConvertToBmpFile PlayM4_ConvertToJpegFile

PlayM4_GetCropBMP


PlayM4_GetD3DCapture

渲染库d3d11抓图。

int PlayM4_GetD3DCapture(
  int             nPort,
  unsigned int     nType,
  D3D_PIC_INFO   *pstPicInfo
);

Parameters

nPort
[in] 播放通道号
nType
[in]抓图格式。取值如下：0-jpeg格式,1-bmp格式。
pstPicInfo
[in] 抓图参数

Return Values

成功返回1；失败返回0。获取错误码调用PlayM4_GetLastError。

Remarks

此接口只支持d3d11渲染时有效，d3d9渲染无效,其中：nType取值设定抓图格式：0-jpeg,1-bmp。

抓取d3d11渲染的最后一帧画面，Play之后调用，且需要渲染出至少一帧画面后调用。

此接口需要支持D3D11，如果不支持D3D11，则无法实现这个功能。

See Also

PlayM4_GetPort PlayM4_FreePort

PlayM4_SetDecodeOrDisplayMode


PlayM4_SR_Capture

鹰眼抓图。

BOOL PlayM4_SR_Capture(
  LONG                 lPort,
  unsigned int         nType,
  char                *pFileName
);

Parameters

nPort
[in] 播放通道号
nType
[in] 抓图类型
pFileName
[in] 抓图文件名

Return Values

成功返回TRUE；失败返回FALSE，获取错误码调用PlayM4_GetLastError。

Remarks

鹰眼球面显示支持抓图，软硬解均支持。

See Also

PlayM4_SR_SetConfig

PlayM4_SR_Rotate


PlayM4_RegisterDrawFun

画图回调。

BOOL PlayM4_RegisterDrawFun(
  LONG          nPort,
  CALLBACK     *DrawFun,
  LONG          nUser
);

Parameters

nPort
[in] 播放通道号。
DrawFun
[in] 画图回调函数

Callback Function

typedef void(CALLBACK *DrawFun)(
  Long      nPort,
  HDC       hDc,
  Long      nUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
hDc
[out] 表面设备上下文，可以像操作显示窗口客户区DC那样操作它
nUser
[out] 用户数据，就是上面输入的用户数据
nUser
[in] 用户指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

注册一个回调函数，获得当前表面的device context，可以在这个DC上画图（或写字），就好像在窗口的客户区DC上绘图，但这个DC不是窗口客户区的DC，而是DirectDraw里的Off-Screen表面的DC。

注意，如果是使用overlay表面，这个接口无效，可以直接在窗口上绘图，只要不是透明色就不会被覆盖。

回调在时钟线程中触发, 不能出现耗时操作, 否则会打乱时钟脉冲, 影响显示。

调用此接口，且在回调函数中做了一定处理会影响显示效率和效果。

See Also

PlayM4_RigisterDrawFun


PlayM4_RegisterIVSSurfaceDrawFunCB

D3D11渲染支持回调渲染表面hSurface(不同于HDC)。

int PlayM4_RegisterIVSSurfaceDrawFunCB(
  int          nPort,
  CALLBACK     *IVSDrawFun,
  void          *pUser
);

Parameters

nPort
[in] 播放通道号。
IVSDrawFun
[in] IVS表面回调

Callback Function

typedef void(CALLBACK *DrawFun)(
  int      nPort,
  void       *hSurface,
 FRAME_INFO  *pFrameInfo,
 SYNCDATA_INFO  *pSyncData,
  void      *pUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
hSurface
[out] Surface表面
pFrameInfo
[out] 帧信息
pSyncData
[out] 帧信息
nUser
[out] 用户数据，就是上面输入的用户数据
pUser
[in] 用户指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

在软件的D3D11选软模式下画面渲染时候，会回调表面hSurface以及匹配好用来绘制智能信息。

目前只有D3D11支持Surface回调，且PlayM4_RegisterDrawFun、PlayM4_RegisterSurfaceDrawFun、PlayM4_RegisterIVSDrawFunCB、PlayM4_RegisterIVSSurfaceDrawFunCB只能注册一个。

D3D11渲染引擎下支持渲染表面回调（软解模式），注册回调后再开启硬解码，或者设置其他渲染引擎，渲染可能无法触发以及无法错误提示。

PlayM4_RegisterIVSSurfaceDrawFunCB接口回调的SYNCDATA_INFO中的dwDataType类型固定2（有无私有数据取决于长度），PlayM4_RegisterIVSDrawFunCB接口雷同。

See Also

PlayM4_RigisterDrawFun

PlayM4_RegisterIVSDrawFunCB


PlayM4_RegisterIVSDrawFunCB_EX

IVS画图回调。

int PlayM4_RegisterIVSDrawFunCB_EX(
  long               nPort,
  CALLBACK         *IVSDrawFun,
  void             *pUser,
   unsigned int    nType
);

Parameters

nPort
[in] 播放通道号。
IVSDrawFun
[in] IVS表面回调

Callback Function

typedef void(CALLBACK *IVSDrawFun)(
  long            nPort,
  HDC             hDC,
 FRAME_INFO     *pFrameInfo,
 INTEL_INFO_EX  *pSyncData,
  void          *pUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
hDC
[out] 显示DC
pFrameInfo
[out] 帧信息
pSyncData
[out] 同步信息
nUser
[out] 用户数据，就是上面输入的用户数据
pUser
[in] 用户指针
nType
[in] 需要回调的私有信息类型，目前支持两种类型: 普通目标框：1; 深眸目标框； 2; 支持输入 1|2 的形式，即输入3表示两种类型都会回调

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

注册一个回调函数，获得当前表面的上下文，可以在这个DC上画图或者写字。

回调函数在时钟线程中触发，不能出现耗时操作，否则会打乱时钟脉冲，影响显示。

调用此接口，且在回调函数中做了一定的处理，会影响显示效率和效果。

该画图回调接口和其他类型的画图回调接口互斥使用。

该画图回调接口开启后，当回调函数不为NULL时，则原IVS的目标框、规则框和报警框不再显示，由外部进行对DC的调用处理；nType表示需要回调的私有信息类型，目前支持两种类型: 普通目标框：1; 深眸目标框；2; 支持输入1|2 的形式，即输入3表示两种类型都会回调；如果没有相应的nType类型，则回调的信息类型值为0； 该回调函根据当前显示帧实时触发，暂停情况下也会实时触发回调。。

See Also

PlayM4_RigisterDrawFun

PlayM4_RegisterIVSDrawFunCB


PlayM4_ReversePlay

开始倒放。

BOOL PlayM4_ReversePlay(
  LONG    nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 6.3版本开始支持该接口，该接口必须在PlayM4_Play之后调用。
  • 倒放不播放音频。分辨率大于等于1080P时，倒放的GOP只能存放25帧，所以I帧间隔大于25时，会有卡顿。
  • 文件模式(PlayM4_OpenFile)下倒放前需要创建文件索引，支持最大倒放速度比正放最大速度要慢。暂不支持TS封装文件。
  • 流播放模式(PlayM4_OpenStream)时，实时流数据播放不支持倒放。非实时流数据，即录像文件以读取数据方式然后送入到播放库中以流模式播放，可以实现倒放，但是应用层送入解码的数据必须是一个GOP，且是逆序送入的数据，即将录像文件先解析出GOP，然后根据GOP的时序，逆序的送入到播放库中。如本地PC上的录像文件，客户自己读取录像文件数据分析出各个GOP(一般指I帧机器后面依靠该I帧解码的其他帧），文件时间顺序为I1PPPPPPP..., I2PPPPPPP...,I3PPPPPPPP...,......,InPPPPPPP...，则送入到播放库中倒放需要按照InPPPPP...,In-1PPPPP...,......,I3PPPPPPP...,I2PPPPPP...,I1PPPPPP...的顺序依次送入。

See Also

PlayM4_SetFileRefCallBack

PlayM4_GetSystemTime


PlayM4_SetSycGroup

同步回放接口。

BOOL PlayM4_SetSycGroup(
  LONG    nPort,
  DWORD   dwGroupIndex
);

Parameters

nPort
[in] 播放通道号
dwGroupIndex
[in] 同步组序号，取值在0~3之间

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 同步回放是指多个文件在有相同的时间段，然后多个窗口按照相同的全局时间播放。
  • PlayM4_SetSycGroup在PlayM4_Play之前调用，可以多次调用>PlayM4_SetSycGroup接口，将指定的nPort加入到同步组中。
  • dwGroupIndex一个序号被视为一个同步组，每个同步组最多64个播放通道，若超过64个播放通道则返回失败；且必须调用PlayM4_FreePort此播放通道才能退出同步组，dwGroupIndex参数说明为-1时也可以取消同步组。
  • 支持文件模式和文件流模式同步回放。同步回放需要全局时间，因此只支持我司设备码流；
  • 3GP封装无全局时间，不支持同步回放；AVI也不支持同步回放。

示例代码

示例：同步回放模块流程

     int PlayM4_SetSycGroup(int nPort, unsigned int dwGroupIndex)；

     int m_lPort1 = -1;
     int m_lPort2 = -1;

    //获取播放库通道1
    PlayM4_GetPort(&m_lPort1);

    //打开待播放的文件testfile1.mp4
    PlayM4_OpenFile(m_lPort1,”testfile1.mp4”);

    //获取播放库通道2
    PlayM4_GetPort(&m_lPort2);

    //打开待播放的文件testfile2.mp4
    PlayM4_OpenFile(m_lPort2,”testfile2.mp4”);

    //设置同步回放组序号
    PlayM4_SetSycGroup(m_lPort1,0);

    //设置同步回放组序号
    PlayM4_SetSycGroup(m_lPort2,0);

    //开始播放文件1
    PlayM4_Play(m_lPort1,hwnd1);

    //开始播放文件2
    PlayM4_Play(m_lPort2, hwnd2);
注：
参数1： m_lPort1表示已经获取的播放库内部分配的端口号 ；
参数2： 0表示同步组序号0；
1 做播放控制的时候，属于同步组内的通道都需要同时下一样的操作命令
2 通道在播放过程中，允许动态加入和退出同步组。

See Also

PlayM4_SetSycStartTime


PlayM4_GetSupplementaryTimeZone

获取当前路设置过的同步回放码流时区（实际为时差，精确到秒）。

BOOL PlayM4_GetSupplementaryTimeZone(
  int  nPort,
  int  *pTimeZone
);

Parameters

nPort
[in] 播放通道号
nEnable
[in] 开启标记，0-取消；非0-开启。取值为int型非0，包含正数和负数。
pTimeZone
[out] 时区值。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 设置时区采取获取时区，不设置无需获取。
  • 设置的时区对关闭码流后仍然有效。

See Also

PlayM4_GetPort PlayM4_OpenFile

PlayM4_OpenStream PlayM4_Play


PlayM4_SetSupplementaryTimeZone

设置同步回放码流时区（实际为时差，精确到秒）。

BOOL PlayM4_SetSupplementaryTimeZone(
  int  nPort,
  int  nTimeZone
);

Parameters

nPort
[in] 播放通道号
nTimeZone
[in] 时区（以秒为单位）。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 没录同步回放前设置每路的时区，否则为之前默认为0时区。时区的表示以秒位单位，东区位正，西区位负。

See Also

PlayM4_GetSupplementaryTimeZone


PlayM4_FEC_Enable

开启鱼眼功能。

BOOL PlayM4_FEC_Enable(
  LONG    nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

播放库支持最大鱼眼路数为9路。

See Also

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetParam PlayM4_FEC_GetParam

PlayM4_FEC_Disable


PlayM4_FEC_Disable

关闭鱼眼模块接口。

BOOL PlayM4_FEC_Disable(
  LONG    nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

鱼眼不支持画面旋转。

若鱼眼设备码流为H264或者265格式编码的，同时，显卡支持264和265硬解码的情况下，则可以支持鱼眼硬解码展开；其他编码格式则不支持鱼眼硬解码展开。

See Also

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetParam PlayM4_FEC_GetParam

PlayM4_FEC_Enable


PlayM4_FEC_GetPort

获取鱼眼矫正处理子端口。

BOOL PlayM4_FEC_GetPort(
  LONG              nPort,
  unsigned int     *nSubPort,
  FECPLACETYPE      emPlaceType,
  FECCORRECTTYPE    emCorrectType
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
emPlaceType
[in] 安装方式
enum tagFECPlaceType{
  FEC_PLACE_WALL    = 0x1,     //壁装方式（法线水平）
  FEC_PLACE_FLOOR   = 0x2,     //地面安装(法线向上）
  FEC_PLACE_CEILING = 0x3      //顶装方式(法线向下）
}FECPLACETYPE
emCorrectType
[in] 矫正方式
enum tagFECCorrectType{
  FEC_CORRECT_NULL                 = 0x0,      //不矫正
  FEC_CORRECT_PTZ                  = 0x100,    //PTZ
  FEC_CORRECT_180                  = 0x200,    //180度矫正（对应2P）
  FEC_CORRECT_360                  = 0x300,    //360全景矫正（对应1P）
  FEC_CORRECT_LAT                  = 0x400,     //纬度展开
  FEC_CORRECT_SEMISPHERE           = 0x500,     //3D矫正-（可以开多路）
  FEC_CORRECT_CYLINDER             = 0x0600,    // 鱼眼圆柱显示 - 顶装/底装
  FEC_CORRECT_CYLINDER_SPLIT       = 0x0700, // 鱼眼切开的圆柱显示 - 顶装/底装
  FEC_CORRECT_PLANET               = 0x0800, // 鱼眼小行星
  FEC_CORRECT_ARCSPHERE_HORIZONTAL = 0x0900, // 鱼眼水平弧面 - 壁装
  FEC_CORRECT_ARCSPHERE_VERTICAL   = 0x0A00, // 鱼眼垂直弧面 - 壁装
}FECCORRECTTYPE

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

壁装不支持180矫正，并且壁装方式不支持更新180和360度矫正时的偏移角度，壁装方式360度矫正和纬度矫正效果一致。

鱼眼不支持画面旋转。

FEC_CORRECT_NULL、FEC_CORRECT_PTZ、FEC_CORRECT_180、FEC_CORRECT_360、FEC_CORRECT_LAT是2D鱼眼。 FEC_CORRECT_SEMISPHERE、FEC_CORRECT_CYLINDER、FEC_CORRECT_CYLINDER_SPLIT、FEC_CORRECT_PLANET、FEC_CORRECT_ARCSPHERE_HORIZONTAL和FEC_CORRECT_ARCSPHERE_VERTICAL是3D鱼眼。

顶装和底装不支持纬度展开方式。

PlayM4_FEC_SetConfig不建议使用的FEC_DISPLAYSPHERE；建议使用新的鱼眼球面矫正方式PlayM4_FEC_GetPort中设定emCorrectType为FEC_CORRECT_SEMISPHERE。

同一路鱼眼只有一种安装方式，且不支持全景、纬度、原图同时开启。

水平（垂直）鱼眼弧面展开时，若圆心参数left小于0或right大于1（top<0或bottom>1），则边缘会出现拉伸模糊现象。

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_SetParam PlayM4_FEC_GetParam

PlayM4_FEC_DelPort


PlayM4_FEC_DelPort

删除鱼眼矫正处理子端口。

BOOL PlayM4_FEC_DelPort(
  LONG          nPort,
  unsigned int  nSubPort
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

停止解码释放资源后，窗口显示停在最后一帧画面，若要消除，应用层可以自行刷新窗口恢复显示播放前的窗口状态。

See Also

PlayM4_FEC_GetPort


PlayM4_FEC_SetParam

设置鱼眼矫正参数。

BOOL PlayM4_FEC_SetParam(
  LONG                 nPort,
  unsigned int         nSubPort,
  FISHEYEPARAM        *pPara
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
pPara
[in] 鱼眼矫正参数结构体参数指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

CYCLEPARAM参数现在已经不判断四个值的范围，只要满足 左<右 并且 上<下就可以了。

启动鱼眼矫正功能，则将不支持画面旋转功能。

鱼眼圆心参数对所有的子port号都是有效的，设置一路子port鱼眼参数，则其他路鱼眼矫正图像都会发生变化。

如果鱼眼弧面和PTZ或者其他2D矫正效果同时开启的话,圆心参数的设置需要遵循弧面的设置规则。

See Also

PlayM4_FEC_GetParam


PlayM4_FEC_GetParam

获取鱼眼矫正参数。

BOOL PlayM4_FEC_GetParam(
  LONG                 nPort,
  unsigned int         nSubPort,
  FISHEYEPARAM        *pPara
);

Parameters

nPort
[in] 播放通道号。
nSubPort
[in] 处理子端口
pPara
[in] 鱼眼矫正参数结构体参数指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

若鱼眼设备码流为H264或者265格式编码的，同时，显卡支持264和265硬解码的情况下，则可以支持鱼眼硬解码展开；其他编码格式则不支持鱼眼硬解码展开。

鱼眼不支持画面旋转。

See Also

PlayM4_FEC_SetParam


PlayM4_FEC_SetWnd

设置显示窗口，可以随时切换。

BOOL PlayM4_FEC_SetWnd(
  LONG             nPort,
  unsigned int     nSubPort,
  void            *hWnd
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
hWnd
[in] 设置显示窗口句柄

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

若鱼眼设备码流为H264或者265格式编码的，同时，显卡支持264和265硬解码的情况下，则可以支持鱼眼硬解码展开；其他编码格式则不支持鱼眼硬解码展开。

鱼眼LAT、180、360矫正时候，只支持一个port；多个port设置为鱼眼360度、鱼眼LAI、180度时，只有最后一个起作用。

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetParam PlayM4_FEC_GetParam


PlayM4_FEC_SetCallBack

设置鱼眼窗口的绘图回调。

BOOL PlayM4_FEC_SetCallBack(
  LONG               nPort,
  unsigned int       nSubPort,
  FISHEYE_CallBack  *cbFunc,
  void              *pUser
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
cbFunc
[in] 鱼眼窗口画图回调函数

Callback Function

typedef void(FISHEYE_CallBack *cbFunc)(
  void            *pUser,
  unsigned int    nSubPort,
  unsigned int    nCBType,
  void            *hDC,
  unsigned int    nWidth,
  unsigned int    nHeight
);

Callback Function Parameters

pUser
[out] 用户指针
nSubPort
[out] 处理子端口
nCBType
[out] 鱼眼的画图回调类型（暂时不支持）
hDC
[out] DC表面
nWidth
[out] DC表面的宽
nHeigh
[out] DC表面的高
pUser
[in] 用户指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

若鱼眼设备码流为H264或者265格式编码的，同时，显卡支持264和265硬解码的情况下，则可以支持鱼眼硬解码展开；其他编码格式则不支持鱼眼硬解码展开。

鱼眼不支持画面旋转。

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetParam PlayM4_FEC_GetParam


PlayM4_FEC_GetCurrentPTZPort

获取当前选择鱼眼子port功能。

BOOL PlayM4_FEC_GetCurrentPTZPort(
  LONG                  nPort,
  float                 fPositionX,
  float                 fPositionY,
  unsigned int         *pnPort
);

Parameters

nPort
[in] 播放通道号
fPositionX
[in] 鼠标x位置（接触屏幕点x坐标）
fPositionY
[in] 鼠标y位置（接触屏幕点y坐标）
pnPort
[out] 子port号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_FEC_GetParam PlayM4_FEC_SetParam

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetCurrentPTZPort


PlayM4_FEC_SetCurrentPTZPort

设置当前选择鱼眼子port功能。

BOOL PlayM4_FEC_SetCurrentPTZPort(
  LONG                 nPort,
  unsigned int         nSubPort
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 设置期望的子port号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_FEC_GetParam PlayM4_FEC_SetParam

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_GetCurrentPTZPort


PlayM4_FEC_SetPTZOutLineShowMode

画矩形或者不规则框选择接口。

BOOL PlayM4_FEC_SetPTZOutLineShowMode(
  LONG                  nPort,
  FECSHOWMODE           nPTZShowMode
);

Parameters

nPort
[in] 播放通道号
nPTZShowMode
[in] 展现模式
enum tagFECPlaceType{
  FEC_PTZ_OUTLINE_NULL     ,     //不显示
  FEC_PTZ_OUTLINE_RECT    ,     //矩形显示
  FEC_PTZ_OUTLINE_RANGE       //真实区域显示
}FECPLACETYPE

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

鱼眼矫正在原图上画矫正区域，需要用鱼眼方式开一个没有矫正效果（FEC_CORRECT_NULL）的窗口，再开其他PTZ矫正窗口。

鱼眼ptz矫正画矫正区域，原区域和矩形区域可能效果相差大，因为矩形框只是为了标记中心位置，所以存在这样的差异。

See Also

PlayM4_FEC_GetParam PlayM4_FEC_SetParam

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_GetCurrentPTZPort PlayM4_FEC_SetCurrentPTZPort


PlayM4_FEC_SetConfig

设置鱼眼配置参数。

BOOL PlayM4_FEC_SetConfig(
  LONG                 nPort,
  unsigned int         nType
);

Parameters

nPort
[in] 播放通道号
nType
[in] 配置类型
宏定义 | 宏定义值 | 含义
FEC_DISPLAYSURFACE | 0x400 | 鱼眼硬解标识

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

建议使用新的鱼眼球面矫正方式PlayM4_FEC_GetPort中设定emCorrectType为FEC_CORRECT_SEMISPHERE。

PlayM4_FEC_SetConfig不建议使用的FEC_DISPLAYSPHERE；建议使用新的鱼眼球面矫正方式PlayM4_FEC_GetPort中设定emCorrectType为FEC_CORRECT_SEMISPHERE。

See Also

PlayM4_FEC_GetParam PlayM4_FEC_SetParam

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort


PlayM4_FEC_Capture

鱼眼抓图。

BOOL PlayM4_FEC_Capture(
  LONG               nPort,
  unsigned int       nSubPort,
  unsigned int       nType,
  char              *pFileName
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
nType
[in] 抓图类型
pFileName
[in] 图片保存文件名

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

鱼眼抓图大分辨率，比如720P以上分辨率码流可能会导致卡顿。

See Also

PlayM4_FEC_GetParam


PlayM4_FEC_Rotate

鱼眼原图模式下进行球面旋转参数设置。

BOOL PlayM4_FEC_Rotate(
  LONG                      nPort,
  PLAYM4SRTRANSFERPARAM   *pstRotateParam

);

Parameters

nPort
[in] 播放通道号
pstRotateParam
[in] 旋转参数结构体指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

老的鱼眼球面旋转接口,不建议使用；建议用新的半球-球面矫正画面的视角变化调节(缩放和旋转)。

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_SetParam PlayM4_FEC_GetParam

PlayM4_FEC_GetViewParam PlayM4_FEC_SetViewParam

PlayM4_FEC_DelPort


PlayM4_FEC_GetViewParam

获取3D矫正视角参数。

BOOL PlayM4_FEC_GetViewParam(
  LONG                    nPort,
  unsigned int            nSubPort,
  PLAYM4HRVIEWPARAMTYPE   enViewParamType,
  float                   *fValue,
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 子通道号
enViewParamType
[in] 旋转参数
enum tagPLAYM4HRVIEWPARAMTYPE{
  PLAYM4_HR_VPT_ROTATION_X   = 0x1   //水平旋转
  PLAYM4_HR_VPT_ROTATION_Y   = 0x2    //垂直旋转
  PLAYM4_HR_VPT_SCALE        = 0x3    //缩放(其绝对值为浮点型0值时为放大效果，目前缩放范围是-0.8~900，-0.8也是放大效果)
}PLAYM4HRVIEWPARAMTYPE
fValue
[out] 矫正角度

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

建议用新的3D-球面矫正画面的视角变化调节(缩放和旋转)。

PlayM4_FEC_GetViewParam缩放(其绝对值为浮点型0值时为放大效果，目前缩放范围是-0.8~900，-0.8也是放大效果)。

鱼眼3D效果说明如下：

鱼眼3D展开 | 坐标x | 坐标y | Scale(-0.8~900) | 示例图片
初始值（背面剔除） | 4.71 | 0 | 3 |
放大 | 4.71 | 0 | 2 |
缩小 | 4.71 | 0 | 4 |
 | 0 | 0 | 3 |
 | 1.57 | 0 | 3 |
 | 3.14 | 0 | 3 |
 | 3.14 | 3.14 | 3 |
 | 4.07 | 0 | 3 |
 | 4.07 | 1.57 | 3 |
 | 4.07 | 3.14 | 3 |

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_SetParam PlayM4_FEC_GetParam

PlayM4_FEC_SetViewParam PlayM4_FEC_Rotate

PlayM4_FEC_DelPort


PlayM4_FEC_SetViewParam

设置3D矫正视角参数。

BOOL PlayM4_FEC_SetViewParam(
  LONG                    nPort,
  unsigned int            nSubPort,
  PLAYM4HRVIEWPARAMTYPE   enViewParamType,
  float                   fValue,
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 子通道号
enViewParamType
[in] 旋转参数
enum tagPLAYM4HRVIEWPARAMTYPE{
  PLAYM4_HR_VPT_ROTATION_X   = 0x1   //水平旋转
  PLAYM4_HR_VPT_ROTATION_Y   = 0x2    //垂直旋转
  PLAYM4_HR_VPT_SCALE        = 0x3    //缩放(其绝对值为浮点型0值时为放大效果，目前缩放范围是-0.8~900，-0.8也是放大效果)
}PLAYM4HRVIEWPARAMTYPE
fValue
[in] 矫正角度，设置的值为获取值加上要偏移值

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

建议用新的3D-球面矫正画面的视角变化调节(缩放和旋转)。

鱼眼3D效果说明如下：

鱼眼3D展开 | 坐标x | 坐标y | Scale(-0.8~900) | 示例图片
初始值（背面剔除） | 4.71 | 0 | 3 |
放大 | 4.71 | 0 | 2 |
缩小 | 4.71 | 0 | 4 |
 | 0 | 0 | 3 |
 | 1.57 | 0 | 3 |
 | 3.14 | 0 | 3 |
 | 3.14 | 3.14 | 3 |
 | 4.07 | 0 | 3 |
 | 4.07 | 1.57 | 3 |
 | 4.07 | 3.14 | 3 |

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_SetParam PlayM4_FEC_GetParam

PlayM4_FEC_GetViewParam PlayM4_FEC_Rotate

PlayM4_FEC_DelPort


PlayM4_FEC_GetSpecialViewParam

获取3D弧面矫正特定视角参数。

BOOL PlayM4_FEC_GetSpecialViewParam(
  int             nPort,
  unsigned int     nSubPort,
 PLAYM4FECSPECIALVIEWTYPE  enSVType,
 PLAYM4HRVIEWPARAMTYPE  enVPType,
  float*          fValue
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
enSVType
[in] 特定视角状态视参数
enum tagPLAYM4FECSpecialViewType{
  PLAYM4_FEC_SVT_EDGE    = 0x1,      // 弧面鱼眼模型与窗口贴边视角
}PLAYM4FECSPECIALVIEWTYPE
enSVType
[in] 角变换类型参数
enum tagPLAYM4HRViewParamType{
  PLAYM4_HR_VPT_ROTATION_X    = 0x1,      // 水平旋转
  PLAYM4_HR_VPT_ROTATION_Y    = 0x2,      // 垂直旋转
  PLAYM4_HR_VPT_SCALE         = 0x3,      // 缩放(其绝对值为浮点型0值时为黑屏-正常效果)
}PLAYM4HRVIEWPARAMTYPE
fValue
[out] 特定视角参数

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

只适用于弧面，跟SetViewParam接口配合使用，快速设置调节到特定的弧面视角后调用。

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetParam PlayM4_FEC_GetParam


PlayM4_FEC_Set3DModelParam

设置3D模型参数。

BOOL PlayM4_FEC_Set3DModelParam(
  LONG             nPort,
  unsigned int     nSubPort,
  PLAYM4FEC3DMODELPARAM  enType,
  float          fValue
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
enType
[in] 圆柱矫正的模型参数
enum tagPLAYM4FEC3DModelParam{
  PLAYM4_FEC_3DMP_CYLINDER_HEIGHT    = 0x1,      // 圆柱模型高
  PLAYM4_FEC_3DMP_CYLINDER_RADIUS    = 0x2,      // 圆柱模型半径
}PLAYM4FEC3DMODELPARAM
fValue
[in] 校正值，圆柱模型的高或者半径的值半径和高都默认是2；半径范围是[0.5,4],高范围是[0.5,6],都包含边界

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

暂时针对3D圆柱展开有效（设置圆柱模型的高和半径）

硬解码时，圆柱切开展开过程中模型顶点计算出现问题，使得画面中间出现一块模糊矩形区域。

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetParam PlayM4_FEC_GetParam


PlayM4_FEC_SetCorrectEffect

3D鱼眼矫正背面剔除。

BOOL PlayM4_FEC_SetCorrectEffect(
  LONG             nPort,
  unsigned int     nSubPort,
 FECCORRECTEFFECT  nCorrectEffect,
  float          fValue
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
nCorrectEffect
[in] 背面剔除参数
enum tagFECCorrectEffect{
  FEC_CORRECT_EFFECT_BACK_FACE_CULLING    = 0x100,      //背面剔除：非0表示启用，为0表示不启用，建议设置整数强转浮点数
}FECCORRECTEFFECT
fValue
[in] 剔除值，若设置为非0则表示启用；设置为0则表示不启用，建议设置整数类型强制转换为浮点数

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

暂时只有3D半球背景剔除需求，其他3D矫正暂不考虑

主要用于3D半球矫正的背景剔除；鱼眼小行星设定背面剔除无效果，3D弧面展开有效果；

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetParam PlayM4_FEC_GetParam


PlayM4_FEC_SetDisplayRegion

鱼眼电子放大。

BOOL PlayM4_FEC_SetDisplayRegion(
  LONG             nPort,
  unsigned int     nSubPort,
  unsigned int     nType,
  DWORD            nRegionNum,
  RECT*            pSrcRect,
  HWND             hDestWnd,
  BOOL             bEnable
);

Parameters

nPort
[in] 播放通道号
nSubPort
[in] 处理子端口
nType
[in] 鱼眼处理方式。nType设定为0，则表示鱼眼电子放大（暂时只支持鱼眼电子放大）；nType设定为1，则表示鱼眼窗口分割(暂不支持)
nRegionNum
[in] 窗口序号，暂时只支持原始窗口，即nRegionNum = 0
pSrcRect
[in] 区域归一化，乘以1000除以宽或者搞（值在0~1000之间）
hWnd
[in] 窗口句柄，暂时只支持原始窗口，设置为NULL
bEnable
[in] 开启关闭开关，true则开启；如设定为false的时候，如其他参数合法，可以恢复原图

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

只推荐原图、180、360、纬度展开（不带PTZ显示）电子放大，再开ptz会导致电子放大失效-3D鱼眼不建议使用此接口(用视角变化接口进行缩放）。

原图，鱼眼180、360维度展开可以自由电子放大，不受PTZ是否开启影响， 但是PTZ展开本身不支持电子放大 。

See Also

PlayM4_FEC_Enable PlayM4_FEC_Disable

PlayM4_FEC_GetPort PlayM4_FEC_DelPort

PlayM4_FEC_SetParam PlayM4_FEC_GetParam


PlayM4_GetDecodeEngine

获取硬解码。

DWORD PlayM4_GetDecodeEngine(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

返回解码类型，若返回0表示软解码；返回1表示硬解码。获取错误码调用PlayM4_GetLastError。

nDecodeEngine类型宏定义 | 宏定义值 | 类型含义
SOFT_DECODE_ENGINE | 0 | 软解码
HARD_DECODE_ENGINE | 1 | 硬解码

See Also

PlayM4_OpenStream PlayM4_CloseStream
PlayM4_Play PlayM4_Stop
PlayM4_InputData
PlayM4_SetDecodeEngineEx


PlayM4_GetEngineSupportEx

获取设备硬解码和渲染能力集。

BOOL PlayM4_GetEngineSupportEx(
  LONG     nPort,
 ENGINESUPPORT_EX  *pstEngineSupport
);

Parameters

nPort
[in] 播放通道号
pstEngineSupport
[out] 多显卡硬解码和渲染支持能力集

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

其中32位播放库最大探测支持与64位播放库最大探测支持分辨率可能不一致(显存创建大小限制)；且分辨率探测为大概值，分档探测，不是精准值，及支持的分辨率到上一级档位中间的分辨率有可能是支持的。

D3D9硬解码探测暂限制为只对第0块显卡的单显卡探测，不支持多显卡探测。

硬解码探测分辨率 | 宏定义值 | 分辨率
HXVA_RESOLUTION_NONE | -0x00 | 0
HXVA_RESOLUTION_200W | 0x01 | 1920*1080
HXVA_RESOLUTION_300W | 0x02 | 2048*1536
HXVA_RESOLUTION_500W | 0x03 | 2560*1920
HXVA_RESOLUTION_800W | 0x04 | 3840*2160
HXVA_RESOLUTION_1600W | 0x05 | 4096*4096
HXVA_RESOLUTION_6400W | 0x06 | 8192*8192

See Also

PlayM4_GetPort


PlayM4_SetDecodeEngineEx

设置硬解码。

BOOL PlayM4_SetDecodeEngineEx(
  LONG     nPort,
  DWORD    nDecodeEngine
);

Parameters

nPort
[in] 播放通道号
nDecodeEngine
[in] 解码类型，如下表所示：

nDecodeEngine类型宏定义 | 宏定义值 | 类型含义
SOFT_DECODE_ENGINE | 0 | 软解码
HARD_DECODE_ENGINE | 1 | 硬解码

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 支持流模式硬解码和本地文件方式硬解码。该接口必须在PlayM4_OpenStream之后调用，如果想要切换软/硬解，则必须先调用PlayM4_CloseStream和PlayM4_OpenStream重新开流。
  • 调用该接口前可以调用PlayM4_SetRunTimeInfoCallBackEx设置硬解码错误信息回调函数，硬解码发生严重错误或资源不足时，播放库通过该回调函数通知上层，上层收到错误信息后应手动切换至软解码。
  • 启用硬解码后，不支持以下接口： PlayM4_GetDisplayBuf、PlayM4_SetDisplayBuf（不支持设置15个显示节点）、PlayM4_SetDisplayCallBack、PlayM4_ResetBuffer(缓冲区类型：BUF_VIDEO_RENDER、BUF_AUDIO_RENDER)，图像增强相关功能接口。
  • 目前在D3D11VA硬解支持倒放，DXVA不支持倒放。
  • 由于硬解码库在DXVA2上开发，只有在操作系统vista及以上、显卡支持dxva2.0的环境下，才可以开启硬解码功能。同时，由于显卡能力的限制，硬解码长时间多路轮训预览有稳定性风险。
  • d3d11va 要求系统在win10 和win8.1 ，但是win7系统不支持；由于显卡能力的限制，硬解码长时间多路轮训预览有稳定性风险。

See Also

PlayM4_OpenStream PlayM4_CloseStream
PlayM4_Play PlayM4_Stop
PlayM4_InputData
PlayM4_SetDecodeEngine


PlayM4_RenderPrivateData

显示私有数据（智能信息显示开关）。

BOOL PlayM4_RenderPrivateData(
  LONG     nPort,
  int      nIntelType,
  BOOL     bTrue
);

Parameters

nPort
[in] 播放通道号
nIntelType
[in] 内部类型，按位表示，每一位表示一种私有数据类型
enum _PLAYM4_PRIDATA_RENDER{

  PLAYM4_RENDER_ANA_INTEL_DATA    = 0x00000001, //智能分析
  PLAYM4_RENDER_MD                = 0x00000002, //移动侦测
  PLAYM4_RENDER_ADD_POS           = 0x00000004, //POS信息后叠加
  PLAYM4_RENDER_ADD_PIC           = 0x00000008, //图片叠加
  PLAYM4_RENDER_FIRE_DETCET       = 0x00000010,  //热成像信息
  PLAYM4_RENDER_TEM               = 0x00000020,  //温度信息
  PLAYM4_RENDER_TRACK_TEM         = 0x00000040, //轨迹信息
 PLAYM4_RENDER_THERMAL           = 0x00000080//废气检测和烟火屏蔽信息
}PLAYM4_PRIDATA_RENDER
bTrue
[in] 是否显示

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口适用于带有智能信息的码流，若无智能信息的码流则调用此接口没有效果。

nIntelType 暂时只支持测温信息抓图（0x20），其他的0x1-0x10暂不支持。

移动侦测、支持旋转，支持电子放大默认开启；

IVS和ITS智能分析，支持旋转支持电子放大，默认开启；

POS信息叠加是默认关闭，软解码POS支持旋转和抓图显示以及电子放大和画面分割；

硬解码POS叠加不支持黑白背景自适应功能、不支持旋转、不支持电子放大，不支持抓图显示；

热成像火点信息，默认开启，不支持旋转，不支持电子放大，火点信息叠加大小与码流中设置的字体大小和窗口高成比例变化，与窗口的宽度大小无关；

温度信息，默认关闭，部分温度信息支持旋转和电子放大，测温抓图暂时只支持软解；

图片叠加默认关闭，暂时只支持软解，图片叠加不支持电子放大、旋转；

智能信息抓图接口暂时只支持软解码下的测温信息；

不支持第一代火点信息显示。

第一代火点图片如下：

第二代火点图片如下，如下图所示可以显示最高温度以及区域信息：

See Also

PlayM4_Play PlayM4_Stop


PlayM4_RenderPrivateDataEx

显示私有数据（智能信息显示开关,热成像温度信息）。

BOOL PlayM4_RenderPrivateDataEx(
  LONG     nPort,
  int      nIntelType,
  int      nSubType,
  BOOL     bTrue
);

Parameters

nPort
[in] 播放通道号
nIntelType
[in] 内部类型，按位表示，每一位表示一种私有数据类型
enum _PLAYM4_PRIDATA_RENDER{
  PLAYM4_RENDER_ANA_INTEL_DATA    = 0x00000001, //智能分析
  PLAYM4_RENDER_MD                = 0x00000002, //移动侦测
  PLAYM4_RENDER_ADD_POS           = 0x00000004, //POS信息后叠加
  PLAYM4_RENDER_ADD_PIC           = 0x00000008, //图片叠加
  PLAYM4_RENDER_FIRE_DETCET       = 0x00000010,  //热成像信息
  PLAYM4_RENDER_TEM               = 0x00000020,  //温度信息
  PLAYM4_RENDER_TRACK_TEM         = 0x00000040, //轨迹信息
 PLAYM4_RENDER_THERMAL           = 0x00000080//废气检测和烟火屏蔽信息
}PLAYM4_PRIDATA_RENDER
nSubType
[in] 测温类型；当nIntelType为PLAYM4_RENDER_FIRE_DETCET时
enum _PLAYM4_FIRE_ALARM{
  PLAYM4_FIRE_FRAME_DIS            = 0x00000001, //火点框显示
  PLAYM4_FIRE_MAX_TEMP             = 0x00000002, //最高温度
  PLAYM4_FIRE_MAX_TEMP_POSITION    = 0x00000004, //最高温度位置显示
  PLAYM4_FIRE_DISTANCE             = 0x00000008, //最高温度距离
}PLAYM4_FIRE_ALARM
当nIntelType为PLAYM4_RENDER_TEM时
enum _PLAYM4_TEM_FLAG{
  PLAYM4_TEM_REGION_BOX            = 0x00000001, //框测温
  PLAYM4_TEM_REGION_LINE           = 0x00000002, //线测温
  PLAYM4_TEM_REGION_POINT          = 0x00000004, //点测温
}PLAYM4_TEM_FLAG
当nIntelType为PLAYM4_RENDER_THERMAL时
enum _PLAYM4_THERMAL_FLAG{
  PLAYM4_THERMAL_FIREMASK            = 0x00000001, //烟火屏蔽
  PLAYM4_THERMAL_RULEGAS             = 0x00000002, //规则废气检测
  PLAYM4_THERMAL_TARGETGAS         = 0x00000004, //目标废气检测
}PLAYM4_TEM_FLAG
当nIntelType为PLAYM4_RENDER_TRACK_TEM时
enum _PLAYM4_TRACK_FLAG{
  PLAYM4_TRACK_PEOPLE            = 0x00000001, //人轨迹
  PLAYM4_TRACK_VEHICLE           = 0x00000002, //车轨迹
}PLAYM4_TEM_FLAG
bTrue
[in] 是否显示

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

nIntelType 暂时只支持测温信息抓图（0x10-0x80)的四种猪儿类型设置对应的子类型。

此接口适用于带有智能信息的码流，若无智能信息的码流则调用此接口没有效果。

热成像火点信息，默认开启，不支持旋转，不支持电子放大，火点信息叠加大小与码流中设置的字体大小和窗口高成比例变化，与窗口的宽度大小无关；

移动侦测，支持旋转，支持电子放大，默认开启；

IVS、ITS智能分析，支持旋转，支持电子放大，默认开启；

POS信息叠加是默认关闭，软解码POS支持旋转和抓图显示以及电子放大和窗口分割以及鱼眼展开；

硬解码POS叠加不支持黑白背景自适应功能、不支持旋转、不支持电子放大，不支持抓图显示以及鱼眼展开；

热成像火点信息，默认开启，不支持旋转，不支持电子放大，火点信息叠加大小与码流中设置的字体大小和窗口高成正比例变化，与窗口宽的大小无关；

温度信息，默认关闭，部分温度信息支持旋转和电子放大，测温抓图暂支持软解，新增工业测温2.0版本显示效果；

图片叠加默认关闭，支持软解、7.3.7.X版本开始支持硬解码，图片叠加不支持电子放大、旋转；

智能信息抓图接口暂只支持软解码下的火点和测温信息；

私有信息抓图接口暂支支持软解码下的火点和测温信息；

私有信息如pos叠加信息、船舶私有信息，码流的后半段有次私有信息，前半段没有，当播放到后半段后出现该信息叠加到画面后，再定位到前面也是会叠加的，因此这些私有信息没有发空包取消显示的机制；

工业2.0测温的普通测温和专家测温中，最高温和最低温光标颜色固定（最高温红色，最低温绿色）。温度信息子图颜色按照dsp传递过来的报警状态和颜色值设定。普通测温中，如果左上角显示平均温，固定用绿色。（工业测温2.0的抓图后徐使用d3d11显示抓图-老的测温抓图后续不再增加功能）。

不支持第一代火点信息显示。

第一代火点图片如下：

第二代火点图片如下,如下图所示可以显示最高温度以及区域信息：

See Also

PlayM4_Play PlayM4_Stop

PlayM4_RenderPrivateData PlayM4_SetOverlayPriInfoFlag


PlayM4_SetOverlayPriInfoFlag

智能信息抓图

BOOL PlayM4_SetOverlayPriInfoFlag(
  LONG     nPort,
  int      nIntelType,
  BOOL     bTrue
);

Parameters

nPort
[in] 播放通道号
nIntelType
[in] 内部类型，按位表示，每一位表示一种私有数据类型
enum _PLAYM4_PRIDATA_RENDER{
  PLAYM4_RENDER_ANA_INTEL_DATA    = 0x00000001, //智能分析
  PLAYM4_RENDER_MD                = 0x00000002, //移动侦测
  PLAYM4_RENDER_ADD_POS           = 0x00000004, //POS信息后叠加
  PLAYM4_RENDER_ADD_PIC           = 0x00000008, //图片叠加
  PLAYM4_RENDER_FIRE_DETCET       = 0x00000010,  //热成像信息
  PLAYM4_RENDER_TEM               = 0x00000020  //温度信息
}PLAYM4_PRIDATA_RENDER
bTrue
[in] 是否显示

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口适用于带有智能信息的码流，若无智能信息的码流则调用此接口没有效果。

nIntelType 暂时只支持测温信息抓图（0x20），其他的0x1-0x10暂不支持。

暂时只支持测温信息（0x20）（热成像0x10表示火点）,64位系统已经支持。

测温抓图暂时只有软解有效；硬解码抓图无法叠加。

See Also

PlayM4_Play PlayM4_Stop


PlayM4_GetStreamAdditionalInfo*

播放库SDK编程指南

PlayM4_GetStreamAdditionalInfo

获取当前显示帧PTZ信息。

BOOL PlayM4_GetStreamAdditionalInfo(
  LONG    lPort,
  LONG    lType,
  BYTE    *pInfo,
  LONG    *plLen
);

Parameters

lPort
[in] 播放通道号
lType
[in] 需要获取的数据类型：1- 获取PTZ信息
pInfo
[in][out] 数据信息指针
plLen
[in][out] 数据长度

Return Values

成功返回TRUE；失败返回FALSE，获取错误码调用PlayM4_GetLastError。

Remarks

数据类型为1表示获取当前显示帧PTZ信息，获取的当前信息是以特定结构体形式存储在pInfo内，plLen返回长度信息。

此接口适用于球机设备生成的码流文件，调用方法：先传入参数pInfo = null，此时可以获取出需要分配的内存长度plLen；然后根据上次调用接口获取的内存长度申请内存，传入plLen，再次调用此接口即可从pInfo获取需要的信息。


PlayM4_SetAdditionDataCallBack*

播放库SDK编程指南

PlayM4_SetAdditionDataCallBack

私有数据回调函数。

BOOL PlayM4_SetAdditionDataCallBack(
  LONG                 lPort,
  DWORD                nSyncType,
  AdditionDataCBFun    fAdditionDataCBFun,
  void                 *pUser
);

Parameters

lPort
[in] 播放通道号
nSyncType
[in] 同步类型
fAdditionDataCBFun
[in] 私有数据回调函数
pUser
[in] 用户指针

Callback Function

typedef void(CALLBACK *AdditionDataCBFun)(
  long             nPort,
 pstAddDataInfo    *pstAddDataInfo,
  void             *pUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
pstAddDataInfo
[out] 私有数据指针
pUser
[out] 用户指针

Return Values

成功返回TRUE；失败返回FALSE，获取错误码调用PlayM4_GetLastError。

Remarks

仅仅适用于有私有数据（智能信息）的码流。


PlayM4_SkipErrorData

码流错误直接跳至下一关键帧

BOOL PlayM4_SkipErrorData(
  LONG    nPort,
  BOOL    bSkip
);

Parameters

nPort
[in] 播放通道号
bSkip
[in] TRUE 码流错误时会直接跳下一个关键帧解码；FALSE 寻找下一帧数据解码

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

如果在码流有错误的情况下，不允许出现花屏，建议可以设置成TRUE。


PlayM4_SetRunTimeInfoCallBackEx

设置实时信息回调函数。

int PlayM4_SetRunTimeInfoCallBackEx(
  LONG                nPort,
  LONG                nModule,
  RunTimeInfoCBFun    fRunTimeInfoCBFun,
  void*               pUser
);

Parameters

nPort
[in] 播放通道号
nModule
[in] 出错模块
nModule宏定义 | 宏定义值 | 类型含义
PLAYM4_SOURCE_MODULE | 0 | 数据源模块
PLAYM4_DEMUX_MODULE | 1 | 解析模块
PLAYM4_DECODE_MODULE | 2 | 解码模块
PLAYM4_RENDER_MODULE | 3 | 渲染模块
fRunTimeInfoCBFun
[in] 实时信息回调函数
pUser
[in] 用户数据

Callback Function

typedef void(CALLBACK *RunTimeInfoCBFun)(
  long            nPort,
  RunTimeInfo*    pstRunTimeInfo,
  void*           pUser
);

Callback Function Parameters

nPort
[out] 播放通道号
pstRunTimeInfo
[out] 实时信息
pUser
[out] 用户数据

Return Values

成功返回非0；失败返回0。获取错误码调用PlayM4_GetLastError。

Remarks

当硬解码返回错误时，回调会通知应用层，应用层需要关闭这路硬解码，再开启软解。

See Also

PlayM4_GetDecodeEngine

PlayM4_SetRunTimeInfoCallbackType


PlayM4_SetRunTimeInfoCallbackType

选择解码或显示回调中是回调绝对时间戳（帧号）还是相对时间戳（帧号）。

int PlayM4_SetRunTimeInfoCallbackType(
  int                nPort,
  int                nModule,
  unsigned int    nType,
  int               nFlag
);

Parameters

nPort
[in] 播放通道号
nModule
[in]回调模块选择，0 表示默认解码回调和显示回调 1：表示解码回调，2：表示显示回调；
nType
[in] 回调绝对时间戳（帧号）还是相对时间戳（帧号）的类型设置，0：表示回调相对时间戳和相对帧号 1: 表示回调绝对时间戳和绝对帧号;
nFlag
[in] 赋值为0：表示清除，为1则进行回调

Callback Function

typedef void(CALLBACK *RunTimeInfoCBFun)(
  long            nPort,
  RunTimeInfo*    pstRunTimeInfo,
  void*           pUser
);

Callback Function Parameters

nPort
[out] 播放通道号
pstRunTimeInfo
[out] 实时信息
pUser
[out] 用户数据

Return Values

成功返回非0；失败返回0。获取错误码调用PlayM4_GetLastError。

Remarks

1、SetRunTimeInfoCallBackEx接口，nErrorCode类型6改为类型8；以后扩展方式 16、32、64，且从8开始消息默认关闭不发送。

2、新增实时消息控制接口，控制从8以后的消息，支持从8开始后消息，拼接模式 8|16|32 这种方式，上层主动选择接受类型。

3、nType可以通过或的方式将类型传入，nFlag表示清除（为0）或者进行回调（非0）；

4、 默认解码或者显示回调给出去的时间戳或者帧号为相对值；显示回调是没有帧号回调的，所以显示回调下 0：表示回调相对时间戳 1: 表示回调绝对时间戳。

5、音频无绝对时间戳回调，设置实际不起效。

See Also

PlayM4_SetRunTimeInfoCallBackEx


PlayM4_SR_SetConfig

鹰眼参数设置。

BOOL PlayM4_SR_SetConfig(
  LONG      lPort,
  int       nCfgType,
  void     *pValue
);

Parameters

lPort
[in] 播放通道号
nCfgType
[in] 鹰眼类型
nCfgType宏定义 | 宏定义值 | 类型含义
CFG_DISPLAY_EAGLE_PARAMS | 0x498 | 鹰眼显示参数
CFG_DISPLAY_MODEL_MODE | 0x499 | 鹰眼显示模式
pValue
[in] 第三个参数 为 PLAYM4SRMODELMODE结构体，具体示例代码如下所示：

Return Values

成功返回TRUE；失败返回FALSE，获取错误码调用PlayM4_GetLastError。

Remarks

7.3.6之前的版本需要先开硬解码，如7.3.6及其以后版本则支持软解鹰眼，则可能不先开启硬解码。

当前版本nCfgType只支持CFG_DISPLAY_MODEL_MODE。

示例代码

示例：鹰眼模块流程

    PlayM4_SetDecodeEngine(nPort, HARD_DECODE_ENGINE);//需要先开硬解码
    int iEagleType = CFG_DISPLAY_MODEL_MODE; // 全部渲染
    PLAYM4SRMODELMODE stParam;
    stParam.emTextureMode = PLAYM4_TEXTURE_DOUBLE;//双面贴纹理
    stParam.ulDisplayType = PLAYM4_MODEL_SOLID;
    stParam.nTransformMode = 0;
    stParam.emModelType = PLAYM4_MODELTYPE_EAGLE_EYE;
    stParam.bModelMode = true;
    PlayM4_SR_SetConfig(nPort, iEagleType, (void*)&stParam);

See Also

PlayM4_SR_Rotate

PlayM4_SR_Capture


PlayM4_SR_Rotate

设置鹰眼旋转参数。

BOOL PlayM4_SR_Rotate(
  LONG                       lPort,
  PLAYM4SRTRANSFERPARAM     *pstRotateParam
);

Parameters

lPort
[in] 播放通道号
pstRotateParam
[in] 旋转参数结构体指针

Return Values

成功返回TRUE；失败返回FALSE，获取错误码调用PlayM4_GetLastError。

Remarks

旋转参数是应用层（客户端）获取鼠标移动的距离，然后转换为角度，传给播放库的接口。有一个映射关系，播放窗口的宽度映射X轴2π（360度全景），播放窗口的高度映射Y轴2π（360度全景），因此调整的角度 = 2π * 鼠标沿X（Y）轴移动的距离 / 播放窗口的宽（高）度值。主要设置如下pstRotateParam结构体的参数。

当前为鹰眼田状时，则不支持旋转参数。

鹰眼旋转次数nTransformCount旋转次数暂无意义，每次调用接口默认旋转一次。

See Also

PlayM4_SR_SetConfig


PlayM4_GetEngineSupport

获取设备硬解码和渲染能力集。

BOOL PlayM4_GetEngineSupport(
  LONG              nPort,
  ENGINESUPPORT*    pstEngineSupport
);

Parameters

nPort
[in] 播放通道号
pstEngineSupport
[out] 硬解码和渲染支持能力集

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口在PlayM4_GetPort之后调用。

See Also

PlayM4_GetPort PlayM4_FreePort
PlayM4_SetDecodeOrDisplayMode PlayM4_GetDecodeOrDisplayMode


PlayM4_SetD3DPostProcess

d3d11图像后处理，设置参数。

BOOL PlayM4_SetD3DPostProcess(
  LONG                nPort,
  PLAYM4PostProcType nPostType,
  float              fValue
);

Parameters

nPort
[in] 播放通道号
nPostType
[in]D3D图像后处理类型，详见Remarks说明
fValue
[in] fValue

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口暂只支持d3d11渲染后处理，Play之后调用。

D3D图像后处理类型，如下表所示：

D3D图像后处理类型 | 宏定义值 | 说明
PLAYM4_PPT_BRIGHTNESS | 0x1 | 亮度，取值范围[-1.0,1.0]
PLAYM4_PPT_HUE | 0x2 | 色度，取值范围[0.0,1.0]（0.166累加为一种颜色变化及0和1为同一种颜色）
PLAYM4_PPT_SATURATION | 0x3 | 饱和度，取值范围[-1.0,1.0]
PLAYM4_PPT_CONTRAST | 0x4 | 对比度，取值范围[-1.0,1.0]
PLAYM4_PPT_SHARPNESS | 0x5 | 锐度，取值范围[0.0,1.0]

See Also

PlayM4_GetPort PlayM4_FreePort

PlayM4_SetDecodeOrDisplayMode

PlayM4_GetD3DPostProcess


PlayM4_GetD3DPostProcess

d3d11图像后处理,获取参数。

BOOL PlayM4_GetD3DPostProcess(
  LONG             nPort,
 PLAYM4PostProcType    nPostType,
  float*           fValue
);

Parameters

nPort
[in] 播放通道号
nPostType
[in]D3D图像后处理类型，详见Remarks说明
fValue
[out] fValue

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口暂只支持d3d11渲染后处理，Play之后调用。

D3D图像后处理类型，如下表所示：

D3D图像后处理类型 | 宏定义值 | 说明
PLAYM4_PPT_BRIGHTNESS | 0x1 | 亮度，取值范围[-1.0,1.0]
PLAYM4_PPT_HUE | 0x2 | 色度，取值范围[0.0,1.0]（0.166累加为一种颜色变化及0和1为同一种颜色）
PLAYM4_PPT_SATURATION | 0x3 | 饱和度，取值范围[-1.0,1.0]
PLAYM4_PPT_CONTRAST | 0x4 | 对比度，取值范围[-1.0,1.0]
PLAYM4_PPT_SHARPNESS | 0x5 | 锐度，取值范围[0.0,1.0]

See Also

PlayM4_GetPort PlayM4_FreePort

PlayM4_SetDecodeOrDisplayMode

PlayM4_SetD3DPostProcess


PlayM4_SetConfigFontPath

设置D3D11渲染时(D3D9渲染时设置实际无效)字符叠加的字体库路径。

BOOL PlayM4_SetConfigFontPath(
  LONG             nPort,
  char*           pFontPath
);

Parameters

nPort
[in] 播放通道号
nPostType
[out]D3D图像后处理类型
fValue
[in] fValue

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口暂只支持d3d11渲染后处理，PlayM4_OpenFile之后,PlayM4_Play之前调用。

设置D3D11渲染时(D3D9渲染时设置实际无效)字符叠加的字体库路径,如不设置则采用默认字体库，显示私有智能信息抓图中字体显示。

默认为宋体：C:\\Windows\\Fonts\\SIMSUN.TTC。

支持西文(utf8字符集-非中文字符集)字符路径按照utf8字符格式传入播放库，能够打开文件进行播放。

See Also

PlayM4_GetPort PlayM4_FreePort

PlayM4_SetDecodeOrDisplayMode PlayM4_GetDecodeOrDisplayMode


常见问题解答

播放库SDK开发使用手册

关于流模式接口

Question 1  送入到播放库PlayM4_OpenStream接口报错

Answer 1

1.检查参数是否正确，调用接口PlayM4_OpenStream ，需要确认送入正确的文件头（通过网络SDK中的实时流回调函数中获取的NET_DVR_SYSHEAD， 或者板卡中编码回调函数中获取的PktSysHeader类型的即为正确的文件头内容以及文件头长度）；

2.调用失败后，若返回错误码是PLAYM4_ALLOC_MEMORY_ERROR，说明内存不足，可以查看pc当前内存情况使用情况排查；

3.此路流数据操作结束后，可以调用PlayM4_CloseStream 接口关闭流回收系统资源；PlayM4_CloseStream和PlayM4_OpenStream需要配对出现。

流模式预览

Question 2  实时流预览有卡顿

Answer 2

1.检查数据是否流畅，若数据不流畅则检查网络部分；

2.在运行中键入dxdiag，在显示tag页面中确认显示驱动是否打开，如无法打开则根据显卡型号和操作系统，更新匹配的显卡驱动；

3.检查使用的时钟类型是否是高精度的，若是高精度时钟，建议使用PlayM4_SetTimerType 将时钟类型设置为TIMER_2；

4.由于不同的分辨率对PC的性能要求不一样，如高清分辨率对PC性能要求比较高，多路高清实时预览时可能会有卡顿现象，此时可以适当降低预览的路数；

5.检查视频当前的分辨率，缓冲区若开的太小，则可能送入数据到播放库缓冲区PlayM4_InputData 满，此时需要重复送入未送成功的数据;

建议：若为4CIF分辨率，则建议PlayM4_OpenStream 缓冲开到1.5M到2M，1.5M即1.5 * 1024 *1024。若720P则建议开到3~4M；若1080P则建议开大到6M左右；

6.建议检查PlayM4_SetDisplayBuf ，设置为15个节点即可；

7.可以将数据保存下来用播放器验证，若播放卡顿，则确认在网络部分是否丢数据，若播放正常则检查送数据部分是否正常。

Question 3  实时流预览不显示图像

Answer 3

1.确认是否有正确的数据送入到播放库缓冲，且调用过PlayM4_Play 开始解码；

2.确认是否注册了解码回调不显示的回调函数PlayM4_SetDecCallBack；

3.确认是否可以正常抓取到图片；若不能抓图成功则转1，若能抓图则转4；

4.抓图成功，则连续抓图，若图片随场景和OSD有变化，则表示数据正常，则检查显示的窗口句柄是否正确；

5.可以将需要解码的数据保存为本地文件，然后用播放器进行播放验证，若能播放则转步骤6，若不能播放则转步骤7；

6.若可以正常播放，则检查PlayM4_InputData送数据部分是否正确；

7.若不能正常播放，则检查数据码流是否正确，若是标准码流则可以用Elecard或者VLC等标准第三方解码器进行验证；若第三方的解码器可以解码则可以将测试码流发给我们分析；若第三方的解码器不能解码则检查是否有网络丢包的现象；

8.如果实时码流是RTP封装的码流，则最好提供网络抓包文件，或者如下格式：4字节RTP包的长度+RTP数据包保存，然后发给我们确认。

Question 4  实时流预览延时

Answer 4

1.一般设备延时在100到200ms之间，延时和网络的流畅性有很大关系。如在全帧率下延时正常，而在低帧率情况下比较明显，可以反馈给我们确认。6.2.2.2版本以后，延时会达到最小；

2.如果是多路预览才出现延时的现象，则请查看当前CPU的使用情况，可能是CPU已经达到极限（85%以上），无法支持这么多路的实时流解码，可以尝试减少几路播放，或者提高硬件性能；

3.若客户使用的是客户端软件，则可以设置为流畅性好，若是调用SDK进行二次开发，则可以调用接口PlayM4_SetDisplayBuf设置解码后缓冲区帧数；

4.确定接口PlayM4_SetStreamOpenMode设定为STREAM_REALTIME；

5.确定网络良好，收发网络包延时较小。

流模式播放

Question 5  流模式下快放

Answer 5

流模式下支持码流的快放，但是对当前送入数据的码流数据和网络环境是有要求的，比如若正常情况下，视频帧率为25帧的码流1倍速快放，若需要2倍速快放， 则需要的数据量是1倍速播放的2倍才能达到需求。

Question 6  流模式下倒放

Answer 6

流模式下支持码流的倒放，支持本地录像文件以流模式送入数据倒放，若需要实现倒放则对送入数据是有要求的，必须送入的数据是一个GOP，且是逆序送入的数据。具体可以参考PlayM4_ReversePlay接口说明。

Question 7  实时流预览显示第一帧画面比较慢

Answer 7

在低帧率下比较常见，检查第一帧是否I帧，若第一帧不是I帧则需要到I帧才能正常解码，所以时间可能比较长。

关于加密码流

Question 8  加密码流无法正常播放

Answer 8

1.确认码流是否是基线的码流，若是定制的码流则需要联系分公司确认加密方式和订单号；

2.确认密钥和调用设置密钥接口被正确调用，且密钥正确PlayM4_SetSecretKey；

3.可以将码流发给我们确认。

关于抓图

Question 9  如何将捕获的图片保存在内存中以供后续处理

Answer 9

在开始正常解码播放PlayM4_Play以后，可以通过播放库函数PlayM4_GetBMP 和PlayM4_GetJPEG 把图片保存在内存中。

Question 10 如何抓取每帧图像的BMP图片

Answer 10

若需要抓图BMP图片，则需要调用PlayM4_GetBMP或者PlayM4_ConvertToBmpFile; 其间区别是PlayM4_GetBMP接口在PlayM4_Play成功之后调用，但是不能在回调函数中调用此接口；PlayM4_ConvertToBmpFile接口可以在回调函数中调用， 生成BMP文件。使用需要注意申请保存BMP文件内存大小一般申请的内存大小图像宽*高*5，因RGB32数据是4倍的宽高，而bmp图像还有一个BMP文件头，因此简单起见这种方式分配内存，实际图像数据在pBmpSize返回，返回的数据直接写文件即可得到一幅bmp图像（RGB32)。

Question 11 如何抓取JPEG图片

Answer 11

抓图JPEG图片可以调用，则需要调用PlayM4_GetJPEG 或者 PlayM4_ConvertToJpegFile; 其间区别是 PlayM4_GetJPEG 接口在PlayM4_Play成功之后调用，但是不能在回调函数中调用此接口；PlayM4_ConvertToJpegFile接口可以在回调函数 中调用，生成JPEG文件。申请保存JPEG内存大小，建议申请的内存大小图像 宽*高*3/2，虽然jpeg压缩后小于这个设定的值，但是因可以设置jpeg图像质量，无法确定压缩比例。实际图像数据在pJpegSize 返回，返回的数据直接写文件即可得到一幅jpeg图像。

Question 12  如何保存每帧解码的视频图片

Answer 12

1.成功解码显示状态下，可以通过 PlayM4_SetDisplayCallBack 回调函数中获取的每帧数据即为解码成功后送入到显卡做显示的数据，可以在回调函数中调用接口 PlayM4_ConvertToBmpFile 或者 PlayM4_ConvertToJpegFile 接口保存图片。

2.若解码未显示，则可以调用PlayM4_Play接口此时，显示窗口句柄置为NULL，即可只解码不显示图像，此时可以调用解码回调函数 PlayM4_SetDecCallBack 接口获取解码后每帧数据。

关于播放声音问题

Question 13  音频播放卡顿，视频播放流畅

Answer 13

确认音频数据是否均匀。

Question 14  复合流文件，播放音频时画面卡顿，不播放音频。则画面正常

Answer 14

一般可能存在于低帧率文件，或者音频分布不均匀导致。

Question 15 播放文件，无法听到声音

Answer 15

1.需要确定码流中是否有音频数据，音频源是有声音的。

2.音频封装相关表示类型的字段不符合规定，如RTP封装payload错误，PS封装stream type错误等。

3.音频未加密而在封装层为加密，在播放库6.2系列版本后开始关注音频加密字段。如果之前版本可以正常播放，之后版本不行，则可能是设备问题，需要和设备确认。

Question 16 关于PlayM4_Sound(Share)返回值的问题

Answer 16

1.需要确定码流中是否有音频数据，若是纯视频码流，则该接口返回失败。

2.复合流中音频编码格式声明为0，则PlayM4_Sound返回失败，播放不了音频。

3.PlayM4_Sound必须在PlayM4_Play之后调用。

关于文件模式问题

Question 17  实时流播放正常，文件播放有快放现象

Answer 17

确认码流中帧率或者时间戳是是否正常；另外可以检查是否有被抽帧的情况。

Question 18  文件打开失败

Answer 18

检查保存文件时是否有保存正确的文件头（设备网络SDK的实时流回调函数中码流类型为NET_DVR_SYSHEAD，或者编码卡编码回调函数中当前帧类型为PktSysHeader）；文件是否小于4K或者大于4G；或者数据错误；或者没有关键帧（视频解码需要依赖于关键帧）。

Question 19  文件模式如何定位

Answer 19

是否成功创建文件索引；若索引创建成功，检查设定的定位参数（如时间或者帧号）是否正确；

Question 20  PlayM4_SetCurrentFrameNum定位不准确

Answer 20

是否成功创建文件索引；文件帧号是否乱序；

关于解码回调问题

Question 21  如何获取多路数据流解码后的数据

Answer 21

1.一路数据对应一个播放库Port（通过PlayM4_GetPort 获取）;

2.调用PlayM4_SetStreamOpenMode 设定正确的播放模式；

3.送入这路数据对应的文件头PlayM4_OpenStream;

4.调用PlayM4_SetDecCallBack注册解码回调函数，获取解码后的数据；

5. 调用PlayM4_Play开始解码线程（若不需要显示图像，则可以将窗口句柄置为NULL）;

6.调用PlayM4_InputData 送入每路数据正确的数据；播放库支持多路并发解码，当前版本最多支持500路。

Question 22  实时流数据用解码回调有丢帧现象

Answer 22

1.实时录文件，先排除数据流是否有问题。

2.如果数据没有问题，注释掉解码回调里面所有的实现，查看是否还有丢帧情况。解码互调里面实现耗时比较多的操作，也有可能出现此类的问题。

3.请查看在实际调用过程中，检查 PlayM4_InputData是否有失败，若有失败，请尝试将数据重新送入，错误发生频率比较高，建议 PlayM4_OpenStream中设置缓冲区大小设置大一些。

Question 23  如何抓取RGB24数据

Answer 23

播放库抓图接口生成的BMP图片都是RGB32格式的，若需要获取RGB24格式数据则建议用解码回调函数 PlayM4_SetDecCallBack，获取解码后的每一帧YV12格式数据，然后自行转码为RGB24格式即可；

Question 24  有些码流解码回调函数中获取的每帧视频高度只有显示原来的一半

Answer 24

若原始图像分辨率是2CIF（PAL制为704*288，NTSC制为704*240），实际显示是按照PAL制704*576，NTSC制是704*480进行显示，而解码回调函数中获取的 是码流实际的视频分辨率，所以会出现这种情况。

Question 25  如何自己实现显示

Answer 25

通过解码回调函数 PlayM4_SetDecCallBack 回调函数获取到解码后的视频和音频数据后，视频部分可以用windowsAPI中的strectchbilt实现，或者用Directshow中的Render部分实现；或者DirectDraw等方式实现；音频数据可以用windowsAPI函数实现。

Question 26  解码回调和抓图回调函数的区别

Answer 26

PlayM4_SetDecCallBack解码以后就会将数据回调给用户，解码多少帧数据即回调多少帧，而 PlayM4_SetDisplayCallBack是将解码后的视频数据送入到显卡中显示的数据回调给用户。则是按照一个播放的帧率来回调的，比如帧率为25帧/s，回调的时候，就会间隔大概40ms回调一帧数据。

Question 27  解码回调函数中获取连续三帧音频数据时标信息重复

Answer 27

这是播放库版本的问题，需要将播放库版本更新到最新版本。若需要得到准确的音频帧信息建议使用码流分析库SDK。

关于同步回放问题

Question 28  如何实现多个文件的同步回放

Answer 28

1.多个同步回放的文件必须有相同的时间戳片段;

2.在同步回放接口调用之前必须确认是否每个文件都有成功创建文档的索引；

3.同步回放的过程中可以通过定位接口 PlayM4_SetPlayedTimeEx 进行同步回放的定位。

关于倍帧问题

Question 29  调用倍帧接口没有效果

Answer 29

1.倍帧适用于帧率在20以上的码流，若帧率在20以下的码流则调用倍帧接口无效;

关于智能码流的问题

Question 30  显示智能信息目标框闪烁

Answer 30

1.可能是智能解析的目标框信息就有间隔性缺少的现象。

2.检查是否因时标问题导致部分智能信息未被同步上，如果是转封装的，排查SystemTransform.dll的问题，如果没有则是设备时标的问题，需要设备确认。

3.绘制过程中有问题。

关于智能码流的问题

Question 31  显示智能信息目标框闪烁

Answer 31

1.可能是智能解析的目标框信息就有间隔性缺少的现象。

Question 32  智能码流显示规则线和目标框没有显示

Answer 32

1.在播放库6.1.1.20之前的版本，不能解析新设备智能打包的码流，可以用新版本的播放库先测试确认一下。

2.非版本问题情况下，同上个问题的解答。

关于Android版本的播放库问题

Question 34  Android版本的播放库不能正常预览

Answer 33

1.Anroid版本的播放库只支持真机，不支持虚拟机；

2.建议在文档中已经测试过的anroid版本中使用；

关于iOS版本的播放库问题

Question 35  iOS版本的播放库不能正常预览

Answer 34

1.调用播放库PlayM4_Play接口在主线程调用；

2.模拟机和真机分别有对应版本，建议匹配使用；


播放库SDK

编程指南

V7.3.9.x


说明书指南

本说明书由前言、内容简介、SDK版本更新、编程导引、基本接口定义、帮助等部分组成。
“内容简介”中的“概述”部分介绍了SDK支持的功能。
“SDK版本更新”部分介绍了SDK各版本新增的功能及接口等信息。
“编程导引”部分给出了SDK主要模块的接口调用流程等。
“基本接口定义”部分包含了SDK所有接口函数和结构体的详细说明。
“帮助”部分罗列了一些常见问题的解答。


PlayM4_CloseStreamEx

播放库SDK编程指南

PlayM4_CloseStreamEx*

关闭流（以音视频分开输入方式）。

BOOL PlayM4_CloseStreamEx(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

不再支持此接口。

See Also

PlayM4_OpenStreamEx


PlayM4_GetCaps

播放库SDK编程指南

PlayM4_GetCaps*

测试播放所需系统功能。

int  PlayM4_GetCaps(
);

Parameters

无

Return Values

0~8位分别表示以下信息（位与是TRUE表示支持）;

以下是该接口可能返回的值

返回值 | 对应信息
SUPPORT_DDRAW | 支持DIRECTDRAW；如果不支持，则播放器不能工作。
SUPPORT_BLT | 显卡支持BLT操作；如果不支持，则播放器不能工作。
SUPPORT_BLTFOURCC | 显卡BLT支持颜色转换；如果不支持，播放器会使用软件方式作RGB转换。
SUPPORT_BLTSHRINKX | 显卡BLT支持X轴缩小；如果不支持，系统使用软件方式转换。
SUPPORT_BLTSHRINKY | 显卡BLT支持Y轴缩小；如果不支持，系统使用软件方式转换。
SUPPORT_BLTSTRETCHX | 显卡BLT支持X轴放大；如果不支持，系统使用软件方式转换。
SUPPORT_BLTSTRETCHY | 显卡BLT支持Y轴放大；如果不支持，系统使用软件方式转换。
SUPPORT_SSE | CPU支持SSE指令,Intel Pentium3以上支持SSE指令。
SUPPORT_MMX | CPU支持MMX指令集。

Remarks

如果显卡支持上面列出的显示功能，将会大大降低CPU利用率。如果显卡不支持放大缩小，建议将显示窗口的大小设置和解码图像的大小一致，例如解码后的图像是352*288（PAL）大小，则建议显示窗口也设置为352*288。

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

不再支持此接口。


PlayM4_GetCapsEx

播放库SDK编程指南

PlayM4_GetCapsEx*

获取指定显示设备的系统信息。

int PlayM4_GetCapsEx(
  DWORD    nDDrawDeviceNum
);

Parameters

nDDrawDeviceNum
[in] 指定显示设备的设备号，如果是0，则表示主显示设备。

Return Values

指定显示设备的系统信息，获取错误码调用PlayM4_GetLastError。

Remarks

V6.1.1.0版本及以后版本多屏显示可以自适应，该接口在6.2.0.x版本后不再起作用，无需调用。

不再支持此接口。

See Also

PlayM4_SetDDrawDevice

PlayM4_InitDDrawDevice PlayM4_ReleaseDDrawDevice

PlayM4_GetDDrawDeviceTotalNums


PlayM4_GetColorKey

播放库SDK编程指南

PlayM4_GetColorKey*

获取OVERLAY关键色。

COLORREF PlayM4_GetColorKey(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

颜色值，获取错误码调用PlayM4_GetLastError。

Remarks

不再支持此接口。


PlayM4_GetDDrawDeviceInfo

播放库SDK编程指南

PlayM4_GetDDrawDeviceInfo*

获取指定显卡和监视器信息。

BOOL PlayM4_GetDDrawDeviceInfo(
  DWORD              nDeviceNum,
  LPSTR              lpDriverDescription,
  DWORD              nDespLen,
  LPSTR              lpDriverName,
  DWORD              nNameLen,
  HMONITOR          *hhMonitor
);

Parameters

nDeviceNum
[in] 显示设备的设备号，如果是0，则表示主显示设备
lpDriverDescription
[in] 表示lpDriverDescription已分配空间的大小，单位byte
nDespLen
[in] 表示lpDriverName已分配空间的大小，单位byte
lpDriverName
[out] 显示设备的描述信息
nNameLen
[out] 显示设备的设备名
hhMonitor
[out] 显示设备使用的监视器句柄，通过Windows API 函数GetMonitorInfo，可以得到详细信息，供用户定位窗口位置

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

HMONITOR类型 ，当_WIN32_WINNT >= 0x0500时，在“windef.h”头文件中定义，否则在“Multimon.H”中定义，如果用户在编译过程中找不到该类型定义，可以包含相应的头文件。

V6.1.1.0版本及以后版本多屏显示可以自适应，该接口在6.2.0.x版本后不再起作用，无需调用。

不再支持此接口。

See Also

PlayM4_SetDDrawDevice


PlayM4_GetDDrawDeviceTotalNums

播放库SDK编程指南

PlayM4_GetDDrawDeviceTotalNums*

获取显示设备（显卡）个数。

DWORD PlayM4_GetDDrawDeviceTotalNums(
);

Parameters

无

Return Values

如果返回0，则表示系统中只有主显示设备；如果返回1，则表示系统中安装了多块显卡，但只有一块显卡与Windows桌面绑定。

返回其他值，则表示系统中与桌面绑定的显卡数目。在多显卡的系统中可以通过设置显示属性，而指定任意一块显卡作为主显示设备。获取错误码调用PlayM4_GetLastError。

Remarks

获得系统中与windows桌面绑定的总的显示设备数目（这里主要是指显卡）。

V6.1.1.0版本及以后版本多屏显示可以自适应，无需调用该函数。

不再支持此接口。

See Also

PlayM4_InitDDrawDevice PlayM4_ReleaseDDrawDevice

PlayM4_SetDDrawDevice PlayM4_SetDDrawDeviceEx


PlayM4_GetDecodeOrDisplayMode

获取硬解码引擎模式和渲染引擎模式。

BOOL PlayM4_GetDecodeOrDisplayMode(
  LONG             nPort,
  unsigned int*    pDecodeType,
  unsigned int*    pDisplayType
);

Parameters

nPort
[in] 播放通道号
pDecodeType
[out]获取解码类型；取值如下：1-DXVA-D3D9引擎(硬解码)
nDisplayEngine
[out] 获取渲染模式。取值如下：1-DDRAW,2-D3D9，3-D3D11-Text

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口在PlayM4_GetPort之后均可调用。

See Also

PlayM4_GetPort PlayM4_FreePort

PlayM4_SetDecodeOrDisplayMode


PlayM4_GetFileSpecialAttr

播放库SDK编程指南

PlayM4_GetFileSpecialAttr*

获取文件最后的时标和帧号。

BOOL PlayM4_GetFileSpecialAttr(
  LONG     nPort,
  DWORD   *pTimeStamp,
  DWORD   *pFileNum,
  DWORD   *nFileHeader
);

Parameters

nPort
[in] 播放通道号
pTimeStamp
[out] 文件结束时标
pFileNum
[out] 文件结束帧号
nFileHeader
[out] 文件头信息

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

得到文件最后的时标和帧号，在文件打开之后调用。与上个文件一起使用，用于文件拼接。

不再支持此接口。

See Also

PlayM4_GetOriginalFrameCallBack


PlayM4_GetOriginalFrameCallBack

播放库SDK编程指南

PlayM4_GetOriginalFrameCallBack*

获取原始帧数据回调函数。

BOOL PlayM4_GetOriginalFrameCallBack(
  LONG         nPort,
  BOOL         bIsChange,
  BOOL         bNormalSpeed,
  long         nStartFrameNum,
  long         nStartStamp,
  long         nFileHeader,
  CALLBACK    *funGetOrignalFrame,
  long         nUser
);

Parameters

nPort
[in] 播放通道号
bIsChange
[in] 是否要改变每帧的参数
bNormalSpeed
[in] 是否要以正常速度得到原始帧
nStartFrameNum
[in] 如果要改变原始帧帧号，则是此文件的开始帧号
nStartStamp
[in] 状态回调函数，如果要改变原始帧时标，则是此文件的开始时标
nFileHeader
[in] 文件头版本信息，如果版本不匹配，返回不成功
funGetOrignalFrame
[in] 原始帧回调函数

Callback Function

typedef void(CALLBACK *funGetOrignalFrame)(
  long       nPort,
 FRAME_TYPE *frameType,
  long       nUser
);

Callback Function Parameters

nPort
[out] 播放通道号
frameType
[out] 数据帧信息
nUser
[out] 用户数据
nUser
[in] 用户数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

创建得到原始数据的回调函数，可以改变每帧的时标和帧号，在文件打开之后调用，用于将两个文件拼接在一起。现在版本已经不支持，相关功能可以使用其他库来实现。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

不再支持此接口。

See Also

PlayM4_GetPictureSize


PlayM4_GetOverlayMode

播放库SDK编程指南

PlayM4_GetOverlayMode*

获取当前是否采用OVERLAY显示模式。

LONG PlayM4_GetOverlayMode(
  LONG     nPort
);

Parameters

nPort
[in] 播放通道号

Return Values

0表示没有使用OVERLAY；1：表示使用了OVERLAY表面；-1：表示调用失败PlayM4_GetLastError。

Remarks

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

不再支持此接口。

See Also

PlayM4_SetOverlayMode


PlayM4_GetPictureQuality

播放库SDK编程指南

PlayM4_GetPictureQuality*

取图像质量。

BOOL PlayM4_GetPictureQuality(
  LONG     nPort,
  BOOL    *bHighQuality
);

Parameters

nPort
[in] 播放通道号
bHighQuality
[out] 高质量，0表示低质量

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

不再支持此接口。

See Also

PlayM4_SetPicQuality PlayM4_Play


PlayM4_GetTimerType

播放库SDK编程指南

PlayM4_GetTimerType*

获取播放使用的定时器类型。

BOOL  PlayM4_GetTimerType(
  LONG      nPort,
  DWORD*    pTimerType,
  DWORD*    pReserved
);

Parameters

nPort
[in] 播放通道号
pTimerType
[out] TIMER_1或TIMER_2
pTimerType参数 | 对应信息
TIMER_1 | 多媒体时钟，一个进程中只能使用16个，时间精度高；
TIMER_2 | TIMER_2 是等待计时器，使用数目没有限制，但时间精度较低，不推荐在高倍速播放时使用。
pReserved
[out] 保留参数

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

不再支持此接口。

See Also

PlayM4_SetTimerType


PlayM4_InitDDraw

播放库SDK编程指南

PlayM4_InitDDraw*

初始化Direct表面。

BOOL  PlayM4_InitDDraw(
  HWND     hWnd
);

Parameters

hWnd
[in] 应用程序主窗口的句柄

Return Values

成功返回TRUE；失败返回FALSE；

Remarks

在使用vb,delphi开发时请注意，它们生成的对话框具有WS_CLIPCHILDREN窗口风格，必须去掉这种风格，否则显示画面会被对话框上的控件覆盖。

不再支持此接口。

See Also

PlayM4_RealeseDDraw


PlayM4_InitDDrawDevice

播放库SDK编程指南

PlayM4_InitDDrawDevice*

枚举系统中的显示设备。

BOOL PlayM4_InitDDrawDevice(
);

Parameters

无

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

V6.1.1.0版本及以后版本可以不用显式调用该函数。

不再支持此接口。

See Also

PlayM4_ReleaseDDrawDevice


PlayM4_InputAudioData

播放库SDK编程指南

PlayM4_InputAudioData*

输入音频流。

BOOL PlayM4_InputAudioData(
  LONG    nPort,
  PBYTE   pBuf,
  DWORD   nSize
);

Parameters

nPort
[in] 播放通道号
pBuf
[in] 缓冲区地址
nSize
[in] 缓冲区大小

Return Values

TRUE表示已经输入数据成功；FALSE 表示失败，数据没有输入到缓冲区。获取错误码调用PlayM4_GetLastError。

Remarks

输入音频流；打开声音之后才能输入数据。返回False是由于内部缓冲区满，建议客户暂停输入数据线程，再次输入数据，确保播放库不丢失数据。

我们建议：

1.在实时流情况下，因数据满而无法送入播放库，可以选择丢弃，后果是声音可能跳帧或者声音不连续，如果无法接受，则sleep几毫秒后，再尝试多送几次;

2.文件流回放模式下，数据满而导致无法送入播放库，需要不断尝试，直到PlayM4_InputData返回成功为止。

不再支持此接口。

See Also

PlayM4_InputVideoData


PlayM4_InputVideoData

播放库SDK编程指南

PlayM4_InputVideoData*

输入视频流。

BOOL PlayM4_InputVideoData(
  LONG       nPort,
  PBYTE      pBuf,
  DWORD      nSize
);

Parameters

nPort
[in] 播放通道号
pBuf
[in] 缓冲区地址
nSize
[in] 缓冲区大小

Return Values

TRUE表示已经成功输入数据；FALSE 表示失败，数据没有输入到缓冲区。获取错误码调用PlayM4_GetLastError。

Remarks

输入视频流 (可以是复合流，但音频数据会被忽略)；打开流之后才能输入数据。返回False是由于内部缓冲区满，建议客户暂停输入数据线程，再次输入数据，确保播放库不丢失数据。

我们建议：

1.在实时流情况下，因数据满而无法送入播放库，可以选择丢弃，后果是画面可能跳帧或者花屏，如果无法接受，则sleep几毫秒后，再尝试多送几次;

2.文件流回放模式下，数据满而导致无法送入播放库，需要不断尝试，直到PlayM4_InputData返回成功为止。

不再支持此接口。

See Also

PlayM4_InputAudioData


PlayM4_MotionFlow

倍帧。

BOOL PlayM4_MotionFlow(
  LONG     nPort,
  DWORD    dwAdjustType
);

Parameters

nPort
[in] 播放通道号
dwAdjustType
[in] 倍帧类型，取值详见“Remarks”说明

Remarks

倍帧适用于帧率20以上的码流，若帧率在20以下的码流调用倍帧接口无效果。目前不支持GPU倍帧，只支持CPU倍帧。

Win64位版本播放库不支持该接口。

不同的dwAdjustType值代表不同的含义：

dwAdjustType宏定义 | 宏定义值 | 含义
MOTION_FLOW_NONE | 0 | 不开启倍帧
MOTION_FLOW_CPU | 1 | CPU倍帧
MOTION_FLOW_GPU | 2 | GPU倍帧

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_Play PlayM4_Stop


PlayM4_OpenStreamEx

播放库SDK编程指南

PlayM4_OpenStreamEx*

打开流（以音视频分开输入方式）。

BOOL PlayM4_OpenStreamEx(
  LONG     nPort,
  PBYTE    pFileHeadBuf,
  DWORD    nSize,
  DWORD    nBufPoolSize
);

Parameters

nPort
[in] 播放通道号
pFileHeadBuf
[in] 文件头数据
nSize
[in] 文件头长度
nBufPoolSize
[in] 设置播放库中存放数据流的缓冲区大小。范围是SOURCE_BUF_MIN~ SOURCE_BUF_MAX

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

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

文件方式播放下，不能调用PlayM4_CloseStream；流播放下，不能调用PlayM4_CloseFile接口。流开关接口和文件开关接口不能交叉使用。

不再支持此接口。

See Also

PlayM4_CloseStreamEx


PlayM4_RealeseDDraw

播放库SDK编程指南

PlayM4_RealeseDDraw*

释放Direct表面。

BOOL  PlayM4_RealeseDDraw(
);

Parameters

无

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

1.1版本以上SDK不需要调用。

不再支持此接口。

See Also

PlayM4_InitDDraw


PlayM4_ReleaseDDrawDevice

播放库SDK编程指南

PlayM4_ReleaseDDrawDevice*

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

Void PlayM4_ReleaseDDrawDevice(
);

Parameters

无

Return Values

无

Remarks

V6.1.1.0版本及以后版本可以不用显式调用该函数。

不再支持此接口。

See Also

PlayM4_InitDDrawDevice


PlayM4_RigisterDrawFun

画图回调。

BOOL PlayM4_RigisterDrawFun(
  LONG       nPort,
  DrawFun    fDrawFun,
  LONG       nUser
);

Parameters

nPort
[in] 播放通道号
fDrawFun
[in] 画图回调函数
nUser
[in] 用户数据

Callback Function

typedef void(CALLBACK *DrawFun)(
  Long    nPort,
  HDC     hDc,
  Long    nUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
hDc
[out] 表面设备上下文，可以像操作显示窗口客户区DC那样操作它
nUser
[out] 用户数据，就是上面输入的用户数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

拼写错误，与PlayM4_RegisterDrawFun相同，不建议使用。

See Also

PlayM4_RegisterDrawFun


PlayM4_SetAudioCallBack

播放库SDK编程指南

PlayM4_SetAudioCallBack*

音频解码回调。

BOOL PlayM4_SetAudioCallBack(
  LONG        nPort,
  funAudio    fDecAudioFun,
  long        nUser
);

Parameters

nPort
[in] 播放通道号
funAudio
[in] 音频解码回调函数，若不需要回调函数则置为NULL，否则不能为NULL
nUser
[in] 用户数据

Callback Function

typedef void(CALLBACK *funAudio)(
  long    nPort,
  char    *pAudioBuf,
  long    nSize,
  long    nStamp,
  long    nType,
  long    nUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
pAudioBuf
[out] wave格式音频数据指针
nSize
[out] 音频数据长度
nStamp
[out] 时标(ms)
nType
[out] 音频类型T_AUDIO16, 采样率16khz，单声道，每个采样点16位，具体以解码出音频的具体信息为准
nUser
[out] 用户数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

不再支持此接口。

See Also

PlayM4_SetDecCallBack


PlayM4_SetDDrawDevice

播放库SDK编程指南

PlayM4_SetDDrawDevice*

设置播放窗口使用的显示设备。

BOOL PlayM4_SetDDrawDevice(
  LONG     nPort,
  DWORD    nDeviceNum
);

Parameters

nPort
[in] 播放通道号
nDeviceNum
[in] 显示设备的设备号，如果是0，则表示使用主显示设备

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置播放窗口使用的显卡。注意该窗口必须在该显卡所对应的监视器上才能显示播放画面。

V6.1.1.0版本及以后版本多屏显示可以自适应，无需调用该函数。

不再支持此接口。

See Also

PlayM4_SetDDrawDeviceEx


PlayM4_SetDDrawDeviceEx

播放库SDK编程指南

PlayM4_SetDDrawDeviceEx*

设置播放窗口使用的显示设备（多显示区域）。

BOOL PlayM4_SetDDrawDeviceEx(
  LONG    nPort,
  DWORD   nRegionNum,
  DWORD   nDeviceNum
);

Parameters

nPort
[in] 播放通道号
nRegionNum
[in] 显示区域

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置播放窗口使用的显卡，功能同PlayM4_SetDDrawDevice。为支持PlayM4_SetDisplayRegion而增加一个参数。不再支持，内部自适应多屏显示。

不再支持此接口。

See Also

PlayM4_SetDDrawDevice

PlayM4_GetDDrawDeviceTotalNums


PlayM4_SetDecCallBack

解码回调。

BOOL PlayM4_SetDecCallBack(
  LONG     nPort,
  DecCBFun fDecCBFun
);

Parameters

nPort
[in] 播放通道号
fDecCBFun
[in] 解码回调函数指针，若不需要调用回调函数则置为NULL，否则不能为NULL

Callback Function

typedef void(CALLBACK *DecCBFun)(
  long        nPort,
  char        *pBuf,
  long        nSize,
 FRAME_INFO  *pFrameInfo,
  long        nReserved1,
  long        nReserved2
);

Callback Function Parameters

nPort
[out] 播放器通道号
pBuf
[out] 解码后的音视频数据指针
nSize
[out] 解码后的音视频数据pBuf的长度
pFrameInfo
[out] 图像和声音信息结构体指针
nReserved1
[out] 保留参数
nReserved2
[out] 保留参数

Remarks

设置回调函数，替换播放器中的显示部分，由用户自己控制显示，该函数在PlayM4_Play之前调用，在PlayM4_Stop时自动失效，下次调用PlayM4_Play之前需要重新设置。

解码部分不控制速度，只要用户从回调函数中返回，解码器就会解码下一部分数据。

这个功能的使用需要用户对视频显示和声音播放有足够的了解，否则请慎重使用，有关知识请参阅directx开发包。

当前解码的视频数据格式为YV12，音频解码格式为PCM。调用此回调函数后，则视频图像无显示。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

视频帧解码回调和显示回调出去的YUV数据外面只能读操作进行拷贝，然后将回调返回，不能直接进行写操作来改变给出去YUV指针里面的yuv数据。

解码回调和显示回调出去后；用户需要及时返回；如果等到上层所有操作都结束再返回，可能会影响到播放库主线程执行。

建议不再使用此接口。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_SetDecCallBackMend PlayM4_SetDisplayCallBack

PlayM4_SetDecCBStream PlayM4_SetDecodeFrameType

PlayM4_SetDecCallBackExMend


PlayM4_SetDecodeEngine*

设置硬解码。

BOOL PlayM4_SetDecodeEngine(
  LONG     nPort,
  DWORD    nDecodeEngine
);

Parameters

nPort
[in] 播放通道号
nDecodeEngine
[in] 解码类型，如下表所示：

nDecodeEngine类型宏定义 | 宏定义值 | 类型含义
SOFT_DECODE_ENGINE | 0 | 软解码
HARD_DECODE_ENGINE | 1 | 硬解码

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 只支持流模式硬解码，不支持本地文件方式硬解码。该接口必须在PlayM4_OpenStream之后调用，如果想要切换软/硬解，则必须先调用PlayM4_CloseStream和PlayM4_OpenStream重新开流。
  • 调用该接口前可以调用PlayM4_SetRunTimeInfoCallBack设置硬解码错误信息回调函数，硬解码发生严重错误或资源不足时，播放库通过该回调函数通知上层，上层收到错误信息后应手动切换至软解码。
  • 启用硬解码后，不支持以下接口： PlayM4_GetDisplayBuf、PlayM4_SetDisplayBuf（不支持设置15个显示节点）、PlayM4_SetDisplayCallBack、PlayM4_ResetBuffer(缓冲区类型：BUF_VIDEO_RENDER、BUF_AUDIO_RENDER)，同时不支持倒放相关功能接口，也不支持智能信息显示。
  • 由于硬解码库在DXVA2上开发，只有在操作系统vista及以上、显卡支持dxva2.0的环境下，才可以开启硬解码功能。同时，由于显卡能力的限制，硬解码长时间多路轮训预览有稳定性风险，在测试中发现A卡性能比较稳定，因此选择硬解码时显卡建议使用A卡。
  • 由于接口调整，之前版本若使用了该接口，更新7.3.0.40版本后，应用层需要进行重新编译。
  • 原先的硬解码接口（PlayM4_SetDecodeEngine）调整为不建议使用，取代它的接口为PlayM4_SetDecodeEngineEx。
  • 建议不再使用此接口。

See Also

PlayM4_OpenStream PlayM4_CloseStream
PlayM4_Play PlayM4_Stop
PlayM4_InputData
PlayM4_SetDecodeEngineEx


PlayM4_SetDecodeERC

设置软解码Intra码流的差错隐藏等级。

BOOL PlayM4_SetDecodeERC(
  LONG             nPort,
  unsinged int           nLevel
);

Parameters

nPort
[in] 播放通道号
nLevel
[in] 解码差错隐藏等级

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

此接口只对H.264和H.265有效，PlayM4_GetPort之后调用。

Intra码流内部默认差错隐藏等级为1；用户可以不设置；

1-4的4个等级开启会增加解码内存（大概为1帧YUV的数据大小，即w*h/3/2），4等级开启会增加解码性能消耗。

Intra码流解码需要配合调用PlayM4_SkipErrorData接口使用，如PlayM4_SkipErrorData中bSkip设置为0，则解析不跳过冗余数据。

See Also

PlayM4_GetPort PlayM4_FreePort

PlayM4_SetDecodeOrDisplayMode


PlayM4_SetDecodeOrDisplayMode

设置解码模式或渲染模式。

BOOL PlayM4_SetDecodeOrDisplayMode(
  LONG            nPort,
  unsigned int    nDecodeType,
  unsigned int    nDisplayEngine
);

Parameters

nPort
[in] 播放通道号
nDecodeType
[in]解码类型；取值如下： 0-不设置硬解码模式使用库内默认值，1-DXVA-D3D9(硬解码）
nDisplayEngine
[in] 1-DDRAW,2-D3D9，3-D3D11。（渲染模式不支持nDisplayEngine设置0的模式）

Return Values

成功返回1；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

当nDecodeType为0但nDisplayType不为0时表示只设置渲染模式(一般为软解时切渲染引擎),nDecodeType和nDisplayType都不为0时表示硬解码模式和渲染模式都设置(设置硬解码前选择哪种硬解码和渲染模式)-DXVA只能对应d3d9；。

软解暂时没有模式设置，设置进去的解码引擎类型，在后面开启硬解码进行解码时，真正使用此模式。nDisplayType：1-DDRAW,2-D3D9，3-D3D11。渲染模式不支持设置0模式。

此接口在PlayM4_GetPort之后，PlayM4_OpenStream或PlayM4_OpenFile之前调用。

PlayM4_SetDecodeOrDisplayMode接口调用前不能调用开启鱼眼接口或者开启vie图像增强接口，否则调用此接口会报错。

See Also

PlayM4_GetPort PlayM4_FreePort

PlayM4_GetDecodeOrDisplayMode


PlayM4_SetDeflash

播放库SDK编程指南

PlayM4_SetDeflash*

去闪烁。

BOOL PlayM4_SetDeflash(
  LONG    nPort,
  BOOL    bDeflash
);

Parameters

nPort
[in] 播放通道号
bDeflash
[in] TRUE表示设置去闪烁，FALSE表示不设置，默认为不设置

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置是否去闪烁功能, 原先在静止图像区域有噪声情况下, 图像会产生闪烁现象（或称刷新或跳动），启动去闪烁功能后，闪烁效果可消除或减轻，同时也能降低噪声。

PlayM4_SetDeflash目前只支持私有h.264码流，不支持其他编码格式。

不再支持此接口。

See Also

PlayM4_SetColor PlayM4_GetColor

PlayM4_SetImageSharpen


PlayM4_SetFileEndMsg

播放库SDK编程指南

PlayM4_SetFileEndMsg*

文件结束消息。

BOOL PlayM4_SetFileEndMsg(
  LONG    nPort,
  HWND    hWnd,
  UINT    nMsg
);

Parameters

nPort
[in] 播放通道号
hWnd
[in] 消息发送的窗口
nMsg
[in] 用户自定义的输入的消息；当播放到文件结束时用户从hWnd窗口过程中收到这个消息。此消息函数中的wParam参数返回nPort的值

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置文件结束时要发送的消息；从2.4版本SDK起，当文件播放完时，解码线程将不会自动结束，需要用户做停止工作。

应用程序在收到这个消息后要调用播放结束函数PlayM4_Stop。

不再支持此接口。

See Also

PlayM4_SetFileEndCallback


PlayM4_SetOverlayFlipMode

播放库SDK编程指南

PlayM4_SetOverlayFlipMode*

设置图像Overlay翻转模式。

BOOL PlayM4_SetOverlayFlipMode(
  LONG     nPort,
  BOOL     bTrue
);

Parameters

nPort
[in] 播放通道号
bTrue
[in] 是否设置翻转，若为TRUE则为翻转；为FALSE则不翻转

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

早期的版本指overlay表面前缓冲区紧跟着一个或多个建立好的后缓冲区，提高显示效率，6.1.0.3以上版本后没有功用。

不再支持此接口。

See Also

PlayM4_SetColor PlayM4_GetColor

PlayM4_SetImageSharpen


PlayM4_SetOverlayMode

播放库SDK编程指南

PlayM4_SetOverlayMode*

设置OVERLAY显示模式及关键色。

BOOL PlayM4_SetOverlayMode(
  LONG         nPort,
  BOOL         bOverlay,
  COLORREF     colorKey
);

Parameters

nPort
[in] 播放通道号
bOverlay
[in] TRUE表示将首先尝试使用OVERLAY模式，如果不行再使用其他模式。FALSE则不进行OVERLAY模式的尝试。
colorKey
[in] 用户设置的透明色，透明色相当于一层透视膜，显示画面只能穿过这种颜色，其他颜色将挡住显示的画面。用户应该在显示窗口中涂上这种颜色，才能看到显示画面。一般应该使用一种不常用的颜色作为透明色。这是一个双字节值0x00bbggrr,最高字节为0，后三个字节分别表示r,g,b的值。

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

设置OVERLAY模式显示画面。在一块显卡中同一时刻只能有一个OVERLAY表面处于活动状态，如果此时系统中已经有程序使用了OVERLAY，那么播放器就不能再创建OVERLAY表面，它将自动改用Off_Screen表面，并不返回FALSE。

一些常用的播放器，以及我们卡的预览都可能使用了overlay表面。同样如果播放器使用了OVERLAY表面，那么其他的程序将不能使用OVERLAY表面，特别注意，我们的卡在预览时可能也要使用OVERLAY(用户可设置)，如果先打开播放器（并且使用了OVERLAY），再启动预览，那么预览可能因为得不到OVERLAY而失败。

使用OVERLAY模式的优点是：大部份的显卡都支持OVERLAY，在一些不支持BLT硬件缩放和颜色转换的显卡上 (如SIS系列显卡)使用OVERLAY模式（OVERLAY模式下的缩放和颜色转换由显卡支持），可以大大减小cpu利用率并提高画面质量（相对于软件缩放和颜色转换）。

缺点是：只能有一路播放器使用。该设置必须在PLAY之前使用，而且需要设置透明色。

不再支持此接口。

See Also

PlayM4_GetOverlayMode


PlayM4_SetPicQuality

播放库SDK编程指南

PlayM4_SetPicQuality*

设置图像质量。

BOOL PlayM4_SetPicQuality(
  LONG   nPort,
  BOOL   bHighQuality
);

Parameters

nPort
[in] 播放通道号
bHighQuality
[in] 等于1时图像高质量，等于0时低质量，默认为1

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

当设置成高质量时画面效果好，但CPU利用率高。在支持多路播放时，可以设为低质量，以降低CPU利用率；当某路放大播放时将该路设置成高质量，以达到好的画面效果。

Remarks

  • 当设置成高质量时画面效果好，但CPU利用率高。在支持多路播放时，可以设为低质量，以降低CPU利用率；当某路放大播放时将该路设置成高质量，以达到好的画面效果。
  • H265码流播放时，不支持调用该接口进行设置图像质量。

    • 不再支持此接口。

See Also

PlayM4_GetPictureQuality PlayM4_Play


PlayM4_SetPlayedTimeEx

设置流播放起始帧（毫秒）。

BOOL PlayM4_SetPlayedTimeEx(
  LONG   nPort,
  DWORD  nTime
);

Parameters

nPort
[in] 播放通道号
nTime
[in] 设置播放起始帧位置，nTime是指相对于送入的第一个GOP起始I帧的相对时标，具体定义请参见“Remarks”说明

Remarks

此接口如上参数设置适用于流式播放定位。

不同的nTime值代表不同的含义：

nTime取值 | 含义
0 | 从第一个GOP的I帧作为起始帧
40（帧率25为例,1秒为1000毫秒，其中时间间隔为1000 / 25 = 40毫秒） | I帧后第一帧作为播放起始帧
-1 | 第一个GOP的最后一帧作为播放起始帧

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_GetPlayedTimeEx


PlayM4_SetPlayMode

播放库SDK编程指南

PlayM4_SetPlayMode*

设置播放模式。

BOOL PlayM4_SetPlayMode(
  LONG    nPort,
  BOOL    bNormal
);

Parameters

nPort
[in] 播放通道号
bNormal
[in]是否正常播放

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

不再支持此接口。

See Also

PlayM4_Play PlayM4_Stop


PlayM4_SetPreRecordCallBack

预录像数据回调函数。

BOOL PlayM4_SetPreRecordCallBack(
  LONG              nPort,
  PreRecordCBfun   fPreRecordCBfun,
  void*            pUser
);

Parameters

nPort
[in] 播放通道号
fPreRecordCBfun
[in] 预录像数据回调函数，若不需要调用回调函数则置为NULL，否则不能为NULL

Callback Function

typedef void(CALLBACK *PreRecordCBfun)(
  long                nPort,
 RECORD_DATA_INFO  *pRecordDataInfo,
  void*               pUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
pRecordDataInfo
[out] 预录像数据信息指针
pUser
[out] 用户指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • PlayM4_Play必须送入有效的显示窗口句柄。必须在正常显示第一帧视频数据后调用此接口才会成功。
  • 回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。
  • 使用预录像功能时，图片私有信息、加密信息以及音频数据有可能会丢失，不建议使用预录像功能。
  • 预录像回调中，回调出来的数据需要及时处理，建议不要每次回调都进行IO操作，而是先把回调的数据缓存起来，然后在回调的数据累积到一定大小（例如2MB）后，再进行写目标文件。因为若不及时处理回调的数据或频繁进行IO等耗时操作，可能导致录像跟不上内部解析的速度，使录像文件存在丢帧的风险。
  • 不建议使用预录功能。

See Also

PlayM4_SetPreRecordFlag


PlayM4_SetPreRecordFlag

设置预录像开关。

BOOL  PlayM4_SetPreRecordFlag(
  LONG   nPort,
  BOOL   bFlag
);

Parameters

nPort
[in] 播放通道号
bFlag
[in] 设置预录像开关，bFlag = 1表示开启，bFlag = 0表示关闭

Remarks

预录功能是把设备通过网络传输过来的码流转换为PS封装，然后通过回调函数中给用户，方便用户保存成文件查看。

使用预录像功能时，图片私有信息、加密信息以及音频数据有可能会丢失，不建议使用预录像功能。

Return Values

TRUE表示成功，FALSE表示失败。获取错误码调用PlayM4_GetLastError。

See Also

PlayM4_SetPreRecordCallBack


PlayM4_SetRunTimeInfoCallBack

播放库SDK编程指南

PlayM4_SetRunTimeInfoCallBack*

设置实时信息回调函数。

BOOL PlayM4_SetRunTimeInfoCallBack(
  LONG                nPort,
  RunTimeInfoCBFun    fRunTimeInfoCBFun,
  void*               pUser
);

Parameters

nPort
[in] 播放通道号
fRunTimeInfoCBFun
[in] 实时信息回调函数
pUser
[in] 用户数据

Callback Function

typedef void(CALLBACK *RunTimeInfoCBFun)(
  long            nPort,
  RunTimeInfo*    pstRunTimeInfo,
  void*           pUser
);

Callback Function Parameters

nPort
[out] 播放通道号
pstRunTimeInfo
[out] 实时信息
pUser
[out] 用户数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

当硬解码返回错误时，回调会通知应用层，应用层需要关闭这路硬解码，再开启软解。

See Also

PlayM4_SetDecodeEngine

PlayM4_SetRunTimeInfoCallbackType


PlayM4_SetSycStartTime

播放库SDK编程指南

PlayM4_SetSycStartTime*

设置同步回放开始时间。

BOOL PlayM4_SetSycStartTime(
  LONG                 nPort,
  PLAYM4_SYSTEM_TIME   *pstSystemTime
);

Parameters

nPort
[in] 播放通道号
pstSystemTime
[in] 同步的系统时间结构体指针

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

建议不再使用此接口。

See Also

PlayM4_SetSycGroup


PlayM4_SetTimerType

播放库SDK编程指南

PlayM4_SetTimerType*

设置播放使用的定时器类型。

BOOL  PlayM4_SetTimerType(
  LONG         nPort,
  DWORD        nTimerType,
  DWORD        nReserved
);

Parameters

nPort
[in] 播放通道号
nTimerType
[in] 时钟类型，如下表所示：
pTimerType参数 | 对应信息
TIMER_1 | 多媒体时钟，一个进程中只能使用16个，时间精度高；
TIMER_2 | TIMER_2 是等待计时器，使用数目没有限制，但时间精度较低，不推荐在高倍速播放时使用。
nReserved
[in] 保留参数

Return Values

成功返回RUE；失败返回FALSE。获取错误码调用/PlayM4_GetLastError。

Remarks

默认情况下0~15路使用TIMER_1，其余使用TIMER_2。必须在PlayM4_OpenFile之前调用。建议在实时预览时设置成Timer2，在文件回放时设置为Timer1。

不再支持此接口。

See Also

PlayM4_GetTimerType


PlayM4_SetVerifyCallBack

播放库SDK编程指南

PlayM4_SetVerifyCallBack*

设置数据校验。

BOOL PlayM4_SetVerifyCallBack(
  LONG         nPort,
  DWORD        nBeginTime,
  DWORD        nEndTime,
  funVerify    cbfunVerify,
  DWORD        nUser
);

Parameters

nPort
[in] 播放通道号
nBeginTime
[in] 校验开始时间，单位：ms
nEndTime
[in] 校验结束时间，单位：ms
cbfunVerify
[in] 数据校验回调函数
nUser
[in] 用户数据

Callback Function

typedef void(CALLBACK *funVerify)(
  Long        nPort,
 FRAME_POS    *pFilePos,
  DWORD       bIsVideo,
  DWORD       nUser
);

Callback Function Parameters

nPort
[out] 播放器通道号
pFilePos
[out] 出错信息
bIsVideo
[out] 是否视频数据，1视频，0音频
nUser
[out] 用户数据

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

注册一个回调函数，校验数据是否被修改，实现水印功能。现在可以发现数据丢失情况。注意该校验在建立文件索引的时候进行，所以必须建文件索引才能校验。在PlayM4_OpenFile之前使用。

回调函数中不能调用参数中带nPort的播放库接口，否则有可能造成死锁。

不再支持此接口。


PlayM4_SyncToAudio

播放库SDK编程指南

PlayM4_SyncToAudio*

设置音视频同步。

BOOL PlayM4_SyncToAudio(
  LONG     nPort,
  BOOL     bSyncToAudio
);

Parameters

nPort
[in] 播放通道号
bSyncToAudio
[in] 是否开启音视频同步

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

音视频同步需要以音视频的时间戳为基准，若时间戳有跳变，则可能会影响音视频同步的效果。

建议不再使用此接口。

See Also

PlayM4_PlaySound PlayM4_StopSound


PlayM4_VIE_GetModuConfig

获取开启图像增强模块。

BOOL PlayM4_VIE_GetModuConfig(
  LONG      lPort,
  int       *dwModuFlag
);

Parameters

lPort
[in] 播放通道号
dwModuFlag
[out] 图像增强模块标记，按位表示，每位代表一种模块(详见PLAYM4_VIE_MODULES)，取值：0- 关闭，1- 开启
enum _PLAYM4_VIE_MODULES{
  PLAYM4_VIE_MODU_ADJ           = 0x00000001,  //图像基本调节
  PLAYM4_VIE_MODU_EHAN          = 0x00000002,  //局部增强模块
  PLAYM4_VIE_MODU_DEHAZE        = 0x00000004,  //去雾模块
  PLAYM4_VIE_MODU_DENOISE       = 0x00000008,  //去噪模块
  PLAYM4_VIE_MODU_SHARPEN       = 0x00000010,  //锐化模块
  PLAYM4_VIE_MODU_DEBLOCK       = 0x00000020,  //去块滤波模块
  PLAYM4_VIE_MODU_CRB           = 0x00000040,  //色彩平衡模块
  PLAYM4_VIE_MODU_LENS          = 0x00000080   //镜头畸变矫正模块
}PLAYM4_VIE_MODULES

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 调用该接口可以获取已开启的模块。
  • 纵向分辨率大于横向分辨率1.5倍时，视频增强不支持。
  • Win64位版本播放库不支持该接口。

See Also

PlayM4_VIE_SetModuConfig PlayM4_VIE_SetRegion

PlayM4_VIE_SetParaConfig PlayM4_VIE_GetParaConfig


PlayM4_VIE_GetParaConfig

获取开启模块的参数。

BOOL PLAYM4_VIE_GetParaConfig(
  LONG                    lPort,
  PLAYM4_VIE_PARACONFIG   *pParaConfig
);

Parameters

lPort
[in] 播放通道号
pParaConfig
[out] 图像增强参数

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 若没有调用PLAYM4_VIE_SetModuConfig开启视频增强功能，调用此接口返回值没有意义。
  • 纵向分辨率大于横向分辨率1.5倍时，视频增强不支持。
  • Win64位版本播放库不支持该接口。

See Also

PlayM4_VIE_SetModuConfig PlayM4_VIE_SetRegion

PLAYM4_VIE_GetModuConfig PlayM4_VIE_SetParaConfig


PlayM4_VIE_SetModuConfig

设置关闭或开启模块。

BOOL PLAYM4_VIE_SetModuConfig(
  LONG     lPort,
  int      nModuFlag,
  BOOL     bEnable
);

Parameters

lPort
[in] 播放通道号
nModuFlag
[in] 图像增强模块标记，按位表示，每位代表一种模块(详见PLAYM4_VIE_MODULES)，取值：0- 关闭，1- 开启
enum _PLAYM4_VIE_MODULES{
  PLAYM4_VIE_MODU_ADJ           = 0x00000001,  //图像基本调节
  PLAYM4_VIE_MODU_EHAN          = 0x00000002,  //局部增强模块
  PLAYM4_VIE_MODU_DEHAZE        = 0x00000004,  //去雾模块
  PLAYM4_VIE_MODU_DENOISE       = 0x00000008,  //去噪模块
  PLAYM4_VIE_MODU_SHARPEN       = 0x00000010,  //锐化模块
  PLAYM4_VIE_MODU_DEBLOCK       = 0x00000020,  //去块滤波模块
  PLAYM4_VIE_MODU_CRB           = 0x00000040,  //色彩平衡模块
  PLAYM4_VIE_MODU_LENS          = 0x00000080   //镜头畸变矫正模块
}PLAYM4_VIE_MODULES
bEnable
[in] 是否开启，TRUE为开启；FALSE为关闭

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 先调用该接口设置模块开启，再调用PLAYM4_VIE_SetParaConfig设置模块参数，期间采用默认的参数。关闭模块后，上次设置的参数清空。
  • PLAYM4_VIE_GetParaConfig、PLAYM4_VIE_SetParaConfig等接口，必须在该接口开启模块后调用，否则返回错误。
  • 纵向分辨率大于横向分辨率1.5倍时，视频增强不支持。
  • Win64位版本播放库不支持该接口。
  • 设置图像增强类型越多越影响画面显示性能；显示耗时会越大；画面显示会变慢等影响。

See Also

PlayM4_VIE_SetRegion PlayM4_VIE_GetModuConfig

PlayM4_VIE_SetParaConfig PlayM4_VIE_GetParaConfig


PlayM4_VIE_SetParaConfig

设置增强参数。

BOOL PLAYM4_VIE_SetParaConfig(
  LONG                    lPort,
  PLAYM4_VIE_PARACONFIG   *pParaConfig
);

Parameters

lPort
[in] 播放通道号
pParaConfig
[in] 图像增强参数

Return Values

成功返回TRUE；失败返回FALSE。获取错误码调用PlayM4_GetLastError。

Remarks

  • 若未调用PlayM4_VIE_SetModuConfig开启模块，则参数设置将被忽略。
  • 如在PLAYM4_VIE_MODULES中定义如 PLAYM4_VIE_MODU_ADJ|PLAYM4_VIE_MODU_EHAN模块启用后，则需要调用该接口设置相应的参数。
  • 纵向分辨率大于横向分辨率1.5倍时，视频增强不支持。
  • Win64位版本播放库不支持该接口。

See Also

PlayM4_VIE_SetModuConfig PlayM4_VIE_GetModuConfig

PLAYM4_VIE_SetRegion PlayM4_VIE_GetParaConfig


PlayM4_VIE_SetRegion

设置图像增强区域。

BOOL PLAYM4_VIE_SetRegion(
  LONG     lPort,
  LONG     lRegNum,
  RECT    *pRect
);

Parameters

lPort
[in] 消息播放通道号
lRegNum
[in] 图像增强区域个数
pRect
[in] 图像增强区域

Return Values

成功返回TRUE；失败返回FALSE，获取错误码调用PlayM4_GetLastError。

Remarks

  • 设置图像增强区域，pRect设为NULL表示对全图进行增强；若区域设置超过全图，会返回错误。
  • 图像增强最小设置区域为32*32像素，如果PlayM4_VIE_SetModuConfig的参数nModuFlag设置成PLAYM4_VIE_MODU_EHAN，则最小范围需要提高到32*32像素。
  • 设置区域必须是16的倍数，且宽高或高宽比不能大于四比一。
  • 如果设定区域的4个值不是偶数，内部会处理成偶数，即/2 *2，处理后的长宽需要是16的倍数。

See Also

PlayM4_VIE_SetModuConfig PlayM4_VIE_GetModuConfig

PlayM4_VIE_SetParaConfig PlayM4_VIE_GetParaConfig


AdditionDataInfo

私有信息结构体。

struct{
  long     lDataType;
  long     lDataStrVersion;
  long     lDataTimeStamp;
  long     lDataLength;
  char    *pData;
}AdditionDataInfo;

Members

lDataType
私有数据类型
lDataStrVersion
数据返回的结构体版本，主要是为了兼容性
lDataTimeStamp
私有数据时间戳
lDataLength
私有数据长度
pData
私有数据指针

See Also

PlayM4_SetAdditionDataCallBack


CROP_PIC_INFO

选择区域参数结构体。

struct{
  BYTE     *pDataBuf;
  DWORD    dwPicSize;
  DWORD    dwBufSize;
  DWORD    dwPicWidth;
  DWORD    dwPicHeight;
  DWORD    dwReserve;
  RECT     *pCropRect;
}CROP_PIC_INFO;

Members

pDataBuf
抓图数据buffer
dwPicSize
实际图片大小
dwBufSize
数据buffer大小
dwPicWidth
截图宽
dwPicHeight
截图高
dwReserve
多加一个reserve字段
pCropRect
选择区域NULL, 同老的抓图接口

Remarks

抓取出来的图片宽高是16的倍数，最小支持抓图分辨率为32 *32。

See Also

PlayM4_GetCropJPEG

PlayM4_GetCropBMP


CYCLEPARAM

鱼眼图像圆心参数。

struct{
  float    fRadiusLeft;
  float    fRadiusRight;
  float    fRadiusTop;
  float    fRadiusBottom;
}CYCLEPARAM;

Members

fRadiusLeft
圆的最左边X坐标，取值范围为[0.0,1.0]
fRadiusRight
圆的最右边X坐标，取值范围为[0.0,1.0]
fRadiusTop
圆的最上边Y坐标，取值范围为[0.0,1.0]
fRadiusBottom
圆的最下边Y坐标，取值范围为[0.0,1.0]

See Also

PlayM4_FEC_SetParam

PlayM4_FEC_GetParam


D3D_PIC_INFO

d3d11渲染抓图结构体。

///=16。 unsigned int nPicHeight; //设置抓图高-nPicMode为1时有效，且高>=16。 unsigned char chReserve[8]; //reserve保留字段 }D3D_PIC_INFO;
struct{
  unsigned int    nPicMode;
  unsigned char    *pBuf;
  unsigned int    nBufSize;
  unsigned int*    pPicSize;
  unsigned int    nPicWidth;
  unsigned int    nPicHeight;
  unsigned char    chReserve[8];
}D3D_PIC_INFO;

Members

nPicMode
抓图模式：0-按照码流实际分辨率抓图(之前抓图模式)；1-按照下面传入的宽高抓图（nPicWidth*nPicHeight-窗口宽高或者其他宽高）
pBuf
抓图数据buffer
nBufSize
缓存buffer大小-（如果nPicMode为0则为之前的根据获取到的码流分辨率来进行缓存申请；如果nPicMode为1则上层根据设置的分辨率来申请缓存）
pPicSize
实际图片大小
nPicWidth
设置抓图宽-nPicMode为1时有效，且宽>=16
nPicHeight
设置抓图宽-nPicMode为1时有效，且宽>=16
chReserve
保留字节

See Also

PlayM4_GetD3DCapture


DISPLAY_INFO

当前显示信息结构体。

struct{
  long    nPort;
  char    *pBuf;
  long    nBufLen;
  long    nWidth;
  long    nHeight;
  long    nStamp;
  long    nType;
  long    nUser;
}DISPLAY_INFO;

Members

nPort
通道号
pBuf
返回图像数据指针
nBufLen
返回图像数据大小
nWidth
画面宽，单位像素
nHeight
画面高
nStamp
时标信息，单位毫秒
nType
数据类型，T_YV12，T_RGB32，T_UYVY

nType类型说明，如下表所示：

nType宏定义 | nFrameType含义
T_AUDIO16 | 音频数据;采样率16khz，单声道，每个采样点16位表示,具体以解码出的音频信息为准
T_RGB32 | 视频数据。每个像素4个字节，排列方式与位图相似，“B-G-R-0 …”，第一个像素位于图像左下角,保留
T_UYVY | 视频数据，uyvy格式。“U0-Y0-V0-Y1-U2-Y2-V2-Y3….”，第一个像素位于图像左上角,保留
T_YV12 | 视频数据，yv12格式,当前解码后的视频格式。排列顺序“Y0-Y1-……”，“V0-V1….”，“U0-U1-…..”。关于图像格式详细信息，用户可以查阅相关资料。
nUser
用户数据

Remarks

当前获取到的图像数据类型为YV12格式。

See Also

PlayM4_SetDisplayCallBackEx PlayM4_SetDecCallBack


ENCRYPT_INFO

加密信息结构体。

struct{
  long    nVideoEncryptType;
  long    nAudioEncryptType;
  long    nSetSecretKey;
}ENCRYPT_INFO;

Members

nVideoEncryptType
视频加密类型
nAudioEncryptType
音频加密类型
nSetSecretKey
是否设置，1表示设置密钥，0表示没有设置密钥

See Also

PlayM4_SetEncryptTypeCallBack


ENGINESUPPORT

硬解码和渲染支持能力集。

struct{
  HDECODESUPPORT    stHDecodeSupport,
  RENDERSUPPORT    stRenderSupport,
  unsigned int     chReserved[4];
}ENGINESUPPORT;

Members

stHDecodeSupport
硬解码能力集
stRenderSupport
渲染能力集
chReserved
保留字段

See Also

PlayM4_GetEngineSupport


ENGINESUPPORT_EX

硬解码和渲染支持扩展能力集。

struct{
  HDECODESUPPORT    stHDecodeSupportD3D9[8],
  HDECODESUPPORT     stHDecodeSupportD3D11[8],
  RENDERSUPPORT     stRenderSupport[8],
  unsigned char     chD3D9DeviceCount;
  unsigned char     chd3d11devicecount;
  unsigned char     chrenderdevicecount;
  unsigned char     chreserved[13]
}ENGINESUPPORT_EX;

Members

stHDecodeSupportD3D9
d3d9硬解码能力集
stHDecodeSupportD3D11
d3d11硬解码能力集
stRenderSupport
渲染能力集
chD3D9DeviceCount
显卡数量1（D3D9硬解码探测的显卡数量-接了显示器的显卡）
chd3d11devicecount
显卡数量2（d3d11硬解码探测的显卡数量-不需要接显示器）
chrenderdevicecount
显卡数量3（渲染探测的显卡数量）
chreserved
保留

See Also

PlayM4_GetEngineSupportEx


FISHEYEPARAM

鱼眼矫正参数结构体。

struct{
  unsigned int      nUpDateType;
  unsigned int      nPlaceAndCorrect;
  PTZPARAM          stPTZParam;
  CYCLEPARAM        stCycleParam;
  float             fZoom;
  float             fWideScanOffset;
  int               nResver[16];
}FISHEYEPARAM;

Members

nUpDateType
更新的类型
宏定义 | 宏定义值 | 含义
FEC_UPDATE_RADIUS | 0x1 | 缓冲数据流缓冲最小值
FEC_UPDATE_PTZZOOM | 0x2 | 缓冲数据流缓冲最大值
FEC_UPDATE_WIDESCANOFFSET | 0x4 | 缓冲数据流缓冲最大值
FEC_UPDATE_PTZPARAM | 0x8 | 缓冲数据流缓冲最大值
FEC_UPDATT_PTZCOLOR | 0x10 | 缓冲数据流缓冲最大值
nPlaceAndCorrect
安装方式和矫正方式（只能用于获取，SetParam的时候无效,该值表示安装方式和矫正方式的和）
stPTZParam
PTZ 校正的参数
stCycleParam
鱼眼图像圆心参数
fZoom
PTZ 显示的范围参数，取值范围：[0.00001f,0.6f]
fWideScanOffset
180或者360度校正的偏移角度
nResver
保留字段

See Also

PlayM4_FEC_SetParam

PlayM4_FEC_GetParam


FRAME_INFO

图像和声音信息结构体。

struct{
  long              nWidth;
  long              nHeight;
  long              nStamp;
  long              nType;
  long              nFrameRate;
  DWORD             dwFrameNum;
}FRAME_INFO;

Members

nWidth
画面宽，单位像素。如果是音频数据则为音频声道数；
nHeight
画面高。如果是音频数据则为样位率；
nStamp
时标信息，单位毫秒
nType
数据类型，T_AUDIO16，T_RGB32， T_YV12。

nType类型说明，如下表所示：

nType宏定义 | nFrameType含义
T_AUDIO16 | 音频数据;采样率16khz，单声道，每个采样点16位表示；具体以解码出的音频信息为准
T_RGB32 | 视频数据。每个像素4个字节，排列方式与位图相似，“B-G-R-0 …”，第一个像素位于图像左下角；保留
T_UYVY | 视频数据，uyvy格式。“U0-Y0-V0-Y1-U2-Y2-V2-Y3….”，第一个像素位于图像左上角；保留
T_YV12 | 视频数据，yv12格式，当前解码后的视频格式。排列顺序“Y0-Y1-……”，“V0-V1….”，“U0-U1-…..”。关于图像格式详细信息，用户可以查阅相关资料。
nFrameRate
编码时产生的图像帧率，如果是音频数据则为采样率
dwFrameNum
帧号

See Also

PlayM4_SetDecCallBack

PlayM4_SetDecCallBackMend

PlayM4_SetDecCallBackExMend


PFRAME_POS

查找到的关键帧的文件位置、帧序号、时标信息。

struct{
  long    nFilePos;
  long    nFrameNum;
  long    nFrameTime;
}FRAME_POS;

Members

nFilePos
文件位置
nFrameNum
帧序号
nFrameTime
帧时标（毫秒）

See Also

PlayM4_GetKeyFramePos PlayM4_GetNextKeyFramePos


FRAME_TYPE

数据帧信息结构体。

struct{
  char    *pDataBuf;
  long     nSize;
  long     nFrameNum;
  BOOL     bIsAudio;
  long     nReserved;
}FRAME_TYPE;

Members

pDataBuf
数据帧首地址
nSize
数据帧的大小
nFrameNum
数据帧的个数
bIsAudio
是否音频帧
nReserved
是保留

Remarks

不支持，相关功能可以使用其他库来实现。

See Also

PlayM4_GetSystemTime

PlayM4_SetSycStartTime


HDECODESUPPORT

硬解码支持信息。

struct{
  unsigned char     chGPUType;
  unsigned char     bDXVA_D3D9;
  unsigned char     bCUVID_D3D11;
  unsigned char     chDXVAH264_Max_Resolution;
  unsigned char     chDXVAH265_Max_Resolution;
  unsigned char     chCUVIDH264_Max_Resolution;
  unsigned char     chCUVIDH265_Max_Resolution;
  unsigned char     chValidFlag;
  unsigned char     bD3D11VA;
  unsigned char     chD3D11VAH264_Max_Resolution;
  unsigned char     chD3D11VAH265_Max_Resolution;
  unsigned int     nReserved[9];
}HDECODESUPPORT;

Members

chGPUType
GPU类型： 0-无，1-N卡独显，2-A卡独显，3-Intel核显
bDXVA_D3D9
判断是否支持DXVA_D3D9硬解码:0-不支持，1-支持
bCUVID_D3D11
判断是否支持CUVID_D3D11硬解码:0-不支持，1-支持
chDXVAH264_Max_Resolution
DXVA,h.264编码支持的最大的分辨率大概值-不是精准值-具体定义见枚举类型
chDXVAH265_Max_Resolution
DXVA,h.265编码支持的最大的分辨率大概值-不是精准值-具体定义见枚举类型
chCUVIDH264_Max_Resolution
CUVID,h.264编码支持的最大的分辨率大概值-不是精准值-具体定义见枚举类型
chCUVIDH265_Max_Resolution
CUVID,h.265编码支持的最大的分辨率大概值-不是精准值-具体定义见枚举类型
chValidFlag
有效
bD3D11VA
判断是否支持D3D11VA硬解码:0-不支持，1-支持
chD3D11VAH264_Max_Resolution
D3D11VA,h264编码支持的最大的分辨率大概值-不是精准值
chD3D11VAH265_Max_Resolution
D3D11VA,h265编码支持的最大的分辨率大概值-不是精准值
nReserved
保留字段

Remarks

硬解码探测分辨率说明，如下表所示：

硬解码探测分辨率 | 宏定义值 | 对应分辨率
HXVA_RESOLUTION_NONE | 0x00 | 0
HXVA_RESOLUTION_200W | 0x01 | 1920*1080
HXVA_RESOLUTION_300W | 0x02 | 2048*1536
HXVA_RESOLUTION_500W | 0x03 | 2560*1920
HXVA_RESOLUTION_800W | 0x04 | 3840*2160
HXVA_RESOLUTION_1600W | 0x05 | 4096*4096
HXVA_RESOLUTION_6400W | 0x06 | 8192*8192(H.265)

当前版本实际不支持cuvid硬解码功能，支持探测硬件能力

See Also

ENGINESUPPORT


INTEL_INFO_EX

智能信息结构体。

struct{
  unsigned int     type;
  VCA_TARGET_LIST_EX    stTarget,
  VCA_TARGET_LIST_EX     stTarget_EX
  unsigned char     chreserved[13]
}INTEL_INFO_EX;

Members

type
标记回调出了哪些私有信息类型
stTarget
目标
stTarget_EX
深眸目标

See Also

PlayM4_RegisterIVSDrawFunCB_EX


PLAYM4_SESSION_INFO

交互信息结构。

struct{
  int              nSessionInfoType;
  int              nSessionInfoLen;
  unsigned char    *pSessionInfoData;
}PLAYM4_SESSION_INFO;

Members

nSessionInfoType
交互信息类型，比如SDP或者40字节私有信息头
nSessionInfoLen
交互信息长度
pSessionInfoData
交互信息数据指针

See Also

PlayM4_OpenStreamAdvanced


PLAYM4_SYSTEM_TIME

全局时间结构体。

struct{
  DWORD   dwYear;
  DWORD   dwMon;
  DWORD   dwDay;
  DWORD   dwHour;
  DWORD   dwMin;
  DWORD   dwSec;
  DWORD   dwMs;
}PLAYM4_SYSTEM_TIME;

Members

dwYear
年
dwMon
月
dwDay
日
dwHour
时
dwMin
分
dwSec
秒
dwMs
毫秒

See Also

PlayM4_GetSystemTime

PlayM4_SetSycStartTIme


PLAYM4_VIE_PARACONFIG

图像增强参数结构体。

struct{
  int    moduFlag;
  int    brightVal;
  int    contrastVal;
  int    colorVal;
  int    toneScale;
  int    toneGain;
  int    toneOffset;
  int    toneColor;
  int    dehazeLevel;
  int    dehazeTrans;
  int    dehazeBright;
  int    denoiseLevel;
  int    usmAmount;
  int    usmRadius;
  int    usmThreshold;
  int    deblockLevel;
  int    lensWarp;
  int    lensZoom;
}PLAYM4_VIE_PARACONFIG;

Members

PLAYM4_VIE_MODU_ADJ模块参数
moduFlag
启用的算法处理模块
brightVal
亮度调节值，[-255, 255]
contrastVal
对比度调节值，[-256, 255]
colorVal
饱和度调节值，[-256, 255]
PLAYM4_VIE_MODU_EHAN模块参数
toneScale
滤波范围，[0, 100]
toneGain
对比度调节，全局对比度增益值，[-256, 255]
toneOffset
亮度调节，亮度平均值偏移，[-255, 255]
toneColor
颜色调节，颜色保真值，[-256, 255]
PLAYM4_VIE_MODU_DEHAZE模块参数
dehazeLevel
去雾强度，[0, 255]
dehazeTrans
透射值，[0, 255]
dehazeBright
亮度补偿，[0, 255]
PLAYM4_VIE_MODU_DENOISE模块参数
denoiseLevel
去噪强度，[0, 255]
PLAYM4_VIE_MODU_SHARPEN模块参数
usmAmount
锐化强度，[0, 255]
usmRadius
锐化半径，[1, 15]
usmThreshold
锐化阈值，[0, 255]
PLAYM4_VIE_MODU_DEBLOCK模块参数
deblockLevel
去块强度，[0, 100]
PLAYM4_VIE_MODU_LENS模块参数
lensWarp
畸变量，[-256, 255]
lensZoom
缩放量，[-256, 255]

See Also

PlayM4_VIE_SetParaConfig

PlayM4_VIE_GetParaConfig


PLAYM4HRVIEWPARAMTYPE

半球-球面矫正画面的视角变化调节结构体。

struct{
  PLAYM4SRTRANSFERELEMENT     *pTransformElement,
  unsigned int                        nTransformCount;
}PLAYM4SRTRANSFERPARAM;

Members

pTransformElement
旋转的坐标轴
nTransformCount
旋转的组合次数

Remarks

nTransformCount 旋转次数暂无意义，每次调用接口默认旋转一次。

See Also

PlayM4_SR_Rotate


PLAYM4SREAGLEEYEPRAM

鹰眼调节参数。

struct{
  unsigned int                        nCameraIndex;
  double                        fAlpha;
  double                        fBeta;
  double                        fGamma;
  double                        fFov;
}PLAYM4SREAGLEEYEPRAM;

Members

nCameraIndex
相机编号，取值范围是[0,7]
fAlpha
alpha角度值，画面垂直运动，取值范围是[ -90.0,90.0]
fBeta
beta角度值，画面水平运动，取值范围是[ -90.0,90.0]
fGamma
gamma角度值，画面旋转，取值范围是[ -90.0,90.0]
fFov
fov，画面放大缩小，取值范围是[ 40.0,80.0]

See Also

PlayM4_SR_Rotate


PLAYM4SRMODELMODE

渲染到3D模型的相关参数。

struct{
  bool                      bModelMode;
  PLAYM4SRTEXTUREMODE*      emTextureMode,
  unsigned long             ulDisplayType;
  unsigned int              nTransformMode;
  PLAYM4SRMODELTYPE*        emModelType;
}PLAYM4SRMODELMODE;

Members

bModelMode
是否将渲染到3D模型上.可以设置为 ture或者false来表示是碗装还是8画面
emTextureMode
纹理贴图模式
emTextureMode宏定义 | 宏定义值 | 类型含义
PLAYM4_TEXTURE_DOUBLE | 0x0 | 双面贴纹理
PLAYM4_TEXTURE_OUTER | 0x1 | 外表面贴纹理
PLAYM4_TEXTURE_INNER | 0x2 | 内表面贴纹理
ulDisplayType
按位组合 SR_MODEL_SOLID | SR_MODEL_FRAME | SR_MODEL_AXIS
ulDisplayType宏定义 | 宏定义值 | 类型含义
PLAYM4_MODEL_SOLID | 0x0001 | 实体模型
PLAYM4_MODEL_FRAME | 0x0010 | SR_MODEL_FRAME
PLAYM4_MODEL_AXIS | 0x0100 | 坐标轴
nTransformMode
0：线框坐标轴随模型变换；1 ：线框坐标轴不随模型变换
emModelType
模型类型，鱼眼半球，鹰眼碗模型等
emModelType宏定义 | 宏定义值 | 类型含义
PLAYM4_MODELTYPE_HEMISPHERE | 0x0 | 鱼眼视频用半球模型
PLAYM4_MODELTYPE_EAGLE_EYE | 0x1 | 碗状类半球模型用于鹰眼拼接
PLAYM4_MODELTYPE_CUBE | 0x2 | 立方体模型

Remarks

PLAYM4_MODELTYPE_HEMISPHERE和PLAYM4_MODELTYPE_CUBE模式暂不支持。

当前版本若为emTextureMode时，则只支持PLAYM4_TEXTURE_DOUBLE。

当前版本若为ulDisplayType时，则只支持PLAYM4_MODEL_SOLID。

当前版本若为emModelType时，则只支持PLAYM4_MODELTYPE_EAGLE_EYE。

当前版本nTransformMode只支持0。

See Also

PlayM4_SR_SetConfig


PLAYM4SRMODELMODE

渲染到D模型的相关参数。

struct{
  bool                        bModelMode;
  PLAYM4SRTEXTUREMODE                           emTextureMode;
  unsigned long                          ulDisplayType;
  unsigned int                          nTransformMode;
  PLAYM4SRMODELTYPE                           emModelType;
}PLAYM4SRMODELMODE;

Members

bModelMode
是否将渲染到D模型上
emTextureMode
纹理贴图模式双面外表面内表面
enum tagPLAYM4SRTextureMode{
  PLAYM4_TEXTURE_DOUBLE    = 0x0,     //双面贴纹理
  PLAYM4_TEXTURE_OUTER   = 0x1,     //外表面贴纹理
  PLAYM4_TEXTURE_INNER = 0x2      //内表面贴纹理
}PLAYM4SRTEXTUREMODE
ulDisplayType
按位组合SR_MODEL_SOLID | SR_MODEL_FRAME | SR_MODEL_AXIS
nTransformMode
0 线框坐标轴随模型变换 1 线框坐标轴不随模型变换
emModelType
模型类型，鱼眼半球，鹰眼碗模型等
enum tagPLAYM4SRModelType{
  PLAYM4_MODELTYPE_HEMISPHERE    = 0x0,     //鱼眼视频用半球模型
  PLAYM4_MODELTYPE_EAGLE_EYE   = 0x1,     //碗状类半球模型用于鹰眼拼接
  PLAYM4_MODELTYPE_CUBE = 0x2      //立方体模型
}PLAYM4SRMODELTYPE

See Also

PlayM4_SR_SetConfig


PLAYM4SRTRANSFERELEMENT

旋转单元结构体。

struct{
  float     fAxisX;
  float     fAxisY;
  float     fAxisZ;
  float     fValue;
}PLAYM4SRTRANSFERELEMENT;

Members

fAxisX
X坐标
fAxisY
Y坐标
fAxisZ
Z坐标
fValue
放大缩小值，fValue>0.0时放大，反之缩小，同时内部会控制整个球面不会无限放大或者缩小

Remarks

旋转角度是角度值 不管取值如何 内部都会归一化到 -2*PI -- 2*pi。

See Also

PLAYM4SRTRANSFERPARAM


PLAYM4SRTRANSFERPARAM

旋转组合参数结构体。

struct{
  PLAYM4SRTRANSFERELEMENT     *pTransformElement,
  unsigned int                        nTransformCount;
}PLAYM4SRTRANSFERPARAM;

Members

pTransformElement
旋转的坐标轴
nTransformCount
旋转的组合次数

Remarks

nTransformCount 旋转次数暂无意义，每次调用接口默认旋转一次。

See Also

PlayM4_SR_Rotate


PTZPARAM

PTZ 校正的参数结构体。

struct{
  float      fPTZPositionX;
  float      fPTZPositionY;
}PTZPARAM;

Members

fPTZPositionX
PTZ 显示的中心位置 X坐标
fPTZPositionY
PTZ 显示的中心位置 Y坐标

Remarks

若鱼眼安装模式为FEC_PLACE_FLOOR 和FEC_PLACE_CEILING，坐标（fPTZPositionX，fPTZPositionY)到(0.5,0.5)的距离需要小于等于0.4，否则设置无效。
若鱼眼安装模式为FEC_PLACE_WALL模式，则必须满足：
(fPositionY - 0.5f)*(fPTZPositionY- 0.5f) + (fPTZPositionX- 0.5f)*(fPTZPositionX- 0.5f) <= 0.16
若令:
zeta = asin((fPTZPositionY- 0.5f) / 0.5f); //直角坐标系Y坐标转垂直角度
zcos = cos(zeta)；
zsin = sin(zeta);
必须满足((fPTZPositionX- 0.5f) / 0.5f / zcos)<= 1 且 ((fPTZPositionX- 0.5f) / 0.5f / zcos))>= -1
否则设置无效。

设置的鱼眼矫正区域，处于很边缘的地方，PTZ校正设置也会失效。处于很边缘的地方指的是：一个圆（鱼眼镜头），画一个外切正方形，在正方形内、圆外（包括圆边界）的4个角、4个边。

See Also

PlayM4_FEC_SetParam

PlayM4_FEC_GetParam


RECORD_DATA_INFO

预录像数据信息结构体。

struct{
  long              nType;
  long              nStamp;
  long              nFrameNum;
  long              nBufLen;
  char*              pBuf;
 PLAYM4_SYSTEM_TIME  stSysTime,
}RECORD_DATA_INFO;

Members

nType
数据类型，如文件头，视频，音频，私有数据等；
nStamp
时间戳；
nFrameNum
帧号
nBufLen
数据长度
pBuf
帧数据，以帧为单位回调
stSysTime
全局时间

See Also

PlayM4_SetPreRecordCallBack


RENDERSUPPORT

渲染支持信息。

struct{
  unsigned char     bDDraw;
  unsigned char     bD3D9Surface;
  unsigned char     bD3D9Texture;
  unsigned char     bD3D11;
  unsigned char     nGPUType;
  unsigned char     chValidFlag;
  unsigned char     nReserved[10];
}RENDERSUPPORT;

Members

bDDraw
判断是否支持Draw渲染
bD3D9Surface
判断是否支持D3D9表面渲染
bD3D9Texture
判断是否支持D3D9纹理渲染
bD3D11
判断是否支持D3D11渲染
nGPUType
渲染探测GPU类型 0-无; 1-Intel;2-NVIDIA;3-AMD；4-Mirsoft Basic Render-与硬解探测gpu定义有差异
chValidFlag
为1表示该块显卡的渲染能力集信息能正常获取到
nReserved
保留字段

See Also

ENGINESUPPORT


RunTimeInfo

选择区域参数结构体。

struct{
  int              nRunTimeModule;
  int              nStrVersion;
  int              nFrameTimeStamp;
  int              nFrameNum;
  int              nErrorCode;
  unsigned char    reserved[12];
}RunTimeInfo;

Members

nRunTimeModule
当前运行模块：1- 解码模块，后续扩展
nStrVersion
数据返回的结构体版本，主要是为了兼容性，第一个版本定义成0x0001
nFrameTimeStamp
帧号
nFrameNum
时间戳
nErrorCode
错误码，目前为0
nErrorCode宏定义 | 宏定义值 | 类型含义
PLAYM4_RTINFO_HARDDECODE_ERROR | 0 | 硬解码致命(需要切软解)错误
PLAYM4_RTINFO_SOFTDECODE_ERROR | 1 | 软解码错误(暂无实现)
PLAYM4_RTINFO_MEDIAHEADER_ERROR | 2 | 媒体头错误
PLAYM4_RTINFO_SWITCH_SOFT_DEC | 3 | 切换至软解
PLAYM4_RTINFO_ALLOC_MEMORY_ERROR | 4 | 内存分配失败（这个错误码，PLAYM4_DECODE_MODULE 和PLAYM4_RENDER_MODULE这两个模块有作用）
PLAYM4_RTINFO_ENCRYPT_ERROR | 5 | 秘钥错误
reserved
保留字段

Remarks

当硬解码致命(需要切软解)错误时，回调会通知应用层：（1）应用层需要关闭这路硬解码，再开启软解；（2）或者上层不用处理，播放库内部自动切换为软解，再回调PLAYM4_RTINFO_SWITCH_SOFT_DEC错误码给到上层，播放库已切换为软解。

See Also

PlayM4_SetRunTimeInfoCallBackEx


SYNCDATA_INFO

图像和声音信息结构体。

typedef struct SYNCDATA_INFO { DWORD dwDataType; // DWORD dwDataLen; // BYTE* pData; // } SYNCDATA_INFO;
struct{
  DWORD             dwDataType;
  DWORD             dwDataLen;
  BYTE*             pData;
}SYNCDATA_INFO;

Members

dwDataType
和码流数据同步的附属信息类型，目前有：智能信息，车载信息；
dwDataLen
附属信息数据长度；
pData
指向附属信息数据结构的指针,比如IVS_INFO结构

See Also

PlayM4_RegisterIVSSurfaceDrawFunCB


VCA_RECT_F

目标信息结构体。

struct{
  float     x;
  float    y;
  float     width;
  float    height
}VCA_RECT_F;

Members

x
矩形左上角X轴坐标
y
矩形左上角Y轴坐标
width
矩形宽度
height
矩形高度

See Also

PlayM4_RegisterIVSDrawFunCB_EX

INTEL_INFO_EX

VCA_TARGET_LIST_EX

VCA_RECT_F


VCA_TARGET_EX

目标信息结构体。

struct{
  unsigned int     ID;
   unsigned char     reserved[8];
  VCA_RECT_F    rect,
  unsigned char    reserved1[40]
}VCA_TARGET_EX;

Members

ID
ID
reserved
保留字节
rect
目标框
reserved1
保留字节

See Also

PlayM4_RegisterIVSDrawFunCB_EX

INTEL_INFO_EX

VCA_TARGET_LIST_EX


VCA_TARGET_LIST_EX

深眸目标结构体。

struct{
  unsigned int     target_num;
  VCA_TARGET_EX    *pstTarget
}VCA_TARGET_LIST_EX;

Members

target_num
目标数量
pstTarget
目标内容，按照VCA_TARGET_EX的大小进行偏移读取各个目标具体的信息即可

See Also

PlayM4_RegisterIVSDrawFunCB_EX

INTEL_INFO_EX


WATERMARK_INFO

水印信息结构体。

struct{
  char     *pDataBuf;
  long     nSize;
  long     nFrameNum;
  BOOL     bRsaRight;
  long     nReserved;
}WATERMARK_INFO;

Members

pDataBuf
水印数据指针
nSize
水印数据大小
nFrameNum
当前帧号
bRsaRight
是否是RSA加密（暂时作为保留参数）
nReserved
保留

See Also

PlayM4_SetCheckWatermarkCallBack


倍帧模块流程

开始解码播放后设定倍帧接口即可实现倍帧功能（PlayM4_MotionFlow），具体流程见流程图，

倍帧适用于帧率20以上的码流，若帧率在20以下的码流调用倍帧接口无效果。目前不支持GPU倍帧，只支持CPU倍帧。

示例代码

倍帧

#include <stdio.h>
#include <string.h>
#include <iostream>
#include "Windows.h"
#include "PlayM4.h"
using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

LONG g_lPort  =  -1;

void main()
{
       BOOL   bFlag = FALSE;
    DWORD  dwErr = 0;

     //---------------------------------------
    // 获取控制台窗口句柄
    HMODULE hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

      if (g_lPort == -1)
      {
          bFlag = PlayM4_GetPort(&g_lPort);
          if (bFlag == FALSE)
          {
               dwErr = PlayM4_GetLastError(g_lPort);
               return;
           }
        }

    //---------------------------------------
    // 获取显示窗口句柄
    HWND hWnd = GetConsoleWindow();

    bFlag = PlayM4_OpenFile(g_lPort,"test.mp4");

    bFlag = PlayM4_Play(g_lPort,hWnd);

    //开启CPU倍帧
    PlayM4_MotionFlow(g_lPort,1);

    sleep(10000);

    PlayM4_Stop(g_lPort);

    //关闭CPU倍帧
    PlayM4_MotionFlow(g_lPort,0);

    PlayM4_CloseFile(g_lPort);

    PlayM4_FreePort(g_lPort);

    g_lPort = -1;

}


视频增强模块流程

视频增强模块包括图像基本调节、局部增强、去雾、去噪、锐化、去块滤波、色彩平衡、镜头畸变校正。

  • 图像基本调节：包括调节亮度、对比度、饱和度。实现对图像效果的基本的调节，调用的接口为PlAYM4_VIE_SetModuConfig和PlayM4_VIE_SetParaConfig；
  • 局部增强：增强图像中的有用信息，它可以是一个失真的过程，其目的是要改善图像的视觉效果，针对给定图像的应用场合，有目的地强调图像的整体或局部特定，将原来不清晰的图像变得清晰或强调某些感兴趣的特征，扩大图像中不同物体特征之间的差别，抑制不感兴趣的特征，使之改善图像质量、丰富信息量，加强图像判读和识别效果，满足某些特殊分析的需要。调用的接口为PlAYM4_VIE_SetModuConfig和PlayM4_VIE_SetParaConfig；
  • 去雾模块：接近地面的空气中的水蒸气由于接触较冷的地表，因为凝结成小水滴或冰晶，使能见度不足一公里叫雾。去雾功能可以增强图像能见度，使得图像中原来模糊的地方变得清晰。调用的接口为PlAYM4_VIE_SetModuConfig和PlayM4_VIE_SetParaConfig；
  • 去噪模块：现实中的数字图像在数字化和传输过程中常收到成像设备与外部环境噪声干扰等影响，成为含噪图像或噪声图像。减少数字图像中噪声的过程称为图像去噪。调用的接口为PlAYM4_VIE_SetModuConfig和PlayM4_VIE_SetParaConfig；
  • 锐化模块：图像锐化是补偿图像的轮廓，增强图像的边缘及灰度跳变的部分，使图像变得清晰。调用的接口为PlAYM4_VIE_SetModuConfig和PlayM4_VIE_SetParaConfig；
  • 去块滤波模块：“块效应”是基于块的变换编码在图像压缩编码中随着码率的降低，量化变得粗燥，在块的边界会出现不连续，形成重建图像的明显缺陷，称为块效应。为了减少块效用，在视频编解码标准中，通常会增加去块效应的模块。调用的接口为PlAYM4_VIE_SetModuConfig。
  • 色彩平衡模块：通过对图像的色彩平衡处理，可以校正图像色偏、过饱和或饱和度不足的情况，也可以根据自己的喜好和制作需要，调制需要的色彩，更好的完成画面效果。调用的接口为PlAYM4_VIE_SetModuConfig。
  • 镜头畸变矫正模块：镜头畸变实际上是光学透镜固有的透视失真的总称，也就是因为透视原因造成的失真。调用的接口为PlAYM4_VIE_SetModuConfig。

示例代码

#include <stdio.h>
#include <iostream>
#include "Windows.h"
#include "PlayM4.h"
using namespace std;
long m_lViePort = -1;
using namespace std;

typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;

void main()
{

    //---------------------------------------
    // 获取控制台窗口句柄
    HMODULE hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

    //获取播放库端口号
    PlayM4_GetPort(&m_lViePort);

    //打开待处理的文件
    PlayM4_OpenFile(m_lViePort,"test.mp4");

     //---------------------------------------
    // 获取显示窗口句柄
    HWND hWnd = GetConsoleWindow();
    PlayM4_Play(m_lViePort,hWnd);

    PLAYM4_VIE_PARACONFIG strVIEParaCfg = {0};
    //以去雾和降噪模块为例

    //设定去雾模块参数
    strVIEParaCfg.dehazeLevel   =  96;
    strVIEParaCfg.dehazeTrans  = 100;
    strVIEParaCfg.dehazeBright  = 120

    //设定降噪模块参数
    strVIEParaCfg.denoiseLevel   =  60;

    strVIEParaCfg.moduFlag = PLAYM4_VIE_MODU_DEHAZE|PLAYM4_VIE_MODU_DENOISE;
    PlayM4_VIE_SetModuConfig(m_lViePort,PLAYM4_VIE_MODU_DEHAZE|PLAYM4_VIE_MODU_DENOISE,TRUE);
    PlayM4_VIE_SetParaConfig(m_lViePort,&strVIEParaCfg);
    PlayM4_VIE_SetRegion(m_lViePort,1,NULL);

    Sleep(10000);

    //停止播放
    PlayM4_Stop(m_lViePort);

    //关闭文件
    PlayM4_CloseFile(m_lViePort);

    //关闭视频增强模块
    PlayM4_VIE_SetModuConfig(m_lViePort,PLAYM4_VIE_MODU_DEHAZE|PLAYM4_VIE_MODU_DENOISE,FALSE);

    //释放播放库端口
    PlayM4_FreePort(m_lViePort);
    m_lViePort  =  -1;
 }