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);
}
});