云可视对讲

更新时间:2022-02-17 06:56:59下载pdf

云可视对讲功能,是指 App 和云可视设备(监控、门禁)做通信,提供视频查看、语音对讲、远程开门等功能,需配合涂鸦 智能生活 IPC SDK 一起使用。

功能说明

监控设备接入流程

利用云可视管理类,加载配置项,在成功回调里,初始化涂鸦摄像机,直接连接视频流进行实时查看即可。

门禁设备接入流程

  • 主动查看视频的流程

    主动查看视频与监控设备流程一致,利用云可视管理类,加载配置项,在成功回调里,初始化涂鸦摄像机,直接连接视频流进行实时查看即可。

  • 被动接听设备呼叫的流程

    1. 注册设备通信通知监听器。
    2. 当收到设备消息时,会触发监听器中的回调方法,根据回调中携带的通信类型与数据,查询呼叫设备的相关信息,加载配置项,在成功回调中用涂鸦摄像机去连接视频,进行预览。
    3. 预览成功后,去连接音频,进行对讲。

IPC SDK 对接

您需要结合 IPC SDK 使用,IPC SDK 建议接入版本:

implementation 'com.tuya.smart:tuyasmart-ipcsdk:3.27.5'

云可视管理类

可视对讲功能入口管理,包括加载设备配置项、注册设备通信监听器、查询监控设备管理类、查询可视门禁设备管理器等功能。

示例代码

ITuyaCommunityVisualSpeak visualSpeak = TuyaCommunitySDK.getCommunityVisualSpeakInstance();

加载配置项

App 与设备进行音视频连接前,先调用此接口查询设备配置项,回调成功时继续后面流程。

接口说明

void loadConfig(@NonNull String deviceId, @Nullable String gatewayId, ITuyaCommunityCallback callback);

参数说明

参数 说明
deviceId 设备 ID,非空
gatewayId 如果设备在网关下,传网关 ID,否则传null
callback 回调

示例代码

if (visualSpeak != null) {
    visualSpeak.loadConfig(deviceId, null, new ITuyaCommunityCallback() {
        @Override
        public void onFailure(String s, String s1) {
            L.e(TAG, "[loadConfig] onFailure:" + s1);
        }

        @Override
        public void onSuccess() {
            L.d(TAG, "[loadConfig] onSuccess");
            Intent intent = new Intent(VisualSpeakMainActivity.this, VisualSpeakVideoActivity.class);
            startActivity(intent);
        }
    });
}

注册设备通信消息监听器

注册此监听器后,等设备端有消息推送到 App 时可以通过收到回调,如设备呼叫 App 事件,设备挂断事件等。

接口说明

//注册监听器
void registerVisualSpeakCommunicationListener(IOnVisualSpeakDeviceCommunicationListener listener);

//移除监听器
void unRegisterVisualSpeakCommunicationListener(IOnVisualSpeakDeviceCommunicationListener listener);

代码示例

visualSpeak.registerVisualSpeakCommunicationListener(new IOnVisualSpeakDeviceCommunicationListener() {
    @Override
    public void receiveDeviceMessage(TYVisualSpeakCommunicationType tyVisualSpeakCommunicationType, TYDeviceMsgDataBean tyDeviceMsgDataBean) {
        switch (tyVisualSpeakCommunicationType) {
            case DEVICE_CALLING:
                break;
            case DEVICE_CALL_OTHER_APP_ANSWER:
                break;
            case DEVICE_CALL_CANCEL:
                break;
            case DEVICE_CALL_TIMEOUT:
                break;
            case DEVICE_CALL_HANGUP:
                break;
            case TALKING_TIMEOUT:
                break;
            case UNKNOWN:
            default:
                break;
        }
    }
});

TYVisualSpeakCommunicationType 说明

类型 说明
DEVICE_CALLING 设备正在呼叫 APP
DEVICE_CALL_OTHER_APP_ANSWER 设备呼叫App端,已有其他App端接听
DEVICE_CALL_CANCEL 设备取消呼叫
DEVICE_CALL_TIMEOUT 设备呼叫超时
DEVICE_CALL_HANGUP 设备主动挂掉通话
TALKING_TIMEOUT 通话超时自动挂断
UNKNOWN 未知错误

TYDeviceMsgDataBean 说明

字段 说明
deviceId 设备 ID
reqType 呼叫类型
sn 通话唯一识别号

查询可视对讲管理类

通过此管理类,查询可视门禁设备列表,进行远程开门,查询可视门禁设备状态,保存通话记录等操作。

接口说明

ITuyaCommunityAccessControl getAccessControlManager();

查询监控设备管理类

通过此管理类,查询监控设备列表等其他操作。

接口说明

ITuyaCommunityPublicMonitor getPublicMonitorManager();

公区监控

通过 App 去查看安装在公共区域的监控设备。

查询公区监控列表

通过此 API 查询用户有权限查看的公区监控设备。

接口说明

void getPublicMonitorList(String communityId,
                   String roomId,
                   ITuyaCommunityResultCallback<ArrayList<TYMonitorDeviceBean>> callback);

参数说明

参数 说明
communityId 小区ID
roomId 房间ID
callback 回调

TYMonitorDeviceBean 数据类说明

字段名 字段类型 说明
gatewayId String 网关 ID
deviceId String 设备 ID
deviceStatus Int 设备当前在线状态
1:在线
0:离线
deviceName String 设备名称
deviceThumbnailsUrl String 设备视频缩略图

可视门禁

对于可视门禁,有两个功能:

  • 主动查看视频:App 可以主动去查看门禁视频,且可以开门。
  • 收到设备呼叫:设备呼叫房号时,App 会收到呼叫,可以进行开门和通话。

查询门禁列表

通过此接口查询用户有权限的门禁设备列表。

接口说明

void getAccessControlList(String communityId,
                   String roomId,
                   ITuyaCommunityResultCallback<List<TYVisualSpeakDeviceBean>> callback);

参数说明

参数 说明
communityId 小区ID
roomId 房间ID
callback 回调

TYVisualSpeakDeviceBean 数据类说明

字段名 字段类型 说明
deviceId String 设备 ID
roomId String 房间 ID
deviceName String 设备名称

查询门禁可查看次数

仅主动查看门禁视频时对次数做限制,平台端可以配置用户可查看门禁次数,通过此接口查询,返回的数值(Integer)表示当日可查看视频次数。

接口说明

void getAccessControlViewableTimes(String communityId,
                            String roomId,
                            String deviceId,
                            ITuyaCommunityResultCallback<Integer> callback);

参数说明

参数 说明
communityId 小区ID
deviceId 设备ID
roomId 房间ID
callback 回调

查询门禁状态

使用场景为设备呼叫 App 端当发送推送消息时,有时候用户点击推送进去的时候设备已经不在呼叫状态,因此需要调用此接口查询设备状态,当设备在呼叫状态时,才进行连接。

接口说明

void getAccessControlStatus(String communityId,
                     String roomId,
                     String deviceId,
                     String sn,
                     ITuyaCommunityResultCallback<TYVisualSpeakCommunicationType> callback);

参数说明

参数 说明
communityId 小区 ID
deviceId 设备 ID
roomId 房间 ID
sn 通话唯一识别号
callback 回调

开门

向设备发送开门指令。

接口说明

void openDoor(String communityId, String roomId, String deviceId, final ISuccessFailureCallback callback)

参数说明

参数 说明
communityId 小区ID
deviceId 设备ID
roomId 房间ID
callback 回调

接听

当用户点击接听呼叫时,建立音频流连接,连接成功后调用此接口通知设备 App 已接听。

接口说明

void accept(String deviceId);

参数说明

参数 说明
deviceId 设备ID

拒接

设备呼叫 App 端,拒绝接听通话。

接口说明

void reject(Map<String, String> params, final ISuccessFailureCallback callback);

参数说明

参数 说明
params 携带数据的Map对象
callback 回调

params 参数说明

参数 说明
device_id 设备 ID
community_id 小区 ID
room_id 房间 ID
sn 通话唯一识别号

示例代码

if (communityAccessControl != null) {
    Map<String, String> map = new HashMap<>();
    map.put("device_id",deviceId);
    map.put("community_id",communityId);
    map.put("room_id",roomId);
    map.put("sn",sn);
    communityAccessControl.reject(map, new ISuccessFailureCallback() {
        @Override
        public void onSuccess() {

        }

        @Override
        public void onFailure(String s, String s1) {

        }
    });
}

记录通话时长

当用户挂断或者收到设备挂断消息时,调用此接口记录通话时长。

接口说明

void hangUp(Map<String, String> params, final ISuccessFailureCallback callback);

参数说明

参数 说明
params 携带数据的 Map 对象

params 参数说明

参数 说明
device_id 设备 ID
community_id 小区 ID
room_id 房间 ID
call_time 通话开始时间戳
talk_time 对讲时长,单位为秒
direction 呼叫方向,传 “1”

示例代码

long startTime= System.currentTimeMillis();
int talkTime= 20;
if (communityAccessControl != null) {
    Map<String, String> map = new HashMap<>();
    map.put("device_id",deviceId);
    map.put("community_id",communityId);
    map.put("room_id",roomId);
    map.put("call_time",startTime);
 		map.put("talk_time",talkTime);
    map.put("direction","1");
    communityAccessControl.hangUp(map, new ISuccessFailureCallback() {
        @Override
        public void onSuccess() {

        }

        @Override
        public void onFailure(String s, String s1) {

        }
    });
}