Android 端接入

更新时间:

本文主要介绍,如何基于TuyaOS SDK开发包实现一个简单的 Android 客户端应用。

集成SDK

Android SDK 待发布

视频直播

视频直播需要先创建 IThingSmartCameraP2P 对象,然后进行 P2P(Peer-to-peer)通道连接。P2P 连接成功后,就可以播放实时视频。P2P 连接过程中涉及到 MQTT 消息的发送和接收,需要开发者进行 MQTT 通道的连接和消息管理。

初始化

创建 Camera 对象

接口说明

创建 IThingSmartCameraP2P 对象,用来支持此设备直播。

IThingSmartCameraP2P createCameraP2P();

示例代码

if (null == cameraP2P) {
    cameraP2P = ThingIPCSdk.getCameraInstance().createCameraP2P();
}

创建 P2P 对象

接口说明

ThingIPCSdk.getP2P();

示例代码

if (null == thingP2P) {
    thingP2P = ThingIPCSdk.getP2P();
}
thingP2P.setMqttProxy(new IMqttServiceUtils() {
    @Override
    public void sendMessageThroughMqtt(boolean LANmode, String devId, String signal) {
        Log.d(TAG, "sendMessageThroughMqtt: " + devId + " " + signal);
        // p2p 连接过程中需要发送此 mqtt 消息
        //if (null != mqttManager) {
        //    mqttManager.publishData(signal);
        //}
    }

    @Override
    public void sendMessage(String devId, String channel, String content, boolean LANmode) {

    }
});

接口说明

收到 mqtt 消息后,通过此接口设置给 p2p 库进行 p2p 连接。

thingP2P.setSignaling(msg, msg.length());

创建播放器

ThingCameraView 是 SDK 为页面布局文件提供的视频渲染视图容器

<com.thingclips.smart.camerasdk.player.ThingCameraView
    android:id="@+id/thing_camera_view"
    android:layout_width="match_parent"
    android:layout_height="240dp" />

设置播放器创建完成回调

public void setViewCallback(AbsVideoViewCallback callback);

示例代码

mThingCameraView = findViewById(R.id.thing_camera_view);
mThingCameraView.setViewCallback(videoViewCallback);

private AbsVideoViewCallback videoViewCallback = new AbsVideoViewCallback() {
        @Override
        public void onCreated(Object view) {
            if (null != cameraP2P) {
                Log.d(TAG, "p2p generateCameraView:" + view);
                // cameraP2P.generateCameraView(view);
            }
        }

        @Override
        public void videoViewClick() {

        }
    };

播放器和 Camera 对象绑定

cameraP2P.generateCameraView(view);

开启实时直播

接口说明

/**
 * Connect P2P
 *
 * @param callBack Callback
 */
void connect(ConfigCameraBean configCameraBean, OperationDelegateCallBack callBack);

参数说明

ConfigCameraBean 结构如下

参数

类型

说明

userId

string

App 端用户 id

devId

string

设备 id

localKey

string

产品 id

visualToken

string

设备token信息

示例代码

cameraP2P.connect(cameraInfoBean, new OperationDelegateCallBack() {

    @Override
    public void onSuccess(int sessionId, int requestId, String data) {
        Log.d(TAG, "camera 连接成功:" + data);
        // cameraPreview(); // 开始预览
    }

    @Override
    public void onFailure(int sessionId, int requestId, int errCode) {
        Log.e(TAG, "camera 连接失败:" + errCode);
    }
});

接口说明

void startPreview(OperationDelegateCallBack callBack);

示例代码

cameraP2P.startPreview(new OperationDelegateCallBack() {
    @Override
    public void onSuccess(int sessionId, int requestId, String data) {
        Log.d(TAG, "预览成功:" + data);
    }

    @Override
    public void onFailure(int sessionId, int requestId, int errCode) {
        Log.e(TAG, "预览失败:" + errCode);
    }
});

停止实时直播

停止预览

void stopPreview(OperationDelegateCallBack callBack);

示例代码

cameraP2P.stopPreview(new OperationDelegateCallBack() {
    @Override
    public void onSuccess(int sessionId, int requestId, String data) {
        Log.d(TAG, "停止预览成功:" + data);
    }

    @Override
    public void onFailure(int sessionId, int requestId, int errCode) {
        Log.e(TAG, "停止预览失败:" + errCode);
    }
});

断开 P2P 连接

void disconnect(boolean force, OperationDelegateCallBack callBack);

cameraP2P.disconnect(true, new OperationDelegateCallBack() {
    @Override
    public void onSuccess(int sessionId, int requestId, String data) {
        Log.d(TAG, "断开连接成功:" + data);
    }

    @Override
    public void onFailure(int sessionId, int requestId, int errCode) {
        Log.e(TAG, "断开连接失败:" + errCode);
    }
});

云存储录像

初始化

创建 Camer 对象

ThingIPCSdk.getCloud().createCloudCamera();

示例代码

if (null == thingCloudCamera) {
    thingCloudCamera = ThingIPCSdk.getCloud().createCloudCamera();
}

创建播放器

参考 视频直播 创建播放器

示例代码

mThingCameraCloudView = findViewById(R.id.thing_camera_cloud_view);
mThingCameraCloudView.setViewCallback(cloudVideoViewCallback);
private AbsVideoViewCallback cloudVideoViewCallback = new AbsVideoViewCallback() {
    @Override
    public void onCreated(Object view) {
        if (null != thingCloudCamera) {
            Log.d(TAG, "cloud generateCameraView:" + view);
            thingCloudCamera.generateCloudCameraView(view);
        }
    }

    @Override
    public void videoViewClick() {

    }
};

获取录像片段

接口说明

void getCloudData(ThingCloudPlayParamBean paramBean, IThingResultCallback<ThingCloudDataBean> callback);

参数说明

参数

类型

说明

deviceName

string

设备名称

productKey

string

产品 id

visualToken

string

设备token信息

startTime

long

开始时间

endTime

long

结束时间

示例代码

ThingCloudPlayParamBean paramBean = new ThingCloudPlayParamBean();
paramBean.setDeviceName("");
paramBean.setProductKey("");
paramBean.setVisualToken("");
paramBean.setStartTime(1737093603);
paramBean.setEndTime(1737093604);

thingCloudCamera.getCloudData(paramBean, new IThingResultCallback<ThingCloudDataBean>() {

    @Override
    public void onSuccess(ThingCloudDataBean result) {
        paramBean.setCloudAuthParam(result.getCloudAuthParam());
        // 在接口回调里面调另一个接口,需要切换线程
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 开始播放云存储
            }
        });

    }

    @Override
    public void onError(String errorCode, String errorMessage) {
        Log.e(TAG, "获取云存视频失败:" + errorCode);
    }
});

播放录像片段

接口说明

void playCloudDataWithStartTime(ThingCloudPlayParamBean paramBean, OperationCallBack callback, OperationCallBack playFinishedCallBack);

示例代码

thingCloudCamera.playCloudDataWithStartTime(paramBean, new OperationCallBack() {
    @Override
    public void onSuccess(int sessionId, int requestId, String data, Object camera) {
        Log.d(TAG, "云存播放成功");
    }

    @Override
    public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
        Log.e(TAG, "云存播放失败:" + errCode);
    }
}, new OperationCallBack() {
    @Override
    public void onSuccess(int sessionId, int requestId, String data, Object camera) {
        Log.d(TAG, "云存播放完成");
    }

    @Override
    public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
        Log.e(TAG, "云存播放结束失败:" + errCode);
    }
});