微吼Sass互动SDK技术文档
最后更新时间:2018年08月06日
版本:3.2.0
微吼Sass互动SDK简介
微吼Sass互动SDK,是微吼在直播SDK Sass的基础上增加了一项直播互动功能的SDK,互动SDK是依赖于微吼Sass SDK的。
之所以提供互动SDK是为了使Sass 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;