互动直播API
核心类
类名 | 类描述 |
---|---|
VHRoom | 互动类 |
基础属性
属性 | 属性描述 |
---|---|
delegate | 代理 |
status | 当前房间状态 |
broadCastConfig | 旁路布局配置 |
isPublishing | 当前是否在推流中 |
isVideoRound | 是否要参与轮巡 |
isRehearsal | 是否彩排 YES:彩排模式开播 NO:正常直播 (默认NO,开播前设置有效) |
isPublishAnother | 是否开启自动旁路 YES:开启 NO:不开启 (默认NO,开播前设置有效) |
isMainScreen | 是否开启自动主屏配置 YES:开启 NO:不开启 (默认NO,开播前设置有效) |
cameraView | 当前推流cameraView,只在推流过程中存在 |
renderViewsById | 除自己以外房间内其他流id与视频view信息 (key:streamId value:视频VHRenderView) |
streams | 除自己以外房间内其他流id列表 |
roomId | 房间id |
roomInfo | 房间相关信息(进入房间成功后才有值) |
关键方法
方法 | 方法描述 |
---|---|
enterRoomWithRoomId | 观众进入互动房间 |
enterRoomWithParams | 观众进入互动房间 |
guestEnterRoomWithParams | 嘉宾进入互动房间 |
hostEnterRoomStartWithParams | 主持人进入互动房间 |
publishWithCameraView | 开始推流 |
unpublish | 下麦并停止推流 |
leaveRoom | 离开房间 |
setRoomJoinBroadCastMixOption | 设置是否加入混流 |
publishAnotherLive | 开启/关闭旁路直播 |
baseConfigRoomBroadCast | 基础配置旁路混流参数 |
setHandsUpStatus | 设置是否开启观众举手申请上麦功能 |
inviteWithTargetUserId | 邀请某个用户上麦 |
agreeApplyWithTargetUserId | 同意某个用户的上麦申请 |
rejectApplyWithTargetUserId | 拒绝某个用户的上麦申请 |
setMainSpeakerWithTargetUserId | 设置某个用户为主讲人 |
downMicWithTargetUserId | 下麦某个用户 |
setBanned | 禁言/取消禁言某个用户 |
setKickOut | 踢出/取消踢出某个用户 |
applySuccess | 申请上麦 |
cancelApplySuccess | 取消申请上麦 |
rejectInviteSuccess | 拒绝主持人发来的上麦邀请 |
agreeInviteSuccess | 同意主持人发来的上麦邀请,成功回调中开启推流 |
settingRoomBroadCastDocMixEnable | 是否开启文档融屏旁路 |
getOnlineUserListWithPageNum | 获取在线成员列表 |
getLimitUserListWithPageNum | 获取受限成员列表 (包括:被踢出、被禁言的用户) |
getDocListWithPageNum | 获取房间文档列表 |
VHRoomDelegate 代理方法
方法 | 方法描述 |
---|---|
enterRoomWithError | 进入房间 |
didConnect | 进入房间 |
didError | 房间发生错误 |
didChangeStatus | 房间状态改变 |
didPublish | 推流成功 |
didUnpublish | 停止推流 |
didAddAttendView | 视频流加入 |
didRemovedAttendView | 视频流离开 |
leaveInteractiveRoomByHost | 自己下麦 |
microphoneClosed | 自己的麦克风开关状态改变 |
screenClosed | 自己的摄像头开关状态改变 |
iskickout | 自己被踢出房间 |
forbidChat | 自己被禁言或取消禁言 |
allForbidChat | 收到全体禁言或取消全体禁言 |
liveOver | 直播结束 |
receiveRoomMessage | 互动相关消息 |
观众进入互动房间
- (void)enterRoomWithRoomId:(NSString *)roomId;
- (void)enterRoomWithParams:(NSDictionary *)params;
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
roomId | 是 | 123456789 | 房间id,同活动id |
params[@"id"] | 是 | params[@"id"] = @"123456789" | 房间id,同活动id |
params[@"nickname"] | 否 | params[@"nickname"] = @"张三" | 昵称 (可选) |
params[@"email"] | 否 | params[@"email"] = @"xxx@vhall.com" | 邮箱(可选) |
@interface UIViewController () <VHRoomDelegate>
/// 互动SDK
@property (nonatomic, strong) VHRoom *inavRoom;
@end
- (void)viewDidLoad {
[super viewDidLoad];
// 初始化互动对象
self.inavRoom = [[VHRoom alloc] init];
// 设置delegate
self.inavRoom.delegate = self;
// 观众进入互动房间
[self.inavRoom enterRoomWithRoomId:@"123456789"];
}
嘉宾进入互动房间
v6.1新增
- (void)guestEnterRoomWithParams:(NSDictionary *)params
success:(void(^)(VHRoomInfo *info))success
fail:(void(^)(NSError *error))fail;
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
params | 是 | params | 必要参数 |
params[@"id"] | 是 | params[@"id"] = @"123456789" | 房间id,同活动id |
params[@"nickname"] | 否 | params[@"nickname"] = @"张三" | 昵称 |
params[@"email"] | 否 | params[@"email"] = @"xxx@vhall.com" | 邮箱(可选) |
参数名称 | 备注 |
---|---|
success | 成功 |
fail | 错误 |
VHRoomInfo参数详解
// 嘉宾进入互动房间
[self.inavRoom guestEnterRoomWithParams:self.params success:^(VHRoomInfo *roomInfo) {
} fail:^(NSError *error) {
}];
主持人进入互动房间
收到"房间连接成功回调"后可开始推流(主持人使用)
- (void)hostEnterRoomStartWithParams:(NSDictionary *)params
success:(void(^)(VHRoomInfo *info))success
fail:(void(^)(NSError *error))fail;
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
params | 是 | params | 必要参数 |
params[@"id"] | 是 | params[@"id"] = @"123456789" | 房间id,同活动id |
params[@"nickname"] | 否 | params[@"nickname"] = @"张三" | 昵称 |
params[@"email"] | 否 | params[@"email"] = @"xxx@vhall.com" | 邮箱(可选) |
// 主持人进入互动房间
[self.inavRoom hostEnterRoomStartWithParams:self.params success:^(VHRoomInfo *roomInfo) {
}fail:^(NSError *error) {
}];
开始推流
加入房间成功以后方可调用
- (BOOL)publishWithCameraView:(VHLocalRenderView * )cameraView;
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
cameraView | 是 | VHLocalRenderView * cameraView = [VHLocalRenderView new]; | 需要推流的本地摄像头view |
// 房间连接成功
- (void)room:(VHRoom *)room didConnect:(NSDictionary *)roomMetadata
{
NSLog(@"房间连接成功,开始推流");
//上麦推流
[self.inavRoom publishWithCameraView:self.cameraView];
}
下麦并停止推流
- (void)unpublish;
[self.inavRoom unpublish];
离开房间
- (void)leaveRoom;
[self.inavRoom leaveRoom];
设置是否加入混流
- (void)setRoomJoinBroadCastMixOption:(BOOL)isJoin
cameraView:(VHLocalRenderView *)cameraView
finish:(void(^)(int code, NSString * _Nonnull message))handle;
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
isJoin | 是 | YES | 是否加入 |
cameraView | 是 | cameraView | 加入混流的renderView |
handle | 返回参数 |
handle参数详解
参数名称 | 备注 |
---|---|
code | 状态码 |
message | 详情 |
[self.inavRoom setRoomJoinBroadCastMixOption:YES
cameraView:self.videoRoundRenderView
finish:^(int code, NSString * _Nonnull message) {
NSLog(@"状态 === %d 文案 === %@",code,message);
}];
开启或关闭旁路直播
- (BOOL)publishAnotherLive:(BOOL)isOpen param:(NSDictionary*)param completeBlock:(void(^)(NSError *error))block;
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
isOpen | 是 | YES | Yes开启旁路直播 NO关闭旁路直播 |
param | 是 | param | 调用此函数配置视频质量参数和旁路布局 |
NSMutableDictionary *param = [NSMutableDictionary dictionary];
param[@"precast_pic_exist"] = @(NO); //是展示小人占位图
param[@"backgroundColor"] = [self.roomInfo.videoBackGroundColor stringByReplacingOccurrencesOfString:@"#" withString:@"0x"];
NSMutableDictionary * borderDic = [NSMutableDictionary dictionary];
borderDic[@"exist"] = @(YES);
borderDic[@"width"] = @(1);
borderDic[@"color"] = [self.roomInfo.videoBackGroundColor stringByReplacingOccurrencesOfString:@"#" withString:@"0x"];
param[@"border"] = borderDic; //配置背景颜色
[self.inavRoom publishAnotherLive:YES param:[param copy] completeBlock:^(NSError *error) {
if(!error) { //设置旁路直播状态成功
VUI_Log(@"设置旁路成功");
}else if(error.code == 40008) {//旁路推流正在进行中
VUI_Log(@"设置旁路错误:当前推流正在进行中");
}else {
VUI_Log(@"设置旁路错误:%@",error.domain);
}
}];
基础配置旁路混流参数
- (NSDictionary*)baseConfigRoomBroadCast:(VHBroadcastProfileMode)definition layout:(VHBroadcastLayout)layout;
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
definition | 是 | VHBroadcastProfileMode_480P_0 | 视频质量参数,推荐使用。即(分辨率+帧率+码率) |
layout | 是 | VHBroadcastLayout_PATTERN_GRID_1 | 旁路布局模板(非自定义布局) |
BroadcastDefinition definition = VHBroadcastProfileMode_480P_0;
VHBroadcastLayout layout = VHBroadcastLayout_ADAPTIVE_TILED_MODE;
[self.inavRoom baseConfigRoomBroadCast:definition layout:layout]