微吼Sass互动SDK技术文档

最后更新时间:2018年08月06日

版本:3.2.0

微吼Sass互动SDK简介

微吼Sass互动SDK,是微吼在直播SDK Sass的基础上增加了一项直播互动功能的SDK,互动SDK是依赖于微吼Sass SDK的。

之所以提供互动SDK是为了使Sass SDK用友更加完善的直播互动功能,播主和观众可以进行连麦互动等。

SDK接入

SDK快速集成

将VHallSDK文件导入项目中,其中VHallInteractive即互动SDK。

需在TARGET->Embedded Binaries下添加WebRTC.framework(使用SDK必须)、VhallLiveBaseApi.framework(使用SDK必须)、VhallSignalingDynamic.framework(互动必须)。

使用说明

第一步:上麦

1、申请上麦

观众端,通过此方法发起上麦/取消申请。

/**
 *  观看直播上麦申请/取消申请
 *
 *  @param param
 *  param[@"type"]        = 1举手,0取消举手
 */
- (BOOL)microApplyWithType:(NSInteger)type;

2、同意上麦

直播端收到申请上麦请求,同意上麦,观众端收到如下回调

/**
 *  同意上麦回调
 *  @param player       VHallMoviePlayer实例
 *  @param attributes   参数
 *  @param error        错误回调
 */
- (void)moviePlayer:(VHallMoviePlayer *)player microInvitationWithAttributes:(NSDictionary *)attributes error:(NSError *)error;

3、进入互动

收到同意上麦回调,进入互动:

// 同意上麦回调
- (void)moviePlayer:(VHallMoviePlayer *)player microInvitationWithAttributes:(NSDictionary *)attributes error:(NSError *)error {
    
    if (error) {
        VHLog(@"上麦error:%@",error.description);
        return;
    }
    
    //进入互动
    VHinteractiveViewController *controller = [[VHinteractiveViewController alloc] init];
    controller.roomId = self.roomId;
    [self presentViewController:controller animated:YES completion:^{
        
    }];
}

第二部:互动

1、实例化互动类VHRoom,实例化本地摄像头类VHRenderView

VHRoom类是实现互动以及相关回调的类,连接房间、新成员加等通过代理VHRoomDelegate回调。

VHRenderView继承自UIView,是自己本地摄像头实例的类,也是互动成员流信息view。

2、进入互动房间

//进入互动房间
[self.interactiveRoom enterRoomWithRoomId:self.roomId];

3、开始推流

房间连接成功会有如下回调:

// 房间连接成功
- (void)room:(VHRoom *)room didConnect:(NSDictionary *)roomMetadata
{
    //上麦推流
    [room publishWithCameraView:self.cameraView];
    
    VHLog(@"房间连接成功,开始推流");
}

4、处理新加入的互动成员

// 有新的成员加入房间
- (void)room:(VHRoom *)room didAddAttendView:(VHRenderView *)attendView
{
    attendView.scalingMode = VHRenderViewScalingModeAspectFill;
    [self addView:attendView];
}
//有成员离开房间
- (void)room:(VHRoom *)room didRemovedAttendView:(VHRenderView *)attendView
{
    [self showMsg:[NSString stringWithFormat:@"%@ 已下麦",attendView.userId] afterDelay:0];
    
    [self removeView:attendView];
}

5、功能互动

通过实例化的cameraView,可以进行本地摄像头、麦克风等操作。

主持人操作相关互动人员设备:

//互动房间互动消息处理
- (void)room:(VHRoom *)room interactiveMsgWithEventName:(NSString *)eventName attribute:(id)attributes
{
    
    //禁言
    if ([attributes[@"type"] isEqualToString:@"*disablechat"]) {
        /*
         type = "*disablechat";
         "user_id" = 1167475;   //被禁言用户参会id
         */
    }
    //取消禁言
    else if ([attributes[@"type"] isEqualToString:@"*permitchat"]) {
        /*
         type = "*permitchat";
         "user_id" = 1167475;   //被取消禁言用户参会id
         */
        
    }
    //麦克风/摄像头操作
    else if ([attributes[@"type"] isEqualToString:@"*switchDevice"]) {
        /*
         device = 1;            // 1 麦克风 2 摄像头
         "join_uid" = 1167475;  //被操作用户参会id
         status = 0;            //0 关闭 1 打开
         type = "*switchDevice";
         */
        if ([attributes[@"device"] intValue] == 1)
        {
            if ([attributes[@"status"] intValue] == 0)
            {
                [self.cameraView muteAudio];
                _micBtn.selected = YES;
            }
            else
            {
                [self.cameraView unmuteAudio];
                _micBtn.selected = NO;
            }
        }
        else if ([attributes[@"device"] intValue] == 2)
        {
            if ([attributes[@"status"] intValue] == 0)
            {
                [self.cameraView muteVideo];
                _cameraBtn.selected = YES;
            }
            else
            {
                [self.cameraView unmuteVideo];
                _cameraBtn.selected = NO;
            }
        }
    }
    //下麦
    else if ([attributes[@"type"] isEqualToString:@"*notSpeak"]) {
        /*
         "join_uid" = 1167475;  //操作人参会id
         "nick_name" = 900530;  //被操作者昵称
         "role_name" = user;    //
         type = "*notSpeak";    //
         */
        
        //离开互动房间
        [self closeButtonClick:nil];
    }
}

注意

如果当前活动不支持互动功能,则无法进行互动。当前活动是否支持互动可通过以下Api获取:

/**
 *  观看直播,互动权限变更回调。
 *  @param player         VHallMoviePlayer实例
 *  @param isInteractive  当前活动是否是互动活动
 *  @param state          互动权限
 */
- (void)moviePlayer:(VHallMoviePlayer *)player isInteractiveActivity:(BOOL)isInteractive interactivePermission:(VHInteractiveState)state;