更新时间:2024-03-04 08:53:06
涂鸦 IPC SDK 开发支持存储卡录制功能。智能摄像机(IPC)插入存储卡后,可以查看存储卡的信息和状态,并设置录像开关和模式。
智能摄像机在存储卡中保存视频录像后,可以通过 IPC SDK 在 App 端播放视频录像。更多详情,请参考 存储卡管理。
同实时视频直播一样,在开始视频回放前,您需要:
创建 IThingSmartCameraP2P
对象,连接上 P2P(Peer-to-peer)通道。
P2P 通道连接成功后,用户可以查询到设备端存储卡中录制的视频片段时间信息,然后播放视频片段。
开启视频回放成功后,用户可以使用音视频功能,例如开启或停止视频录制、视频截图、开启或关闭视频声音。更多详情,请参考 音视频功能。
设备端保存在存储卡中的视频片段,IPC SDK 支持以天为单位查看和播放视频录像,并且能够查询某年某月中,哪几天保存过视频录像,以便于用户查看。
在开始视频回放前,需要先查询某年某月中保存过视频录像的日期。
接口说明
void queryRecordDaysByMonth(int year, int month, OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
year | 查询的年份 |
month | 查询的月份 |
monthcallBack | 结果回调 |
示例代码
int year = Integer.parseInt(substring[0]);
int mouth = Integer.parseInt(substring[1]);
queryDay = Integer.parseInt(substring[2]);
mCameraP2P.queryRecordDaysByMonth(year, mouth, new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
//data 是查询到的月份数据
MonthDays monthDays = JSONObject.parseObject(data, MonthDays.class);
mBackDataMonthCache.put(mCameraP2P.getMonthKey(), monthDays.getDataDays());
mHandler.sendMessage(MessageUtil.getMessage(MSG_DATA_DATE, ARG1_OPERATE_SUCCESS, data));
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
mHandler.sendMessage(MessageUtil.getMessage(MSG_DATA_DATE, ARG1_OPERATE_FAIL));
}
});
查询到有用视频片段的日期后,根据日期查询当日的视频片段记录。
接口说明
void queryRecordTimeSliceByDay(int year, int month, int day, OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
year | 查询的年份 |
month | 查询的月份 |
day | 查询的天 |
callBack | 结果回调 |
示例代码
int year = Integer.parseInt(substring[0]);
int mouth = Integer.parseInt(substring[1]);
int day = Integer.parseInt(substring[2]);
mCameraP2P.queryRecordTimeSliceByDay(year, mouth, day, new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
// data 是查询到指定日期的视频片段数据集
parsePlaybackData(data);
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
mHandler.sendEmptyMessage(MSG_DATA_DATE_BY_DAY_FAIL);
}
});
parsePlaybackData(data)
方法参考
private void parsePlaybackData(Object obj) {
RecordInfoBean recordInfoBean = JSONObject.parseObject(obj.toString(), RecordInfoBean.class);
if (recordInfoBean.getCount() != 0) {
List<TimePieceBean> timePieceBeanList = recordInfoBean.getItems();
if (timePieceBeanList != null && timePieceBeanList.size() != 0) {
mBackDataDayCache.put(mCameraP2P.getDayKey(), timePieceBeanList);
}
mHandler.sendMessage(MessageUtil.getMessage(MSG_DATA_DATE_BY_DAY_SUCC, ARG1_OPERATE_SUCCESS));
} else {
mHandler.sendMessage(MessageUtil.getMessage(MSG_DATA_DATE_BY_DAY_FAIL, ARG1_OPERATE_FAIL));
}
}
RecordInfoBean
数据模型
参数 | 说明 |
---|---|
count | 片段个数 |
List |
视频片段集合 |
TimePieceBean
数据模型
参数 | 说明 |
---|---|
startTime | 视频片段开始时间 |
endTime | 视频片段结束时间 |
playTime | 视频片段播放时间 |
接口说明
void startPlayBack(int startTime, int stopTime, int playTime, OperationDelegateCallBack callBack, OperationDelegateCallBack finishCallBack);
参数说明
参数 | 说明 |
---|---|
startTime | 10 位时间戳格式的开始时间 |
stopTime | 结束时间 |
playTime | 播放时间 |
callBack | 开启视频回放回调 |
finishcallBack | 结束视频回放回调 |
示例代码
mCameraP2P.startPlayBack(timePieceBean.getStartTime(),
timePieceBean.getEndTime(),
timePieceBean.getStartTime(), new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data){
isPlayback = true;
}
@Override
public void onFailure(int sessionId, int requestId, int errCode){
isPlayback = false;
}
}, new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data){
isPlayback = false;
}
@Override
public void onFailure(int sessionId, int requestId, int errCode){
isPlayback = false;
}
});
接口说明
void pausePlayBack(OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
callBack | 操作回调 |
示例代码
mCameraP2P.pausePlayBack(new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
isPlayback = false;
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
}
});
接口说明
void resumePlayBack(OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
callBack | 操作回调 |
示例代码
mCameraP2P.resumePlayBack(new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
isPlayback = true;
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
}
});
接口说明
void stopPlayBack(OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
callBack | 操作回调 |
示例代码
mCameraP2P.stopPlayBack(new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
}
});
部分 IPC 设备在播放存储卡视频回放时,支持变速播放。您可以使用 设备能力类 ICameraConfigInfo
查询设备支持的播放倍速。
接口说明
void setPlayBackSpeed(int speed, OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
speed | 播放倍速,指定的播放倍数需要设备支持 |
callBack | 操作回调 |
部分 IPC 设备支持将存储卡视频下载到 App 上,您可以通过 IPC SDK 提供的接口判断设备是否支持下载存储卡视频。
接口说明
判断设备是否支持存储卡视频回放下载,该接口需要在 P2P 连接成功之后调用。
boolean isSupportPlaybackDownload();
示例代码
IThingIPCCore cameraInstance = ThingIPCSdk.getCameraInstance();
if (cameraInstance != null) {
ICameraConfigInfo cameraConfig = cameraInstance.getCameraConfig(devId);
if (cameraConfig != null) {
boolean supportPlaybackDownload = cameraConfig.isSupportPlaybackDownload();
}
}
接口说明
设备侧 SDK 支持完整单个或者多个连续片段的下载。
void startPlayBackDownload(int startTime, int stopTime, String folderPath, String fileName, OperationDelegateCallBack callBack, ProgressCallBack progressCallBack, OperationDelegateCallBack finishCallBack);
参数说明
参数 | 说明 |
---|---|
startTime | 选择起始片段的开始时间 |
stopTime | 选择结束片段的结束时间 |
folderPath | 存储路径 |
fileName | 文件名称 |
callBack | 操作回调 |
progressCallBack | 下载回调 |
finishCallBack | 结束回调 |
由于 IPC 设备对回放视频文件的检索能力限制,不会对单个视频片段做分割。因此,视频下载的开始时间(startTime
)和结束时间(stopTime
),必须设置在单个或多个连续视频片段的最开始一个片段的起始时间和最后一个片段的结束时间。
接口说明
void pausePlayBackDownload(OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
callBack | 操作回调 |
接口说明
void resumePlayBackDownload(OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
callBack | 操作回调 |
接口说明
void stopPlayBackDownload(OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
callBack | 操作回调 |
部分 IPC 设备支持通过 App 控制删除存储卡上某天的回放视频。目前,只支持按日期删除全天的视频。
接口说明
判断设备是否支持删除存储卡上的回放视频,该接口需要在 P2P 连接成功之后调用。
boolean isSupportPlaybackDelete();
示例代码
IThingIPCCore cameraInstance = ThingIPCSdk.getCameraInstance();
if (cameraInstance != null) {
ICameraConfigInfo cameraConfig = cameraInstance.getCameraConfig(devId);
if (cameraConfig != null) {
boolean supportPlaybackDelete = cameraConfig.isSupportPlaybackDelete();
}
}
接口说明
void deletePlaybackDataByDay(String day, OperationDelegateCallBack callBack, OperationDelegateCallBack finishCallBack);
参数说明
参数 | 说明 |
---|---|
day | 期望删除的日期,格式为 yyyyMMdd |
callBack | 操作回调 |
finishCallBack | 结束回调 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈