视频消息

更新时间:2024-03-04 08:53:12

ThingCloudVideoPlayer 是视频消息播放器的容器的实体对象,提供了 报警消息 涉及的视频相关的 API。

整体流程

视频消息

创建视频播放器

接口说明

创建视频消息播放器容器的实体对象。

IThingCloudVideo createVideoMessagePlayer();

示例代码

private IThingCloudVideo mCloudVideo;

IThingIPCMsg message = ThingIPCSdk.getMessage();
if (message != null) {
    mCloudVideo = message.createVideoMessagePlayer();
}

注册监听器

接口说明

注册监听器,只有注册之后才能获取到视频播放的回调数据。

void registerP2PCameraListener(AbsP2pCameraListener listener);

参数说明

参数 说明
AbsP2pCameraListener 视频播放回调数据

示例代码

private IThingCloudVideo mCloudVideo;

mCloudVideo.registerP2PCameraListener(new AbsP2pCameraListener() {
    @Override
    public void onSessionStatusChanged(Object camera, int sessionId, int sessionStatus) {
        super.onSessionStatusChanged(camera, sessionId, sessionStatus);
    }
});

绑定播放器

接口说明

注入播放器 View,用来渲染视频画面。

void generateCloudCameraView(IRegistorIOTCListener view);

参数说明

参数 说明
IRegistorIOTCListener 播放器组件

创建云视频播放对象

接口说明

创建云视频播放设备。

void createCloudDevice(String cachePath, String devId, OperationDelegateCallBack callBack);

参数说明

参数 说明
cachePath 缓存文件地址
devId 设备 ID
OperationDelegateCallBack 操作回调

示例代码

cloudVideo.createVideoMessagePlayer().createCloudDevice(cachePath, devId, new OperationDelegateCallBack() {
            @Override
            public void onSuccess(int sessionId, int requestId, String data) {
            }

            @Override
            public void onFailure(int sessionId, int requestId, int errCode) {
            }
});

播放云视频

接口说明

播放报警消息中的视频。

void playVideo(String videoUrl, int startTime, String encryptKey, OperationCallBack callback, OperationCallBack playFinishedCallBack);

参数说明

参数 说明
videoUrl 视频播放地址
startTime 开始播放时间,初始值为 0
encryptKey 播放视频的秘钥
callback 操作回调
playFinishedCallBack 结束播放的操作回调

示例代码

public void playVideo(String videoUrl, int startTime, String encryptKey) {
        if (cloudVideo == null) {
            return;
        }
        cloudVideo.playVideo(videoUrl, startTime, encryptKey, new OperationCallBack() {
            @Override
            public void onSuccess(int sessionId, int requestId, String data, Object camera) {
                playState = CloudPlayState.STATE_PLAYING;
            }

            @Override
            public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
                playState = CloudPlayState.STATE_ERROR;
            }
        }, new OperationCallBack() {
            @Override
            public void onSuccess(int sessionId, int requestId, String data, Object camera) {
                playState = CloudPlayState.STATE_COMPLETED;
                cloudVideo.audioClose();
            }

            @Override
            public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
                cloudVideo.audioClose();
            }
        });
}

暂停播放

接口说明

void pauseVideo(OperationCallBack callback);

参数说明

参数 说明
OperationDelegateCallBack 操作回调

示例代码

public void pauseVideo() {
        if (cloudVideo == null) {
            return;
        }
        cloudVideo.pauseVideo(new OperationCallBack() {
            @Override
            public void onSuccess(int sessionId, int requestId, String data, Object camera) {
                playState = CloudPlayState.STATE_PAUSED;
            }

            @Override
            public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
            }
        });
}

恢复播放

接口说明

void resumeVideo(OperationCallBack callback);

参数说明

参数 说明
OperationDelegateCallBack 操作回调

示例代码

public void  resumeVideo() {
        if (cloudVideo == null) {
            return;
        }
        cloudVideo.resumeVideo(new OperationCallBack() {
            @Override
            public void onSuccess(int sessionId, int requestId, String data, Object camera) {
                playState = CloudPlayState.STATE_PLAYING;
            }

            @Override
            public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
            }
        });
}

停止播放

接口说明

void stopVideo(OperationCallBack callback);

参数说明

参数 说明
OperationDelegateCallBack 操作回调

示例代码

public void stopVideo() {
        if (cloudVideo == null) {
            return ;
        }
        cloudVideo.stopVideo(new OperationCallBack() {
            @Override
            public void onSuccess(int sessionId, int requestId, String data, Object camera) {
                playState = CloudPlayState.STATE_STOP;
            }

            @Override
            public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
            }
        });
}

设置静音开关

接口说明

设置视频播放的声音开关。

void setCloudVideoMute(int mute, OperationDelegateCallBack callBack);

参数说明

参数 说明
mute 拾音器模式
  • ICameraP2P.MUTE:静音
  • ICameraP2P.UNMUTE:非静音
OperationDelegateCallBack 操作回调

示例代码

private void setCloudVideoMute(int voiceMode) {
        if (cloudVideo == null) {
            return ;
        }
        cloudVideo.setCloudVideoMute(voiceMode,  new  OperationDelegateCallBack() {

            @Override
            public void onSuccess(int sessionId, int requestId, String data) {
            }

            @Override
            public void onFailure(int sessionId, int requestId, int errCode) {
            }
        });
}

销毁云视频播放对象

接口说明

当云视频不再使用的时候,销毁云视频播放设备。

void deinitCloudVideo();

视频数据回调

接口说明

public void onReceiveFrameYUVData(int sessionId, ByteBuffer y, ByteBuffer u, ByteBuffer v, int width, int height, int nFrameRate, int nIsKeyFrame, long timestamp, long nProgress, long nDuration, Object camera);

参数说明

参数 说明
sessionId 会话 ID
Y 视频 Y 数据
u 视频 U 数据
v 视频 V 数据
width 视频画面的宽
height 视频画面的高
nFrameRate 帧率
nIsKeyFrame 是否 I 帧
timestamp 时间戳
nProgress 播放进度,即消息中心视频播放的进度
nDuration 播放时长,即消息中心视频播放的时长
camera 视频采集的摄像头设备

视频播放只要设置 nProgressnDuration 的取值即可。

示例代码

public void onReceiveFrameYUVData(int sessionId, ByteBuffer y, ByteBuffer u, ByteBuffer v, int width, int height, int nFrameRate, int nIsKeyFrame, long timestamp, long nProgress, long nDuration, Object camera) {
        Map map = new HashMap<String, Long>(2);
        map.put("progress", nProgress);
        map.put("duration", nDuration);
        mHandler.sendMessage(MessageUtil.getMessage(ICameraVideoPlayModel.MSG_CLOUD_VIDEO_INFO, ICameraVideoPlayModel.OPERATE_SUCCESS, map));
}

报警消息与存储卡视频回放

报警消息存储卡视频回放 没有直接联系,但存在视频录制和消息触发的时间交叉点。

  • 报警消息和存储卡视频回放唯一的关联是在 存储卡事件录制模式 的情况下,报警消息和存储卡视频录制的触发原因和时间点是一样的。

    • 报警消息会保存在涂鸦的云端。
    • 录像的存储卡视频会保存在摄像机的存储卡中。且在存储卡容量不足时,部分视频会被覆盖。
  • 侦测报警的开关和存储卡录制的开关没有关联。即使在存储卡事件录制模式下,报警消息和存储卡中的视频也不是一一对应的。

    存在报警消息发生的时间点有视频录像的情况,IPC SDK 没有提供这种关联查找的接口。您可以根据报警消息的触发时间,在当天的存储卡录像视频片段中查找是否有对应的视频录像来建立关联。