Browse Source

摄像机配置

platform-api
4670101279 2 years ago
parent
commit
5796507313
  1. 29
      ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayDefs.java
  2. 88
      ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayDelegates.java
  3. 139
      ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayEnums.java
  4. 632
      ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayLib.java
  5. 303
      ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayStructs.java

29
ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayDefs.java

@ -0,0 +1,29 @@
package sdk.java.lib.playmanager;
public class PlayDefs {
public static final int PLAY_LOG_ATTRIBUTE_ENABLE = 0x01;
public static final int PLAY_LOG_ATTRIBUTE_PRINT = 0x02;
public static final int PLAY_LOG_ATTRIBUTE_WRITE = 0x04;
// 按帧序号获取关键帧
public static final int TYPE_BY_FRAME_NUMBER = 1;
// 按帧事件获取关键帧
public static final int TYPE_BY_FRAME_TIME = 2;
public static final int MAX_SOURCE_BUF_SIZE = 1024 * 1024 * 100; // 数据流缓冲区最大长度
public static final int MIN_SOURCE_BUF_SIZE = 1024 * 50; // 数据流缓冲区最小长度
public static final int STREAM_TYPE_REALTIME = 0; // 实时流模式
public static final int STREAM_TYPE_FILE = 1; // 文件流模式
public static final int PlayMS_QueryTime = 1; //编码中时间信息
public static final int PlayMS_QueryFileRate = 2; //帧率信息
public static final int PlayMS_QueryMediaInfo = 3; //媒体信息
public static final int PlayMS_QueryRenderNum = 4; //当前要渲染的帧号
public static final int PlayMS_QueryRenderTime = 5; //当前要渲染的时间
public static final int PlayMS_QuerySrcTime = 6; //视频源中的时间信息
public static final int PlayMS_QueryCurRenderNum = 7; //当前帧号。4是上一帧的帧号
public static final int PlayMS_QueryRenderPTS = 8; //当前要渲染的帧时间戳
}

88
ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayDelegates.java

@ -0,0 +1,88 @@
package sdk.java.lib.playmanager;
import com.sun.jna.Callback;
import com.sun.jna.Pointer;
public class PlayDelegates
{
/**********************************************************************************
参数: [in]
HDC hDc 绘图设备上下文句柄
void* pUserData 用户参数
**********************************************************************************/
public interface fRegDrawCallBack extends Callback
{
public void invoke(int nPort, Pointer hDc, Pointer pUserData);
}
/**********************************************************************************
参数: [in]
pBuf 数据指针
nType 数据类型
nLen 数据大小
nRealLen 数据真实大小
pReserved 保留参数
pUserData 用户自定义数据
**********************************************************************************/
public interface fGetIVSInfoCallBack extends Callback
{
public void invoke(Pointer pBuf, int nType, int nLen, int nRealLen, Pointer pReserved, Pointer pUserData);
}
/**********************************************************************************
参数 [in]
FRAME_DEC_INFO* pFrameDecodeInfo: 帧内容
FRAME_ATTRI_INFO_EX* pFrameInfo: 帧信息
void* pUserData: 用户参数
**********************************************************************************/
public interface fDecodeCallBack extends Callback
{
public void invoke(int nPort, Pointer pFrameDecodeInfo, Pointer pFrameInfo, Pointer pUserData);
}
/**********************************************************************************
参数 [in]
char* pYuvBuf: 视频帧 YUV 数据
void* pReserved: 保留参数
**********************************************************************************/
public interface fDisplayCallBack extends Callback
{
public void invoke(int nPort, Pointer pYuvBuf, int nYuvSize, int nWidth, int nHeight, int nStamp, int nType, Pointer pReserved);
}
/**********************************************************************************
参数 [in]
char* pAudioBuf: 视频帧 YUV 数据
void* pUserData: 用户参数
**********************************************************************************/
public interface fAudioCallBack extends Callback
{
public void invoke(int nPort, Pointer pAudioBuf, int nSize, int nStamp, int nType, Pointer pUserData);
}
public interface fFileEndCallBack extends Callback
{
public void invoke(int nPort, Pointer pUserData);
}
/**********************************************************************************
参数 [in]
char* pBuf: 水印数据buffer指针
void* pUserData: 用户参数
**********************************************************************************/
public interface fGetWaterMarkInfoCallBack extends Callback
{
public void invoke(Pointer pBuf, int nKey, int nLen, int nRealLen, int nType, Pointer pUserData);
}
/**********************************************************************************
参数 [in]
char* buf: 水印数据缓冲
void* pUserData: 用户参数
**********************************************************************************/
public interface fGetWaterMarkInfoCallBackEx extends Callback
{
public void invoke(int nPort, Pointer buf, int lTimeStamp, int lInfoType, int len, int reallen, int lCheckResult, Pointer pUserData);
}
}

139
ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayEnums.java

@ -0,0 +1,139 @@
package sdk.java.lib.playmanager;
import com.sun.jna.Structure;
public class PlayEnums {
// 语言种类
public static class ENUM_RENDER_TYPE extends Structure
{
// 智能数据渲染
public static final int RENDER_TYPE_INTL = 0x63;
// 动检数据渲染
public static final int RENDER_TYPE_MOTION = 0x65;
};
// YUV 数据类型
public static class ENUM_YUV_TYPE extends Structure
{
// UYVY类型的YUV数据
public static final int TYPE_UYUV = 1;
// 4:2:0类型YUV数据
public static final int TYPE_IYUV = 3;
// RGB32类型YUV数据
public static final int TYPE_RGB32 = 7;
};
// 音频数据类型
public static class ENUM_AUDIO_DATA_TYPE extends Structure
{
// 8位音频数据类型
public static final int TYPE_AUDIO_DATA_8 = 100;
// 16位音频数据类型
public static final int TYPE_AUDIO_DATA_16 = 101;
};
// 帧缓冲类型
public static class ENUM_MEDIA_BUF_TYPE extends Structure
{
// 视频源缓冲
public static final int TYPE_MEDIA_VIDEO_SRC_BUF = 1;
// 音频源缓冲
public static final int TYPE_MEDIA_AUDIO_SRC_BUF = 2;
// 解码后视频数据缓冲
public static final int TYPE_MEDIA_VIDEO_RENDER_BUF = 3;
// 解码后音频数据缓冲
public static final int TYPE_MEDIA_AUDIO_RENDER_BUF = 4;
};
// 多媒体帧类型
public static class ENUM_MEDIA_FRAME_TYPE extends Structure
{
public static final int MEDIA_FRAME_TYPE_VIDEO = 1; // 视频帧类型
public static final int MEDIA_FRAME_TYPE_AUDIO = 2; // 音频帧类型
public static final int MEDIA_FARMA_TYPE_DATA = 3; // 数据帧类型
};
// 帧子类型
public static class ENUM_SUB_FRAME_TYPE extends Structure
{
public static final int SUB_FRAME_TYPE_VIDEO_I = 0; // I帧
public static final int SUB_FRAME_TYPE_VIDEO_P = 1; // P帧
public static final int SUB_FRAME_TYPE_VIDEO_B = 2; // B帧
public static final int SUB_FRAME_TYPE_VIDEO_S = 3; // S帧
public static final int SUB_FRAME_TYPE_VIDEO_MJPEG = 8; // MJPEG
};
// 编码格式
public static class ENUM_VIDEO_ENCODE_TYPE extends Structure
{
public static final int VIDEO_ENCODE_TYPE_UNKNOWN = 0x00; // 未知视频编码格式
public static final int VIDEO_ENCODE_TYPE_MPEG4 = 0x01; // MPEG4 视频编码格式
public static final int VIDEO_ENCODE_TYPE_HISI_H264 = 0x02; // 海思H264视频编码格式
public static final int VIDEO_ENCODE_TYPE_JPEG = 0x03; // 标准JPEG视频编码格式
public static final int VIDEO_ENCODE_TYPE_AVS = 0x07; // 标准AVS视频编码格式
public static final int VIDEO_ENCODE_TYPE_STD_H264 = 0x08; // 标准H264视频编码格式
public static final int VIDEO_ENCODE_TYPE_MPEG2 = 0x09; // MPEG2视频编码格式
public static final int VIDEO_ENCODE_TYPE_RY_H264 = 0x0D; // 我司H264视频编码格式
public static final int VIDEO_ENCODE_TYPE_RY_H265 = 0x0E; // 我司H265视频编码格式
};
public static class ENUM_STREAM_PACKAGE_TYPE extends Structure
{
public static final int STREAM_PACKAGE_TYPE_UNKNOWN = 0x00; // 未知码流
public static final int STREAM_PACKAGE_TYPE_MPEG4 = 0x01; // MPEG4
public static final int STREAM_PACKAGE_TYPE_AUDIO = 0x06; // 音频
public static final int STREAM_PACKAGE_TYPE_PS = 0x07; // PS(MPEG-2)
public static final int STREAM_PACKAGE_TYPE_ASF = 0x09; // ASF
public static final int STREAM_PACKAGE_TYPE_TS = 0x0C; // TS(MPEG-2)
public static final int STREAM_PACKAGE_TYPE_SVC = 0x0D; // SVC
public static final int STREAM_PACKAGE_TYPE_AVI = 0x0E; // AVI
public static final int STREAM_PACKAGE_TYPE_MP4 = 0x0F; // MP4
public static final int STREAM_PACKAGE_TYPE_CGI = 0x10; // CGI
public static final int STREAM_PACKAGE_TYPE_WAV = 0x11; // WAV音频
public static final int STREAM_PACKAGE_TYPE_FLV = 0x12; // FLV
public static final int STREAM_PACKAGE_TYPE_RYMS = 0x13; // 我司码流
public static final int STREAM_PACKAGE_TYPE_MKV = 0x14; // MKV
public static final int STREAM_PACKAGE_TYPE_RTP = 0x15; // RTP
public static final int STREAM_PACKAGE_TYPE_RAW_MPEG4 = 0x16; // MPEG4裸码流
public static final int STREAM_PACKAGE_TYPE_RAW_H264 = 0x17; // H264裸码流
public static final int STREAM_PACKAGE_TYPE_RAW_H265 = 0x18; // H265裸码流
public static final int STREAM_PACKAGE_TYPE_WMV = 0x19; // WMV
public static final int STREAM_PACKAGE_TYPE_RAW_MPEG2 = 0x20; // MPEG2裸码流
public static final int STREAM_PACKAGE_TYPE_RAW_SVAC = 0x21; // SVAC裸码流
public static final int STREAM_PACKAGE_TYPE_MOV = 0x22; // MOV
public static final int STREAM_PACKAGE_TYPE_VOB = 0x23; // VOB
};
// 数据帧的分析方式
public static class SA_DD_PARSE_TYPE extends Structure
{
public static final int DD_PARSE_TYPE_UNKNOWN = -1; // 未知类型
public static final int DD_PARSE_TYPE_INTL = 0x63; // 智能帧物体类型
public static final int DD_PARSE_TYPE_MOTION = 0x65; // 动检帧类型
};
// 智能帧物体无类型
public static class SA_DD_INTL_OBJECT_TYPE extends Structure
{
public static final int DD_INITL_OBJECT_UNKNOWN = -1; // 未知物体
public static final int DD_INITL_OBJECT_FACE = 0x30; // 人脸物体
public static final int DD_INITL_OBJECT_TRAFFIC = 0x40; // 交通物体
public static final int DD_INITL_OBJECT_BODY = 0x50; // 人形物体
public static final int DD_INITL_OBJECT_GOODS = 0x51; // 商品
};
}

632
ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayLib.java

@ -0,0 +1,632 @@
package sdk.java.lib.playmanager;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.DoubleByReference;
import com.sun.jna.ptr.IntByReference;
import sdk.java.lib.PlatUtils;
import sdk.java.lib.playmanager.PlayDelegates.fGetIVSInfoCallBack;
import sdk.java.lib.playmanager.PlayDelegates.fAudioCallBack;
import sdk.java.lib.playmanager.PlayDelegates.fDecodeCallBack;
import sdk.java.lib.playmanager.PlayDelegates.fDisplayCallBack;
import sdk.java.lib.playmanager.PlayDelegates.fFileEndCallBack;
import sdk.java.lib.playmanager.PlayDelegates.fGetWaterMarkInfoCallBack;
import sdk.java.lib.playmanager.PlayDelegates.fGetWaterMarkInfoCallBackEx;
import sdk.java.lib.playmanager.PlayDelegates.fRegDrawCallBack;
public interface PlayLib extends Library
{
public static String ry_play_library_name = "playmanager";
PlayLib instance = (PlayLib)Native.loadLibrary(PlatUtils.sdk_plat_getLoadLibrary(ry_play_library_name), PlayLib.class);
//////////////////////////////////////////////////////////////////////////////////////////////
/**********************************************************************************
函数 PlayMS_SetLogOption
参数 [in] BYTE byOption 日志选项
返回值 成功返回TRUE, 失败返回FALSE
说明
**********************************************************************************/
public boolean PlayMS_SetLogOption(int byOption);
/**********************************************************************************
函数 PlayMS_Play
参数 [in] int nPort 通道号
[in] HWND hWnd 播放窗口句柄
返回值 成功返回TRUE, 失败返回FALSE
说明 开始播放 如果当前已经是播放状态则恢复到正常播放速度
在解码线程中如果窗口句柄为NULL不显示画面但不影响解码
**********************************************************************************/
public boolean PlayMS_Play(int nPort, Pointer hWnd);
/**********************************************************************************
函数 PlayMS_Stop
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 停止播放
**********************************************************************************/
public boolean PlayMS_Stop(int nPort);
/**********************************************************************************
函数 PlayMS_GetCurrentFrameRate
参数 [in] int nPort 通道号
返回值 当前帧率
说明 获取当前帧率
**********************************************************************************/
public int PlayMS_GetCurrentFrameRate(int nPort);
/**********************************************************************************
函数: PlayMS_SetIVSCallBack
参数: [in] nPort 解码通道
[in] pGetIVSInfoCB 设置解码回调
pBuf 数据指针
nType 数据类型
nLen 数据大小
nRealLen 数据真实大小
pReserved 保留参数
pUserData 用户自定义数据
[in] pUserData 用户自定义数据
返回: 成功返回TRUE, 失败返回FALSE
说明: 设置IVS回调
**********************************************************************************/
public boolean PlayMS_SetIVSCallBack(int nPort, fGetIVSInfoCallBack pGetIVSInfoCB, Pointer pUserData);
/**********************************************************************************
函数 PlayMS_GetCurrentFrameRate
参数 [in] int nPort 通道号
[out] double *pBitRate: 实时码率值
返回值 实时码率
说明 获取实时码率
**********************************************************************************/
public boolean PlayMS_GetRealFrameBitRate(int nPort, DoubleByReference pBitRate);
/**********************************************************************************
函数 PlayMS_GetPictureSize
参数 [in] int nPort 通道号
[in] int *pWidth: 图片宽度
[in] int *pHeight: 图片高度
返回值 成功返回TRUE, 失败返回FALSE
说明 获取码流中原始图像的大小该函数只有当播放开始后才能获取准确的值
**********************************************************************************/
public boolean PlayMS_GetPictureSize(int nPort, IntByReference pWidth, IntByReference pHeight);
/**********************************************************************************
函数 PlayMS_GetStreamOpenMode
参数 [in] int nPort 通道号
返回值 成功返回流模式失败返回-1
说明 获取码流打开模式
0 - STREAM_TYPE_REALTIME实时流模式
1 - STREAM_TYPE_FILE文件流模式
**********************************************************************************/
public int PlayMS_GetStreamOpenMode(int nPort);
/**********************************************************************************
函数 PlayMS_SetStreamOpenMode
参数 [in] int nPort 通道号
[in] int nMode 播放模式
返回值 成功返回TRUE, 失败返回FALSE
说明 设置码流打开模式需在PlayMS_Play之前调用
**********************************************************************************/
public boolean PlayMS_SetStreamOpenMode(int nPort, int dwMode);
/**********************************************************************************
函数 boolean PlayMS_GetFreePort
参数 [out] int *pnPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 获取未使用的通道号通道号的上限为500
通过该通道号来区分不同路的视频与PlayMS_ReleasePort匹对使用
**********************************************************************************/
public boolean PlayMS_GetFreePort(IntByReference pnPort);
/**********************************************************************************
函数 BOOL PlayMS_ReleasePort
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 释放通道号与PlayMS_GetFreePort匹对使用
**********************************************************************************/
public boolean PlayMS_ReleasePort(int nPort);
/**********************************************************************************
函数 PlayMS_ResetSourceBuffer
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回 FLASE.
说明 清空流播放模式下源缓冲数据一般在关闭码流后调用
**********************************************************************************/
public boolean PlayMS_ResetSourceBuffer(int nPort);
/**********************************************************************************
函数: PlayMS_RegisterDrawCallBack
描述: 注册一个画图函数
参数: [in]nPort 端口号
[in]fRegDrawCB 绘图回调函数
nPort 端口号
hDc 绘图设备上下文句柄
pUserData 用户参数
[in]pUserData 回调函数的用户参数
返回值: 成功返回TRUE, 失败返回FALSE
说明: 注册一个绘图回调函数用户可以在该绘图回调函数中绘制用户私有数据
如用户可以在视频表面绘制一个矩形框绘图回调函数中不能作过多操作
否则会由于该类操作消耗过多时间从而导致视频实时性受到影响
**********************************************************************************/
public boolean PlayMS_RegisterDrawCallBack(int nPort, fRegDrawCallBack fRegDrawCB, Pointer pUserData);
/**********************************************************************************
函数 PlayMS_OpenStream
参数 [in] int nPort: 通道号
[in] int nBufPoolSize: 设置码流数据的缓冲区大小
范围是[SOURCE_BUF_MIN~ SOURCE_BUF_MAX]
如果码流数据较均匀可调小该值
如果码流数据不均匀可调大该值
返回值 成功返回TRUE, 失败返回FALSE
说明 打开码流播放
**********************************************************************************/
public boolean PlayMS_OpenStream(int nPort, int nBufPoolSize);
/**********************************************************************************
函数 BOOL PlayMS_CloseStream(int nPort)
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 关闭码流播放
**********************************************************************************/
public boolean PlayMS_CloseStream(int nPort);
/**********************************************************************************
函数 PlayMS_InputData
参数 [in] int nPort 通道号
[in] PBYTE pBuf 缓冲区数据地址
[in] int nSize 缓冲区数据大小
返回值 成功返回TRUE, 失败返回FALSE
说明 输入数据流需在打开流PlayMS_OpenStream且播放PlayMS_Play后才能输入数据
如果返回FALSE很可能是缓冲区溢满可等待一会儿再输入数据或者扩大缓冲区
**********************************************************************************/
public boolean PlayMS_InputData(int nPort, Pointer pBuf, int nSize);
/**********************************************************************************
函数 PlayMS_SetDecodeCallBack
参数 [in] int nPort 通道号
[in] fDecodeCallBack fDecCB: 解码回调函数指针
nPort: 通道号
pFrameDecodeInfo: 帧内容
pFrameInfo: 帧信息
pUser: 用户参数
[in] Pointer pUser: 用户自定义参数
返回值 成功返回TRUE, 失败返回FALSE
说明 设置解码数据回调适用于只解码不显示的情况
需在PlayMS_Play之后调用在调用PlayMS_Stop之后自动失效
**********************************************************************************/
public boolean PlayMS_SetDecodeCallBack(int nPort, fDecodeCallBack fDecCB, Pointer pUserData);
/**********************************************************************************
函数 PlayMS_SetVisibleDecodeCallBack
参数 [in] int nPort 通道号
[in] fDecodeCallBack fDecCB: 解码回调函数指针
nPort: 通道号
pFrameDecodeInfo: 帧内容
pFrameInfo: 帧信息
pUser: 用户参数
[in] Pointer pUserData: 用户自定义参数
返回值 成功返回TRUE, 失败返回FALSE
说明 设置解码数据回调适用于解码且显示的情况
需在PlayMS_Play之后调用在调用PlayMS_Stop之后自动失效
**********************************************************************************/
public boolean PlayMS_SetVisibleDecodeCallBack(int nPort, fDecodeCallBack fDecCB, Pointer pUserData);
/**********************************************************************************
函数 PlayMS_SetDisplayCallBack
参数 [in] int nPort 通道号
[in] fDisplayCallBack fDisplayCB: 显示回调函数指针
nPort: 通道号
pYuvBuf: 视频帧 YUV 数据
nYuvSize: YUV 数据大小
nWidth: 画面宽,单位像素
nHeight: 画面高,单位像素
nStamp: 时间戳信息
nType: 视频帧类型, TYPE_IYUV, TYPE_AUDIODATA_16, TYPE_RGB32
pReserved: 保留参数
[in] Pointer pUserData: 用户自定义参数
返回值 成功返回TRUE, 失败返回FALSE
说明 设置视频抓图回调函数当用户想得到一段时间内的抓图数据可调用该函数
当将回调函数设置为NULL时, 停止函数回调
其中设置的回调函数只有在有解码数据时才被调用并由用户处理抓图数据
该函数可在任何时候调用
**********************************************************************************/
public boolean PlayMS_SetDisplayCallBack(int nPort, fDisplayCallBack fDisplayCB, Pointer pUserData);
/**********************************************************************************
函数 PlayMS_CatchPic
参数 [in] int nPort 通道号
[in] char* sFileName: 图片的文件名称
返回值 成功返回TRUE, 失败返回FALSE
说明 抓图当用户想实现一次抓一张图可调用该函数
该函数在视频暂停单帧播放时也可使用
**********************************************************************************/
public boolean PlayMS_CatchPic(int nPort, String sFileName);
/**********************************************************************************
函数 PlayMS_SetPlayMethod
参数 [in] int nPort 通道号
[in] int nStartTime: 开始播放的时间(ms)
[in] int nSlowTime: 开始慢放的时间(ms)
[in] int nFastTime: 开始快放的时间(ms)
[in] int nFailedTime: 失败时间超过该时间则数据投递失败ms
返回值 成功返回TRUE, 失败返回FALSE
说明 设置播放的方法策略该函数只有在实时码流时调用才有效
**********************************************************************************/
public boolean PlayMS_SetPlayMethod(int nPort, int nStartTime, int nSlowTime, int nFastTime, int nFailedTime);
/**********************************************************************************
函数 PlayMS_SetDecCBStream
参数 [in] int nPort 通道号
[in] int dwStream: 码流类型1为视频流2为音频流3为复合流
返回值 成功返回TRUE, 失败返回FALSE
说明 设置解码回调的码流类型该函数需在PlayMS_Play之前调用
**********************************************************************************/
public boolean PlayMS_SetDecCBStream(int nPort, int dwStream);
/**********************************************************************************
函数 PlayMS_SetAudioCallBack
参数 [in] int nPort 通道号
[in] fAudioCallBack fAudioCB: 音频回调函数指针
nPort: 通道号
pAudioBuf: 音频缓存数据
nSize: 缓存数据大小
nStamp: 时标信息,单位毫秒
nType: 音频数据类型
8位音频数据类型 TYPE_AUDIO_DATA_8 = 100,
16位音频数据类型 TYPE_AUDIO_DATA_16 = 101,
pUserData: 用户参数
[in] Pointer pUserData: 用户参数
返回值 成功返回TRUE, 失败返回FALSE
说明 设置音频解码数据回调
**********************************************************************************/
public boolean PlayMS_SetAudioCallBack(int nPort, fAudioCallBack fAudioCB, Pointer pUserData);
/**********************************************************************************
函数 PlayMS_StartDataRecord
参数 [in] int nPort 通道号
[in] char *sFileName: 录像文件名
如果文件名中有不存在的文件夹,就创建该文件夹
[in] int nDataType: 0表示原始视频流; 1表示转换成AVI格式;
2表示转换成ASF格式; 3分段保存文件
返回值 成功返回TRUE, 失败返回FALSE
说明 开始流数据录像该函数需在PlayMS_Play之后调用只有在实时码流时调用才有效
**********************************************************************************/
public boolean PlayMS_StartDataRecord(int nPort, String sFileName, int nDataType);
/**********************************************************************************
函数 PlayMS_WriteData
参数 [in] int nPort 通道号
[in] PBYTE pBuf: 码流数据
[in] int nSize: 码流大小
返回值 成功返回TRUE, 失败返回FALSE
说明 保存原始码流数据
**********************************************************************************/
public boolean PlayMS_WriteData(int nPort, byte pBuf, int nSize);
/**********************************************************************************
函数 BOOL PlayMS_StopDataRecord(int nPort)
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 停止流数据录像
**********************************************************************************/
public boolean PlayMS_StopDataRecord(int nPort);
/**********************************************************************************
函数 PlayMS_QueryInfo
[in] int nPort 通道号
[in] int nQueryType: 指定查询类型主要类型如下
PlayMS_QueryTime 编码中时间信息
PlayMS_QueryFileRate 帧率信息
PlayMS_QueryMediaInfo 媒体信息
PlayMS_QueryRenderNum 当前要渲染的帧号上一帧的帧号
PlayMS_QueryRenderTime 当前要渲染的时间
PlayMS_QuerySrcTime 视频源中的时间信息
PlayMS_QueryCurRenderNum 当前帧号
PlayMS_QueryRenderPTS 当前时间戳
[out] char* pBuffer: 存放查询到的缓冲数据
[in] int nBufLen: 输入的缓冲区大小
[out] int* pRetLen: 存放查询的有效数据大小
返回值 成功返回TRUE, 失败返回FALSE
说明 查询指定通道的时间帧率等信息
**********************************************************************************/
public boolean PlayMS_QueryInfo(int nPort, int nQueryType, Pointer pBuffer, int nBufLen, IntByReference pRetLen);
/**********************************************************************************
函数 PlayMS_CreateStream
参数 [in] int nBufPoolSize 设置码流数据的缓冲区大小
范围是[MIN_SOURCE_BUF_SIZE, MAX_SOURCE_BUF_SIZE].
返回值 成功返回TRUE, 失败返回FALSE
说明 分配空闲通道号并打开码流就是PlayMS_GetFreePort和PlayMS_OpenStream接口的合集
**********************************************************************************/
public int PlayMS_CreateStream(int nBufPoolSize);
/**********************************************************************************
函数 PlayMS_DestroyStream
参数 [in] int nPort: 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 关闭码流并释放申请的通道号
**********************************************************************************/
public boolean PlayMS_DestroyStream(int nPort);
/**********************************************************************************
函数 BOOL PlayMS_OpenFile(int nPort, LPSTR sFileName)
参数 [in] int nPort: 通道号
[in] LPSTR sFileName: 文件名
返回值 成功返回TRUE, 失败返回FALSE
说明 打开文件需在PlayMS_Play之前调用
**********************************************************************************/
public boolean PlayMS_OpenFile(int nPort, String sFileName);
/**********************************************************************************
函数 BOOL PlayMS_CloseFile(int nPort)
参数 [in] int nPort: 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 关闭文件需在PlayMS_Stop之后调用
**********************************************************************************/
public boolean PlayMS_CloseFile(int nPort);
/**********************************************************************************
函数 BOOL PlayMS_Pause(int nPort, int nPause)
参数 [in] int nPort 通道号
[in] int nPause: 1为暂停0为恢复播放
返回值 成功返回TRUE, 失败返回FALSE
说明 暂停播放, 或者恢复播放
**********************************************************************************/
public boolean PlayMS_Pause(int nPort,int nPause);
/**********************************************************************************
函数 PlayMS_Fast
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 播放提速每调用一次播放速度乘2播放速度范围为[1/64,64]
调用PlayMS_Play后从当前位置恢复到正常播放速度
**********************************************************************************/
public boolean PlayMS_Fast(int nPort);
/**********************************************************************************
函数 PlayMS_Slow
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 播放减速每调用一次播放速度除2播放速度范围为[1/64, 64]
调用PlayMS_Play后从当前位置恢复到正常播放速度
**********************************************************************************/
public boolean PlayMS_Slow(int nPort);
/**********************************************************************************
函数 PlayMS_SetPlaySpeed
参数 [in] int nPort 通道号
[in] float fCoff 播放速度范围为[1/64,64]
返回值 成功返回TRUE, 失败返回FALSE
说明 设置视频播放速度
**********************************************************************************/
public boolean PlayMS_SetPlaySpeed(int nPort, float fCoff);
/**********************************************************************************
函数 PlayMS_OneByOne
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 单帧播放每调用一次播放一帧调用PlayMS_Play后恢复正常播放
**********************************************************************************/
public boolean PlayMS_OneByOne(int nPort);
/**********************************************************************************
函数 PlayMS_SetPlayPos
参数 [in] int nPort 通道号
[in] float fRelativePos: 文件长度的百分比
返回值 成功返回TRUE, 失败返回FALSE
说明 设置播放文件的相对位置(百分比)需在PlayMS_Play之后调用
**********************************************************************************/
public boolean PlayMS_SetPlayPos(int nPort, float fRelativePos);
/**********************************************************************************
函数 PlayMS_SetPlayDirection
参数 [in] int nPort 通道号
[in] int nDirection 播放方向0: 向前1: 向后)
返回值 成功返回TRUE, 失败返回FALSE
说明 设置视频文件的播放方向
**********************************************************************************/
public boolean PlayMS_SetPlayDirection(int nPort, int nDirection);
/**********************************************************************************
函数 PlayMS_GetPlayPos
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 获取播放文件的相对位置(百分比)需在PlayMS_Play之后调用
**********************************************************************************/
public float PlayMS_GetPlayPos(int nPort);
/**********************************************************************************
函数 PlayMS_SetVolume
参数 [in] int nPort 通道号
[in] short nVolum: 音量值范围为[0,0xFFFF]
返回值 成功返回TRUE, 失败返回FALSE
说明 设置音量大小该接口设置的音量是声卡输出的主音量
会对其他应用的音量有影响
**********************************************************************************/
public boolean PlayMS_SetVolume(int nPort, short nVolume);
/**********************************************************************************
函数 PlayMS_GetVolume
参数 [in] int nPort 通道号
返回值 成功返回音量值失败返回值 <= 0
说明 获取声卡输出的音量
**********************************************************************************/
public short PlayMS_GetVolume(int nPort);
/**********************************************************************************
函数 PlayMS_PlaySound
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 以独占方式打开声音也就是一次只能打开一路声音
如果打开当前的声音则自动关闭之前已经打开的声音
建议和PlayMS_StopSound匹配使用
**********************************************************************************/
public boolean PlayMS_PlaySound(int nPort);
/**********************************************************************************
函数 PlayMS_StopSound
参数
返回值 成功返回TRUE, 失败返回FALSE
说明 关闭声音
**********************************************************************************/
public boolean PlayMS_StopSound();
/**********************************************************************************
函数 PlayMS_GetFileTime
参数 [in] int nPort 通道号
返回值 四舍五入后文件时长的长度值
说明 获取文件的总时长单位为秒需在PlayMS_Play之后调用
**********************************************************************************/
public int PlayMS_GetFileTime(int nPort);
/**********************************************************************************
函数 PlayMS_GetPlayedTime
参数 [in] int nPort 通道号
返回值 成功时返回文件已播放时间失败时返回0
说明 获取文件已播放的时间单位为秒需在PlayMS_Play之后调用
**********************************************************************************/
public int PlayMS_GetPlayedTime(int nPort);
/**********************************************************************************
函数 PlayMS_GetPlayedTimeEx
参数 [in] int nPort 通道号
返回值 成功返回TRUE, 失败返回FALSE
说明 获取文件当前播放的时间单位为毫秒需在PlayMS_Play之后调用
**********************************************************************************/
public int PlayMS_GetPlayedTimeEx(int nPort);
/**********************************************************************************
函数 PlayMS_GetPlayedFrames
参数 [in] int nPort 通道号
返回值 文件已经解码的帧数
说明 获取文件已经解码的帧数
**********************************************************************************/
public int PlayMS_GetPlayedFrames(int nPort);
/**********************************************************************************
函数 PlayMS_GetFileTotalFrames
参数 [in] int nPort 通道号
返回值 文件总帧数
说明 获取文件的总帧数需在PlayMS_Play之后调用
**********************************************************************************/
public int PlayMS_GetFileTotalFrames(int nPort);
/**********************************************************************************
函数 BOOL PlayMS_SetPlayedTimeEx(int nPort,int nTime)
参数 [in] int nPort 通道号
[in] int nTime: 播放时间
返回值 成功返回TRUE, 失败返回FALSE
说明 设置文件播放到指定时间单位为毫秒需在PlayMS_Play之后调用
**********************************************************************************/
public boolean PlayMS_SetPlayedTimeEx(int nPort, int nTime);
/**********************************************************************************
函数 int PlayMS_GetCurrentFrameNum(int nPort)
参数 [in] int nPort 通道号
返回值 文件当前播放的帧序号
说明 获取文件当前播放的帧序号
如果视频不丢失该数值接近PlayMS_GetPlayedFrames的返回值
**********************************************************************************/
public int PlayMS_GetCurrentFrameNum(int nPort);
/**********************************************************************************
函数 int PlayMS_SetCurrentFrameNum(int nPort,int nFrameNum)
参数 [in] int nPort 通道号
[in] int nFrameNum: 帧序号
返回值 成功返回TRUE,失败返回FALSE
说明 设置文件当前播放的帧序号
**********************************************************************************/
public boolean PlayMS_SetCurrentFrameNum(int nPort,int nFrameNum);
/**********************************************************************************
函数 PlayMS_SetFileEndCallBack
参数 [in] int nPort 通道号
[in] fFileEndCallBack fFileEndCB: 回调函数指针
nPort 通道号
pUserData 用户自定义参数
[in] Pointer pUserData: 用户自定义参数
返回值 成功返回TRUE, 失败返回FALSE
说明 设置文件结束回调当文件播放结束时触发回调函数
需在PlayMS_OpenSteam或PlayMS_OpenFile之前调用
**********************************************************************************/
public boolean PlayMS_SetFileEndCallBack(int nPort, fFileEndCallBack pFileEndCBFun, Pointer pUserData);
/**********************************************************************************
函数 PlayMS_SetFileEndMsg
参数 [in] int nPort 通道号
[in] HWND hWnd: 消息发送窗口
[in] UINT nMsg: 用户自定义需发送的消息数据
返回值 成功返回TRUE, 失败返回FALSE
说明 设置文件播放结束时用户自定义发送的消息
**********************************************************************************/
public boolean PlayMS_SetFileEndMsg(int nPort, Pointer hWnd, int nMsg);
/**********************************************************************************
函数: PlayMS_SetWaterMarkCallBack
描述: 设置水印数据回调注意水印校验回调设置后将不会进行解码显示
参数: nPort 端口号
pFunc 水印信息获取回调函数, 参数含义如下:
pBuf 水印数据buffer指针
nKey 区分不同水印信息
nLen 缓冲的最大长度
nRealLen 缓冲的实际长度
nType 数值范围[0,3],含义如下
0 I帧帧数据水印信息
1 帧水印
2 水印校验
3 智能分析帧
pUserData 用户自定义参数
pUserData 用户自定义参数
返回: 成功返回TRUE,失败返回FALSE.
**********************************************************************************/
public boolean PlayMS_SetWaterMarkCallBack(int nPort, fGetWaterMarkInfoCallBack pFunc, Pointer pUserData);
/**********************************************************************************
函数: PlayMS_SetWaterMarkCallBackEx
描述: 设置水印数据回调(成功后解码不显示)
参数: nPort 端口号
pGetWaterMarkCB 函数指针, 参数含义如下:
nPort 端口号
buf 水印数据缓冲
lTimeStamp 水印的时间戳
lInfoType 水印信息类型
len 缓冲的最大长度
reallen 缓冲的实际长度
lCheckResult 1-没有错误; 2-水印错误; 3-帧数据错误; 4-帧号错误
pUserData 用户自定义参数
pUserData 用户自定义参数
返回: 成功返回TRUE,失败返回FALSE.
**********************************************************************************/
public boolean PlayMS_SetWaterMarkCallBackEx(int nPort, fGetWaterMarkInfoCallBackEx pGetWaterMarkCB, Pointer pUserData);
/**********************************************************************************
函数 PlayMS_ImageWatermarkCheck
参数 [in] String pImagePath 图片本地路径
返回值 成功返回TRUE, 失败返回FALSE
说明 图片水印校验
**********************************************************************************/
public boolean PlayMS_ImageWatermarkCheck(final String pImagePath);
/**********************************************************************************
函数: PlayMS_RenderPrivateData
描述: 显示智能数据图形
参数: nPort 端口号
bShow 1 显示0 不显示
nReserved 保留参数
返回: 成功返回TRUE,失败返回FALSE.
**********************************************************************************/
public boolean PlayMS_RenderPrivateData(int nPort, int bShow, int nReserved);
/**********************************************************************************
函数: PlayMS_SetRenderShapeLineType
描述: 设置渲染类型使能
参数: nPort 端口号
nRenderType 渲染类型
ENUM_RENDER_TYPE
bEnable
LINE_TYPE_SOLID_WHOLE = 0x00: 实线LINE_TYPE_SOLID_HALF - 0x01: 半线
返回: 成功返回TRUE,失败返回FALSE.
**********************************************************************************/
public boolean PlayMS_SetRenderTypeEnable(int nPort, int nRenderType, int bEnable);
};

303
ruoyi-code/src/main/java/sdk/java/lib/playmanager/PlayStructs.java

@ -0,0 +1,303 @@
package sdk.java.lib.playmanager;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import sdk.java.lib.LLONG;
public class PlayStructs {
//////////////////////////////////////////////////////////////////////////////////////
public static class SYSTEMTIME extends Structure
{
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"wYear", "wMonth", "wDayOfWeek", "wDay",
"wHour", "wMinute", "wSecond", "wMilliseconds"});
}
public static class ByReference extends SYSTEMTIME implements Structure.ByReference
{
}
public static class ByValue extends SYSTEMTIME implements Structure.ByValue
{
}
};
// 帧定位信息
public static class FRAME_POS_INFO extends Structure
{
public LLONG nFilePos; // 帧在文件中的偏移位置
public int nFrameLen; // 帧长度
public int nFrameNum; // 帧序号
public int nFrameTime; // 帧时间
public int nErrorFrameNum; // 未启用
public Pointer pErrorTime; // 未启用,SYSTEMTIME
public int nErrorLostFrameNum; // 未启用
public int nErrorFrameSize; // 未启用
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"nFilePos", "nFrameLen", "nFrameNum", "nFrameTime",
"nErrorFrameNum", "pErrorTime", "nErrorLostFrameNum", "nErrorFrameSize"});
}
public static class ByReference extends FRAME_POS_INFO implements Structure.ByReference
{
}
public static class ByValue extends FRAME_POS_INFO implements Structure.ByValue
{
}
};
// 解码帧属性信息
public static class FRAME_ATTRI_INFO extends Structure
{
public int nWidth; // 画面宽,单位像素
public int nHeight; // 画面高,单位像素
public int nStamp; // 时标信息,单位毫秒
public int nType; // 视频帧类型,TYPE_IYUV,TYPE_AUDIODATA_16,TYPE_RGB32
public int nFrameRate; // 图像帧率
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"nWidth", "nHeight", "nStamp", "nType", "nFrameRate"});
}
public static class ByReference extends FRAME_POS_INFO implements Structure.ByReference
{
}
public static class ByValue extends FRAME_POS_INFO implements Structure.ByValue
{
}
};
// 解码帧属性信息
public static class FRAME_ATTRI_INFO_EX extends Structure
{
public int nFrameType; // 帧类型
// 1 - MEDIA_FRAME_TYPE_VIDEO(视频帧)
// 2 - MEDIA_FRAME_TYPE_AUDIO(音频帧)
public int nSubFrameType; // 帧子类型(参见 ENUM_SUB_FRAME_TYPE 枚举值)
public int nEncodeType; // 解码类型(参见 ENUM_VIDEO_ENCODE_TYPE 枚举值)
public int nStreamType; // 码流封装类型(参见 ENUM_STREAM_PACKAGE_TYPE 枚举值)
public Pointer pFrameData; // 帧数据
public int nFrameDataLen; // 帧数据长度
public Pointer pFrameBodyData; // 帧裸数据
public int nFrameBodyLen; // 帧裸数据长度
public int nFrameSeq; // 帧序号
public int nStamp; // 时标信息(单位:ms)
public int nWidth; // 面宽(单位:像素)
public int nHeight; // 画面高(单位:像素)
public int nFrameRate; // 图像帧率
public int nChannels; // 音频通道数
public int nBitPerSample; // 音频采样位数
public int nSamplesPerSec; // 音频采样频率
public int nRemainData; // 缓冲剩余数据量
public SYSTEMTIME nDataTime; // 时间
public int[] nReserved = new int[48]; // 保留位
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"nFrameType", "nSubFrameType", "nEncodeType", "nStreamType",
"pFrameData", "nFrameDataLen", "pFrameBodyData", "nFrameBodyLen", "nFrameSeq", "nStamp",
"nWidth", "nHeight", "nFrameRate", "nChannels", "nBitPerSample", "nSamplesPerSec",
"nRemainData", "nDataTime", "nReserved"});
}
public static class ByReference extends FRAME_POS_INFO implements Structure.ByReference
{
}
public static class ByValue extends FRAME_POS_INFO implements Structure.ByValue
{
}
};
// 解码帧内容
public static class FRAME_DEC_INFO extends Structure
{
public int nFrameType; // 帧类型
// 1 - MEDIA_FRAME_TYPE_VIDEO(视频帧)
// 2 - MEDIA_FRAME_TYPE_AUDIO(音频帧)
public int nSubFrameType; // 帧子类型(参见 ENUM_SUB_FRAME_TYPE 枚举值)
public Pointer pAudioData; // 音频数据(音频帧有效)
public int nAudioDataLen; // 音频数据长度
public Pointer[] pVideoData = new Pointer[3]; // 分别表示视频的YUV三个分量(视频帧有效)
public int[] nStride = new int[3]; // 分别表示YUV三个分量的跨距(视频帧有效)
public int[] nWidth = new int[3]; // 分别表示YUV三个分量的宽度(视频帧有效)
public int[] nHeight = new int[3]; // 分别表示YUV三个分量的高度(视频帧有效)
public int[] nReserved = new int[64]; // 保留位
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"nFrameType", "nSubFrameType", "pAudioData",
"nAudioDataLen", "pVideoData", "nStride", "nWidth", "nHeight", "nReserved"});
}
public static class ByReference extends FRAME_DEC_INFO implements Structure.ByReference
{
}
public static class ByValue extends FRAME_DEC_INFO implements Structure.ByValue
{
}
};
// 智能帧属性
public static class SA_DD_INTL_OBJECT extends Structure
{
public byte nAttriType; // 类型
public byte nEnable; // 0 - 无效;1 - 有效
public byte[] reseved = new byte[2]; // 保留参数
public int nAttriId; // id
public int nFrameNum; // 帧序号
public int nPTS; // PTS
public Pointer pData; // 智能帧结构体数据
public int nDataLen; // 智能帧结构体数据长度
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"nAttriType", "nEnable", "reseved",
"nAttriId", "nFrameNum", "nPTS", "pData", "nDataLen"});
}
public static class ByReference extends SA_DD_INTL_OBJECT implements Structure.ByReference
{
}
public static class ByValue extends SA_DD_INTL_OBJECT implements Structure.ByValue
{
}
};
// 轨迹矩形
public static class SA_DD_IF_RECT extends Structure
{
// 轨迹点是物体外接矩形的中心
// RECT = (X - XSize, Y - YSize, X + XSize, Y + YSize)
public short x;
public short y;
public short xSize;
public short ySize;
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"x", "y", "xSize", "ySize"});
}
public static class ByReference extends SA_DD_IF_RECT implements Structure.ByReference
{
}
public static class ByValue extends SA_DD_IF_RECT implements Structure.ByValue
{
}
}
public static class SA_DD_ANGLE3D extends Structure
{
// 上下俯仰角
public float pitch;
// 左右摇摆角
public float roll;
// 水平旋转角
public float yaw;
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"pitch", "roll", "yaw"});
}
public static class ByReference extends SA_DD_ANGLE3D implements Structure.ByReference
{
}
public static class ByValue extends SA_DD_ANGLE3D implements Structure.ByValue
{
}
}
// 人员信息
public static class SA_DD_OBJECT_PERSON_INFO extends Structure
{
public byte nSex; // 人员性别,0-未知,1-男性,2-女性
public byte nAge; // 年龄,0-未知
public byte[] reserved1 = new byte[2]; // 字节对齐
public byte[] szCode = new byte[128]; // 人员编号
public byte[] szName = new byte[128]; // 人员姓名
public byte[] reserved = new byte[256]; // 保留位
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"nSex", "nAge", "reserved1", "szCode", "szName", "reserved"});
}
public static class ByReference extends SA_DD_OBJECT_PERSON_INFO implements Structure.ByReference
{
}
public static class ByValue extends SA_DD_OBJECT_PERSON_INFO implements Structure.ByValue
{
}
}
// 人脸
public static class SA_DD_OBJECT_FACE extends Structure
{
public int frame_num; // 帧序号
public int pts; // PTS
public int obj_id; // 物体 id
public byte obj_type; // 物体类型
public byte enable; // 0 表示无效物体, 1表示有效物体
public byte shape_type; // 轨迹类型
public byte shape_confidence; // 图形置信度
public byte shape_quality; // 图形质量
public byte[] reserved1 = new byte[3]; // 预留位1
public int shape_color; // 图形颜色
public SA_DD_IF_RECT shape_rect; // 图形矩形, 8192 坐标系
public byte enableMask; // 0x01-0x08 的使能掩码
public SA_DD_ANGLE3D angle3D; // 人脸三维角度
public float shape_fuzzy_degree; // 模糊度
public short pixelSize; // 像素大小
public float score; // 人脸整体得分
public byte enableMask0xFe; // 0x09-0x10 的使能掩码
public byte[] reserved2 = new byte[12]; // 预留位2
public SA_DD_OBJECT_PERSON_INFO person; // 人员信息
public byte[] reserved3 = new byte[64]; // 预留位3
protected List<String> getFieldOrder()
{
return Arrays.asList(new String [] {"frame_num", "pts", "obj_id", "obj_type", "enable", "shape_type", "shape_confidence", "shape_quality",
"reserved1", "shape_color", "shape_rect", "enableMask", "angle3D", "shape_fuzzy_degree", "pixelSize", "score", "enableMask0xFe",
"reserved2", "person", "reserved3"});
}
public static class ByReference extends SA_DD_OBJECT_FACE implements Structure.ByReference
{
}
public static class ByValue extends SA_DD_OBJECT_FACE implements Structure.ByValue
{
}
}
}
Loading…
Cancel
Save