更新时间:2024-03-04 08:53:16
在传统的方案中,App 和设备的数据传输都是经过服务器进行转发,当传输数据较大时需要占用服务器大量的空间和流量,运营成本较高。涂鸦 P2P 连接方案可以有效地解决这个问题,降低运营成本。
开发项目目录下的 build.gradle 配置如下:
allprojects {
repositories {
...
maven {
url "https://maven-other.tuya.com/repository/maven-releases/"
}
...
}
}
app
目录下的 build.gradle 配置:
dependencies {
...
implementation 'com.thingclips.smart:thingsmart-p2p-channel-sdk:3.4.62'
...
}
IPC SDK 已包含 P2P 能力,您无需再额外集成。
获取 P2P 对象,该对象是单例。
接口说明
IThingP2P p2pSDK = ThingIPCSdk.getP2P();
初始化 P2P 内部资源,需要和用户 UID 绑定,
接口说明
int init(String localId);
参数说明
参数 | 说明 |
---|---|
localId | 用户 UID,登录账号可以从 用户数据模型 User 中查询 |
示例代码
IThingP2P p2p = ThingIPCSdk.getP2P();
if (p2p != null) {
p2p.init("xxx");
}
销毁 P2P 内部资源。销毁后,再使用 P2P 能力则需要重新初始化资源。
接口说明
int deInit();
示例代码
IThingP2P p2p = ThingIPCSdk.getP2P();
if (p2p != null) {
p2p.deInit();
}
接口说明
与指定设备建立 P2P 连接,方法调用返回 traceId
为连接的唯一标识符,可用于取消正在尝试的连接。通过 callback
返回成功建立连接的句柄。
支持 3.4.8 及以上版本 SDK。
String connect(String remoteId, int lanMode, int timeout, IThingP2PCallback callback);
参数说明
参数 | 说明 |
---|---|
remoteId | 设备 ID |
lanMode | 优先连接方式 |
timeout | 连接超时时间 |
callback | 连接结果:
|
lanMode | 说明 |
---|---|
0 | 自动选择 |
1 | 外网连接优先 |
2 | 局域网连接优先 |
返回值
返回值 | 说明 |
---|---|
traceId | 连接的唯一标识符,用于取消正在尝试的连接 |
已经建立成功的连接不受影响。
接口说明
int connectBreak(String traceId);
参数说明
参数 | 说明 |
---|---|
traceId | 连接的唯一标识符 |
接口说明
int disConnect(int handle);
参数说明
参数 | 说明 |
---|---|
handle | 连接句柄 |
接口说明
int recvData(int handle, int channel, byte[] data, int dataLen, int timeout);
参数说明
参数 | 说明 |
---|---|
handle | 连接句柄 |
channel | 通道号 |
data | 接收数据的缓冲区 |
dataLen | 接收数据的长度 |
timeout | 超时时间,单位毫秒 |
返回值说明
返回值 | 说明 |
---|---|
< 0 | 接收数据出错,-3 表示超时,其他错误表示连接已断开 |
>= 0 | 实际接收到的数据长度 |
接口说明
int sendData(int handle, int channel, byte[] data, int dataLen, int timeout);
参数说明
参数 | 说明 |
---|---|
handle | 连接句柄 |
channel | 通道号 |
data | 需要发送的内容 |
dataLen | 需要发送的数据长度 |
timeout | 超时时间,单位毫秒 |
返回值
返回值 | 说明 |
---|---|
< 0 | 发送数据出错,-3 表示超时,其他错误表示连接已断开 |
>= 0 | 发送成功的数据长度 |
接口说明
int activeCheck(int handle);
参数说明
参数 | 说明 |
---|---|
handle | 连接句柄 |
返回值
返回值 | 说明 |
---|---|
< 0 | 连接已断开 |
>= 0 | 连接正常 |
接口说明
String getVersion();
目前在涂鸦智能设备的数据协议中,每一个 P2P 会话中初始化 8 个数据通道,已经定义和使用的通道有 6 个。
通道号 | 说明 |
---|---|
0 | 控制命令收发通道 |
1 | 视频数据传输通道 |
2 | 音频数据传输通道 |
3 | 存储卡回放视频传输通道 |
4 | 数据透传通道 |
5 | 文件下载传输通道 |
如果您使用非涂鸦登录体系来接入的话,P2P SDK 将监听不到用户的登录状态。此时,您需自行在账号登录成功和退出登录时,对 P2P SDK 进行初始化 initP2P(String localId)
和反初始化 deInitP2P()
。
P2P SDK 模块初始化。需要和用户 UID 绑定,建议在登录后调用。
接口说明
int initP2P(String localId);
参数说明
参数 | 说明 |
---|---|
localId | 用户 UID,登录账号可以从 用户数据模型 User 中查询 |
示例代码
IThingP2P p2p = ThingIPCSdk.getP2P();
if (p2p != null) {
p2p.initP2P("xxx");
}
P2P 模块反初始化,建议退出登录的时候调用,否则可能导致 P2P 消息错乱。
接口说明
int deInitP2P();
状态码 | 说明 | 可能原因 |
---|---|---|
0 | 无错误 | - |
-1 | 未初始化 SDK | - |
-3 | 连接超时,建议重新连接一次 | - |
-5 | 无效的参数 | - |
-11 | 无效的会话 | - |
-12 | 连接被设备关闭 | - |
-13 | 会话已关闭 | - |
-14 | 会话被本地关闭 | - |
-16 | 监听被中断 | - |
-19 | 连接被中断 | 调用了 break() 方法 |
-23 | 会话数达到上限 | - |
-24 | 无效的预连接 | - |
-25 | 预连接已断开 | - |
-26 | 预连接已激活 | - |
-29 | 内存不足 | - |
-30 | 接口调用失败 | - |
-31 | 不支持预连接 | - |
-100 | P2P 对端已关闭 | - |
-102 | 设备处于隐私模式,关闭会话 | - |
-103 | 发送数据线程创建失败,关闭会话 | - |
-104 | 会话已满,因此关闭会话 | - |
-105 | 鉴权失败,关闭会话,建议重新连接一次 | - |
-106 | 会话正常关闭,recv() 到 -13 |
- |
-108 | 因故障或死锁而无法正常结束或回滚的会话(僵尸会话),强制关闭 | 超过 20 分钟无数据交互 |
-109 | 开放 API,您主动关闭会话 | - |
-110 | 开放 API,您退出 P2P 模块 | - |
-111 | 开放 API,设备进入隐私模式 | - |
-113 | 设备正在通话 | - |
-114 | 应用层资源申请失败 | - |
-1000 | 接口请求参数无效 | - |
-1001 | 接口调用失败 | - |
-1002 | 接口返回无效数据 | - |
-1010 | 方法参数无效 | - |
-1011 | 方法调用失败 | - |
-1020 | 设备信息异常,为空 | 请检查是否已经获取家庭设备列表 |
-1021 | 不支持的 P2pType | 设备问题或配置问题 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈