更新时间:2023-06-05 02:49:26下载pdf
在传统的方案中,App 和设备的数据传输都是经过服务器进行转发,当传输数据较大时需要占用服务器大量的空间和流量,运营成本较高。涂鸦 P2P(Peer-to-peer)连接方案可以有效地解决这个问题,降低运营商的流量成本,具体实现通过 ThingSmartP2pChannel
类来完成。
在 Podfile 中添加:
pod 'ThingSmartP2pChannelKit'
初始化 P2P 内部资源,需要和用户 UID 绑定。资源初始化和反初始化需配对调用。
接口说明
- (void)initSDKWithUid:(NSString *)uid;
参数说明
参数 | 说明 |
---|---|
uid | 用户 ID,登录账号后可以通过 ThingSmartUser.uid 查询 |
示例代码
NSString *uid = [ThingSmartUser sharedInstance].uid;
[[ThingSmartP2pChannel sharedInstance] initSDKWithUid:uid]
无需使用 P2P 能力时调用,释放 P2P 内部资源。释放后再使用 P2P 能力,需要重新初始化资源。
接口说明
- (void)deInitSDK;
与指定设备建立 P2P 连接会话,支持 3.4.8 版本。
接口说明
- (NSString *)connectWithDeviceId:(NSString *)devId mode:(ThingSmartP2pConnectMode)mode timeout:(NSInteger)timeout success:(void(^)(int p2pHandle))success failure:(void(^)(NSInteger errCode))failure;
参数说明
参数 | 说明 |
---|---|
devId | 设备的唯一标识符 |
mode | 优先连接方式 |
timeout | 连接超时时间,单位为毫秒 |
success | 成功的回调,返回 P2P 连接会话的 ID,负数表示连接失败 |
failure | 失败的回调 |
ThingSmartP2pConnectMode
枚举值 | 说明 |
---|---|
ThingSmartP2pConnectModeInternet | 外网连接优先 |
ThingSmartP2pConnectModeLAN | 局域网连接优先 |
返回值
返回值 | 说明 |
---|---|
traceId | 作为整个连接生命周期的跟踪标识,取消 P2P 连接时需要传入 traceId |
取消 P2P 连接,已经建立成功的连接不受影响。
接口说明
- (void)breakConnectWithTraceId:(NSString *)traceId;
参数说明
参数 | 说明 |
---|---|
traceId | 建立 P2P 连接时返回的跟踪标识 |
接口说明
- (void)disconnectWithP2pHandle:(int)handle;
参数说明
参数 | 说明 |
---|---|
handle | 要断开的 P2P 会话 ID,在 P2P 连接成功时会返回 |
通过指定的 P2P 会话,从指定的通道读取数据。
接口说明
- (int)readDataWithP2pHandle:(int)handle channel:(int)channel buffer:(unsigned char*)buffer timeout:(int)timeout;
参数说明
参数 | 说明 |
---|---|
handle | P2P 会话 ID |
channel | 通道号 |
buffer | 接收数据的缓冲区 |
timeout | 超时时间,单位为毫秒 |
返回值说明
返回值 | 说明 |
---|---|
< 0 | 接收数据出错,-3 表示超时,其他错误表示连接已断开 |
>= 0 | 实际接收到的数据长度 |
通过指定的 P2P 会话,向指定的通道发送数据。
接口说明
- (int)sendDataWithP2pHandle:(int)handle channel:(int)channel buffer:(unsigned char*)buffer length:(int)len timeout:(int)timeout;
参数说明
参数 | 说明 |
---|---|
handle | P2P 会话 ID |
channel | 通道号 |
buffer | 发送数据的指针 |
len | 缓存的长度 |
timeout | 超时时间,单位为毫秒 |
返回值说明
返回值 | 说明 |
---|---|
< 0 | 发送数据出错,-3 表示超时,其他错误表示连接已断开 |
>= 0 | 发送成功的数据长度 |
查询 P2P 会话的当前状态,需要轮询检查。
接口说明
- (int)activeCheckWithHandle:(int)p2pHandle;
参数说明
参数 | 说明 |
---|---|
p2pHandle | P2P 会话 ID |
返回值
返回值 | 说明 |
---|---|
< 0 | 连接已断开 |
>= 0 | 连接正常 |
属性说明
@property (nonatomic, assign, readonly) NSString *p2pVersion;
目前在涂鸦智能设备的数据协议中,每一个 P2P 会话中会初始化 8 个数据通道,已经定义和使用的通道有 6 个。
通道号 | 说明 |
---|---|
0 | 控制命令收发通道 |
1 | 视频数据传输通道 |
2 | 音频数据传输通道 |
3 | 存储卡回放视频传输通道 |
4 | 数据透传通道 |
5 | 文件下载传输通道 |
如果您使用非涂鸦登录体系来接入的话,P2P SDK 将监听不到用户的登录状态。此时,您需自行在账号登录成功和退出登录时,对 P2P SDK 进行初始化 initP2PSDKWithUid:
和反初始化deInitP2PSDK
。
P2P SDK 模块初始化。需要和用户 UID 绑定,建议在登录后调用。
接口说明
- (void)initP2PSDKWithUid:(NSString *)uid;
参数说明
参数 | 说明 |
---|---|
uid | 用户 UID |
示例代码
ThingSmartP2pChannel *p2pChannel = [ThingSmartP2pChannel sharedInstance];
[p2pChannel initP2PSDKWithUid:uid];
P2P 模块反初始化,建议退出登录的时候调用,否则可能导致 P2P 消息错乱。
接口说明
- (void)deInitP2PSDK;
示例代码
ThingSmartP2pChannel *p2pChannel = [ThingSmartP2pChannel sharedInstance];
[p2pChannel deInitP2PSDK];
详情请参考全量 错误码。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈