远端用户流
订阅
您可以使用 subscribeStreams:tinyStreams:callback:
方法订阅房间内其他用户的资源。
订阅时机
以下两个时机需要处理订阅逻辑:
- 加入房间成功后通过 RCRTCRoom 对象取得用户资源列表,需要处理订阅逻辑。
- 资源发布代理触发远端用户发布资源通知
didPublishStreams:
后需要处理订阅逻辑。
接口原型
Objective C
- (void)subscribeStreams:(nullable NSArray<RCRTCInputStream *> *)avStreams
tinyStreams:(nullable NSArray<RCRTCInputStream *> *)tinyStreams
callback:(nullable RCRTCSubscribeOperationCallback)callback;
参数说明
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
avStreams | NSArray<RCRTCInputStream *> | 是 | 普通流 |
tinyStreams | NSArray<RCRTCInputStream *> | 是 | 小流数组,同一个流只能填写在 avStreams 或 tinyStreams 中的一个数组中 |
callback | RCRTCSubscribeOperationCallback | 否 | 订阅资源完成的回调。callback 中 subscribeErrorList 为服务器返回的订阅失败列表。如果 isSuccess 为 YES 但是 subscribeErrorList 不为空,表示部分订阅成功,您可以根据业务决定是否对 subscribeErrorList 中的流进行重新订阅 |
代码示例
Objective C
// 订阅房间中远端用户音视频流资源
[[RCRTCEngine sharedInstance].room.localUser subscribeStreams:avStreams
tinyStreams:tinyStreams
callback:^(BOOL isSuccess, RCRTCCode desc, NSArray<RCRTCInputStream *> * _Nullable subscribeErrorList) {
if (subscribeErrorList.count) {
// 您可以根据业务决定是否对 subscribeErrorList 中的流进行重新订阅,或仅作提示
}
// 创建并设置远端视频预览视图
NSInteger i = 0;
for (RCRTCInputStream *stream in streams) {
if (stream.mediaType == RTCMediaTypeVideo) {
BOOL isSubErrorStream = NO;
for (RCRTCInputStream *subErrorStream in subscribeErrorList) {
if ([stream.streamId isEqualToString:subErrorStream.streamId] && stream.mediaType
== subErrorStream.mediaType) {
isSubErrorStream = YES;
break;
}
}
if (isSubErrorStream) {
continue;
}
if (i==0) {
// 1.初始化渲染远端视频的 view
RCRTCVideoView *view = [[RCRTCVideoView alloc] initWithFrame:CGRectMake
(100, 400, 100, 100)];
// 2.设置视频流的渲染视图
[(RCRTCVideoInputStream *)stream setVideoView:view];
// 3.添加渲染视图
[self.view addSubview:view];
}else{
// 其他远端视图逻辑
}
i++;
}
}
}];
取消订阅
您可以使用 unsubscribeStream:completion:
方法取消订阅一个或多个音视频流。
接口原型
Objective C
- (void)unsubscribeStream:(nullable RCRTCInputStream *)stream completion:(nullable RCRTCOperationCallback)completion;
参数说明
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
streams | NSArray<RCRTCInputStream *> | 是 | 发布的音视频流 RCRTCInputStream 数组 |
completion | RCRTCOperationCallback | 否 | 取消订阅的音视频流的回调 |
代码示例
Objective C
// 取消订阅音视频流
[[RCRTCEngine sharedInstance].room.localUser unsubscribeStream:streams
completion:^(BOOL isSuccess, RCRTCCode desc) {
}];