本文详细介绍如何使用百家云 iOS SDK 订阅和取消订阅远端音视频
相关函数接口在 ios-sdk 2.8.20 及以上版本支持
您可以通过调用 BRTC 中的 setDefaultStreamRecvMode 接口设置订阅模式,需要在进入房间 enterRoom 前调用该接口,设置才能生效。BRTC 提供了两种订阅模式:
需要您注意的是,如果您不调用 setDefaultStreamRecvMode 也是没有关系的,SDK 的默认行为是自动订阅。但如果您希望设置为手动订阅,请务必注意 setDefaultStreamRecvMode 只有在 enterRoom 之前调用才有效果。
您可以通过调用接口 muteRemoteAudio 来静音远端用户的声音,之后也可以通过调用接口 muteRemoteAudio 来解除对他的静音。
//静音指定用户userID的音频 [self.brtc muteRemoteAudio:self.viewModel.userID mute:YES]; //恢复指定用户userID的音频播放 [self.brtc muteRemoteAudio:self.viewModel.userID mute:NO]; //静音所有远端用户的音频流 [self.brtc muteAllRemoteAudio:YES]; //恢复播放所有远端用户的音频流 [self.brtc muteAllRemoteAudio:NO];
您可以通过调用接口 startRemoteView 来播放远端用户的视频画面,但前提是您需要传递给 SDK 一个 view 对象,用来作为承载该用户的视频画面的渲染控件。
startRemoteView 的第一个参数是远端用户的 userId,第二个参数是远端用户的流类型,第三个参数则是您需要传递的 view 对象。其中第二个参数 streamType(流类型) 有三个可选的值,分别是:
注意事项
//指定渲染远端用户的大流画面 [self.brtc setRemoteVideoStreamType:self.remoteUserID type:BRTCVideoStreamTypeBig]; self.remoteRenderParams = [[BRTCRenderParams alloc] init]; self.remoteRenderParams.fillMode = BRTCVideoFillMode_Fit; //设置远端视频渲染参数 [self.brtc setRemoteRenderParams:self.viewModel.userID streamType:BRTCVideoStreamTypeBig params:self.remoteRenderParams]; //播放指定remoteUserID的主画面 [self.brtc startRemoteView:self.remoteUserID streamType:BRTCVideoStreamTypeBig view:self.remotePlayView]; [self.brtc muteRemoteVideoStream:self.remoteUserID streamType:BRTCVideoStreamTypeBig mute:NO];
通过调用 stopRemoteView 接口,您可以停止播放某一个远端用户的视频。
[self.brtc muteRemoteVideoStream:userID mute:YES]; [self.brtc stopRemoteView:userID streamType:BRTCVideoStreamTypeBig];
通过 setRemoteRenderParams 您可以设置画面的填充模式、旋转角度和镜像模式。
BRTCRenderParams *params = [[BRTCRenderParams alloc] init]; //画面不旋转 params.rotation = BRTCVideoRotation_0; //适配长边模式,短边区域填充黑色 params.fillMode = BRTCVideoFillMode_Fit; //前后置摄像头画面均不镜像 params.mirrorType = BRTCVideoMirrorTypeDisable; //设置远端视频渲染参数 [self.brtc setRemoteRenderParams:self.viewModel.userID streamType:BRTCVideoStreamTypeBig params:params];
您可以控制对远端用户的声音和视频的播放,需要通过如下接口获取房间中推流的用户信息、推流的摄像头和麦克风设备状态:
视频状态变化通知
屏幕共享流可用状态通知
准确地说,onRemoteUserEnter/LeaveRoom 仅能感知角色(role)为主播(anchor)的用户的进出房间的通知,之所以这样设计,是为了避免当一个房间中观众(audience)在线人数较多时,会因为频繁有人进出房间导致房间中的所有用户被其他用户进出房间的“信令风暴“攻击到。
@interface BRTCVideoForMultipleUsersViewController () <BRTCDelegate> @end @implementation BRTCVideoForMultipleUsersViewController #pragma -mark - 远端用户回调函数 - (void)onRemoteUserEnterRoom:(NSString *)userId { //添加远端用户加入房间处理逻辑 [self appendLog:[NSString stringWithFormat:@"onRemoteUserEnterRoom:%@", userId]]; } - (void)onRemoteUserLeaveRoom:(NSString *)userId reason:(NSInteger)reason { //添加远端用户退出房间处理逻辑 [self appendLog:[NSString stringWithFormat:@"onRemoteUserLeaveRoom:%@, reason:%ld", userId, (long)reason]]; } #pragma -mark - 远端用户发布/取消发布音视频回调函数 - (void)onUserAudioAvailable:(NSString *)userId available:(BOOL)available { //添加远端用户发布/取消音频回调处理逻辑 [self appendLog:[NSString stringWithFormat:@"onUserAudioAvailable:%@, available:%@", userId, available?@"YES":@"NO"]]; } - (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available { //添加远端用户发布/取消视频回调处理逻辑 [self appendLog:[NSString stringWithFormat:@"onUserVideoAvailable:%@, available:%@", userId, available?@"YES":@"NO"]]; [self.brtc startRemoteView:userId streamType:BRTCVideoStreamTypeBig view:self.remoteView]; } - (void)onUserSubStreamAvailable:(NSString *)userId available:(BOOL)available { //添加远端用户发布/取消屏幕共享回调处理逻辑 [self appendLog:[NSString stringWithFormat:@"brtc回调: 辅流状态回调, userId: %@, available: %d", userId, available]]; } @end
随着您的业务需求不断深入,您会发现有三种不同的“静音”,虽然他们都叫“静音”,但是实现机制和效果完全不同
订阅音视频流
本文详细介绍如何使用百家云 iOS SDK 订阅和取消订阅远端音视频
相关函数接口在 ios-sdk 2.8.20 及以上版本支持
设定订阅模式
您可以通过调用 BRTC 中的 setDefaultStreamRecvMode 接口设置订阅模式,需要在进入房间 enterRoom 前调用该接口,设置才能生效。BRTC 提供了两种订阅模式:
需要您注意的是,如果您不调用 setDefaultStreamRecvMode 也是没有关系的,SDK 的默认行为是自动订阅。但如果您希望设置为手动订阅,请务必注意 setDefaultStreamRecvMode 只有在 enterRoom 之前调用才有效果。
音频流的播放
您可以通过调用接口 muteRemoteAudio 来静音远端用户的声音,之后也可以通过调用接口 muteRemoteAudio 来解除对他的静音。
视频流的播放
您可以通过调用接口 startRemoteView 来播放远端用户的视频画面,但前提是您需要传递给 SDK 一个 view 对象,用来作为承载该用户的视频画面的渲染控件。
startRemoteView 的第一个参数是远端用户的 userId,第二个参数是远端用户的流类型,第三个参数则是您需要传递的 view 对象。其中第二个参数 streamType(流类型) 有三个可选的值,分别是:
注意事项
视频流停止播放
通过调用 stopRemoteView 接口,您可以停止播放某一个远端用户的视频。
设置播放参数
通过 setRemoteRenderParams 您可以设置画面的填充模式、旋转角度和镜像模式。
感知房间中远端用户的音视频状态
您可以控制对远端用户的声音和视频的播放,需要通过如下接口获取房间中推流的用户信息、推流的摄像头和麦克风设备状态:
视频状态变化通知
屏幕共享流可用状态通知
准确地说,onRemoteUserEnter/LeaveRoom 仅能感知角色(role)为主播(anchor)的用户的进出房间的通知,之所以这样设计,是为了避免当一个房间中观众(audience)在线人数较多时,会因为频繁有人进出房间导致房间中的所有用户被其他用户进出房间的“信令风暴“攻击到。
三种不同的静音
随着您的业务需求不断深入,您会发现有三种不同的“静音”,虽然他们都叫“静音”,但是实现机制和效果完全不同