Last Updated on : 2023-06-01 06:18:29download
IP cameras (IPCs) support the recording and playback of video footage that is stored on SD cards. You can integrate with the IPC SDK to develop these features for your app. After an SD card is inserted into an IPC, users can view the details and status of the SD card and set the recording switch and mode on the app.
After video footage is saved to an SD card, it can be played back on the app based on the IPC SDK. For more information, see SD Card Management.
Similar to live video streaming, a P2P connection must be created before video footage playback. Perform the following steps:
Create an IThingSmartCameraP2P
object to build a peer-to-peer (P2P) connection.
Through a P2P connection, you can implement querying information about video footage stored on an SD card and playing back desired video clips.
After video playback is started, additional audio and video features can be implemented. For example, start or stop video recording, capture video screenshots, and enable or disable video sound. For more information, see Audio and Video Features.
The IPC SDK supports query and playback of SD card-stored video footage by day. Users can also query the days on which video footage is available in a certain month.
Returns the days on which video footage is available in a certain month before video playback.
API description
void queryRecordDaysByMonth(int year, int month, OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
year | The year to be queried. |
month | The month to be queried. |
monthcallBack | The callback. |
Example
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` indicates the returned days of the month.
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));
}
});
Returns a list of video footage on the days returned in the previous step.
API description
void queryRecordTimeSliceByDay(int year, int month, int day, OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
year | The year to be queried. |
month | The month to be queried. |
day | The day to be queried. |
callBack | The callback. |
Example
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` indicates the list of returned video clips for the specified date.
parsePlaybackData(data);
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
mHandler.sendEmptyMessage(MSG_DATA_DATE_BY_DAY_FAIL);
}
});
parsePlaybackData(data)
reference
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));
}
}
Data model of RecordInfoBean
Parameter | Description |
---|---|
count | The number of video clips. |
List |
The list of video clips. |
Data model of TimePieceBean
Parameter | Description |
---|---|
startTime | The start time of a video clip. |
endTime | The end time of a video clip. |
playTime | The time from which playback of a video clip is started. |
API description
void startPlayBack(int startTime, int stopTime, int playTime, OperationDelegateCallBack callBack, OperationDelegateCallBack finishCallBack);
Parameters
Parameter | Description |
---|---|
startTime | The 10-digit start timestamp. |
stopTime | The end time. |
playTime | The time from which video footage playback is started. |
callBack | The callback that is executed when video playback is started. |
finishcallBack | The callback that is executed when video playback is finished. |
Example
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;
}
});
API description
void pausePlayBack(OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
callBack | The callback. |
Example
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) {
}
});
API description
void resumePlayBack(OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
callBack | The callback. |
Example
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) {
}
});
API description
void stopPlayBack(OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
callBack | The callback. |
Example
mCameraP2P.stopPlayBack(new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
}
});
Certain IPCs support the playback of video footage stored on an SD card at a specified speed. You can use the device capability class ICameraConfigInfo
to query the list of playback speeds supported by the device.
API description
void setPlayBackSpeed(int speed, OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
speed | The video footage playback speed that must be supported by the device. |
callBack | The callback. |
Certain IPCs support downloading video footage stored on an SD card to the app. You can call the API method of the IPC SDK to check whether an IPC supports downloading SD card-stored video footage.
API description
Checks whether the device supports downloading video footage from an SD card to the app. This method is called only after a P2P connection is created.
boolean isSupportPlaybackDownload();
Example
IThingIPCCore cameraInstance = ThingIPCSdk.getCameraInstance();
if (cameraInstance != null) {
ICameraConfigInfo cameraConfig = cameraInstance.getCameraConfig(devId);
if (cameraConfig != null) {
boolean supportPlaybackDownload = cameraConfig.isSupportPlaybackDownload();
}
}
API description
The device SDK supports downloading a complete video file or multiple continuous video clips from the device.
void startPlayBackDownload(int startTime, int stopTime, String folderPath, String fileName, OperationDelegateCallBack callBack, ProgressCallBack progressCallBack, OperationDelegateCallBack finishCallBack);
Parameters
Parameter | Description |
---|---|
startTime | The start time of the selected start video clip. |
stopTime | The end time of the selected end video clip. |
folderPath | The path through which the video clips are stored. |
fileName | The name of the video file. |
callBack | The callback. |
progressCallBack | The callback for the download progress. |
finishCallBack | The callback that is used when the deletion task is finished. |
Due to the limited file retrieval capability of IPCs, a single video clip will not be split. Therefore, set the start time (startTime
) to the start time of the first video clip to be downloaded and end time (stopTime
) to the end time of the last video clip to be downloaded.
API description
void pausePlayBackDownload(OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
callBack | The callback. |
API description
void resumePlayBackDownload(OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
callBack | The callback. |
API description
void stopPlayBackDownload(OperationDelegateCallBack callBack);
Parameters
Parameter | Description |
---|---|
callBack | The callback. |
Certain IPCs support deleting video footage from an SD card. The deletion is controlled on the app. Currently, video footage can be deleted only by date.
API description
Checks whether the device supports deleting video footage from an SD card. This method is called only after a P2P connection is created.
boolean isSupportPlaybackDelete();
Example
IThingIPCCore cameraInstance = ThingIPCSdk.getCameraInstance();
if (cameraInstance != null) {
ICameraConfigInfo cameraConfig = cameraInstance.getCameraConfig(devId);
if (cameraConfig != null) {
boolean supportPlaybackDelete = cameraConfig.isSupportPlaybackDelete();
}
}
API description
void deletePlaybackDataByDay(String day, OperationDelegateCallBack callBack, OperationDelegateCallBack finishCallBack);
Parameters
Parameter | Description |
---|---|
day | The date in the format of yyyy-MM-dd . |
callBack | The callback. |
finishCallBack | The callback that is used when the deletion task is finished. |
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback