更新时间:2024-06-17 02:34:28下载pdf
智能摄像机在存储卡中保存视频录像后,可以通过 IPC SDK 在 App 端播放视频录像。
同实时视频直播一样,在开始视频回放前,您需要:
创建 IThingSmartCameraP2P
对象,连接上 P2P(Peer-to-peer)通道。
P2P 通道连接成功后,用户可以查询到设备端存储卡中录制的视频片段时间信息,然后播放视频片段。
开启视频回放成功后,用户可以使用音视频功能,例如开启或停止视频录制、视频截图、开启或关闭视频声音。更多详情,请参考 音视频功能。
演示录屏 | 类 | 接口 | 描述 | 备注 |
---|---|---|---|---|
IThingSmartCameraP2P | queryRecordDaysByMonth | 查询保存过视频的日期 | 在开始视频回放前,需要先查询某年某月中保存过视频录像的日期 | |
IThingSmartCameraP2P | queryRecordTimeSliceByDay | 查询某日的视频片段 | 查询到有视频片段的日期后,根据日期查询当日的视频片段记录 | |
IThingSmartCameraP2P | startPlayBack | 开启回放 | 错误码查询 | |
IThingSmartCameraP2P | stopPlayBack | 结束回放 | - | |
IThingSmartCameraP2P | disconnect | 断连 | 设备不需要连接时,需要及时断开释放 P2P 会话 |
注意不要在 IThingSmartCameraP2P
对象调用方法的回调函数里(可能异步调用)调用该对象的其他 API。否则,可能会造成死锁。
void queryRecordDaysByMonth(int year, int month, OperationDelegateCallBack callBack);
void queryRecordTimeSliceByDay(int year, int month, int day, OperationDelegateCallBack callBack);
void startPlayBack(int startTime, int stopTime, int playTime, OperationDelegateCallBack callBack, OperationDelegateCallBack finishCallBack);
void stopPlayBack(OperationDelegateCallBack callBack);
Java:
// 1. 创建 IThingSmartCameraP2P
IThingSmartCameraP2P mCameraP2P = null;
IThingIPCCore cameraInstance = ThingIPCSdk.getCameraInstance();
if (cameraInstance != null) {
mCameraP2P = cameraInstance.createCameraP2P(devId));
}
ThingCameraView mVideoView = findViewById(R.id.camera_video_view);
// 2. 为渲染视图容器设置回调
mVideoView.setViewCallback(new AbsVideoViewCallback() {
@Override
public void onCreated(Object view) {
super.onCreated(view);
// 渲染视图构造完成时,为 IThingSmartCameraP2P 绑定渲染视图
if (null != mCameraP2P){
mCameraP2P.generateCameraView(view);
}
}
});
// 3. 构造渲染视图
mVideoView.createVideoView(devId);
// 4. 注册 P2P 监听
AbsP2pCameraListener absP2pCameraListener = new AbsP2pCameraListener() {
@Override
public void onSessionStatusChanged(Object camera, int sessionId, int sessionStatus) {
super.onSessionStatusChanged(camera, sessionId, sessionStatus);
// sessionStatus = -3 (超时)或 -105(鉴权失败) 时,建议发起一次重连,注意避免循环
}
};
if (null != mCameraP2P){
mCameraP2P.registerP2PCameraListener(absP2pCameraListener);
}
// 5.连接 P2P
if (null != mCameraP2P){
mCameraP2P.connect(devId, new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
//连接成功,发送 Handler 消息回到主线程再发起拉流
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
//连接失败
}
});
}
// 6. 开启回放
if (null != mCameraP2P){
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;
}
});
}
// 7. 在页面关闭或者不需要回放时,停止释放 P2P 会话
@Override
public void onDestroy() {
if (null != mCameraP2P) {
// 不需要回放时,停止回放
mCameraP2P.stopPlayBack(new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
}
});
mCameraP2P.disconnect(devId,null);
mCameraP2P.removeOnP2PCameraListener(absP2pCameraListener);
mCameraP2P.destroyP2P();
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈