互动模块

头文件

VHInteractiveRoom.h

类名

VHInteractiveRoom

属性

delegate

互动房间代理VHInteractiveRoomDelegate

@property (nonatomic,weak)id <VHInteractiveRoomDelegate> delegate;

status

互动房间状态VHInteractiveRoomStatus

/*
 * 当前房间状态
 */
@property (nonatomic, assign, readonly) VHInteractiveRoomStatus    status;

cameraView

/*
 * 当前推流 cameraView 只在推流过程中存在
 */
@property (nonatomic, strong, readonly) VHRenderView    *cameraView;

renderViewsById

/*
 * 所有其他进入本房间的视频view
 */
@property (nonatomic, strong, readonly) NSDictionary    *renderViewsById;

roomId


/*
 * 房间id
 */
@property (nonatomic, copy,   readonly) NSString        *roomId;

isPublishing

/*
 * 当前推流状态
 * 是否正在推流
 */
@property (nonatomic, assign, readonly) BOOL            isPublishing;

permission

/*
 * 进入互动房间后可用权限
 * 注: didEnterRoom 后调用有效 具体权限如下:
 kick_inav              踢出互动房间 / 取消踢出互动房间
 kick_inav_stream       踢出路流 / 取消踢出流
 publish_inav_another   推旁路直播 / 结束推旁路直播
 apply_inav_publish     申请上麦
 publish_inav_stream    推流
 askfor_inav_publish    邀请用户上麦推流
 audit_inav_publish     审核申请上麦
 */
@property (nonatomic,copy,readonly)NSArray      * permission;

方法

- enterRoomWithRoomId: accessToken:

#pragma mark - 房间操作
/*
 * 加入房间
 * @param roomId 互动房间id
 * @param accessToken  accessToken
 * 调用完成等待代理回调确认接下来操作
 */
- (void)enterRoomWithRoomId:(const NSString *_Nonnull)roomId accessToken:(const NSString *_Nonnull)accessToken;

- enterRoomWithRoomId: accessToken: userData:

#pragma mark - 房间操作
/*
 * 加入房间
 * @param roomId 互动房间id
 * @param accessToken  accessToken
 * @param userData  用户数据可以携带不超过255字符的字符串 可在VHRenderView中获取此值
 * 调用完成等待代理回调确认接下来操作
 */
- (void)enterRoomWithRoomId:(const NSString *_Nonnull)roomId accessToken:(const NSString *_Nonnull)accessToken userData:(NSString*)userData;

- leaveRoom

/*
 * 离开房间
 */
- (void)leaveRoom;

- kickoutRoom: thirdUserId:

/*
 * 踢出互动房间并加入黑名单 或 从黑名单解禁
 * @param isKickout Yes 踢出房间 并加入黑名单 NO 从黑名单解禁
 * @param third_user_id 第三方id
 */
- (BOOL)kickoutRoom:(BOOL)isKickout thirdUserId:(const NSString *_Nonnull)third_user_id;

- publishWithCameraView:

#pragma mark - 上下麦操作
/*
 * 上麦推流
 * @param camera 本地摄像头view
 */
- (BOOL)publishWithCameraView:(VHRenderView*) cameraView;

- unpublish

/*
 * 下麦停止推流
 */
- (BOOL)unpublish;

- kickoutStreamWithThirdUserId:

/*
 * 帮别人下麦
 * @param third_user_id 被下麦人的第三方id
 */
- (BOOL)kickoutStreamWithThirdUserId:(const NSString *_Nonnull)third_user_id;

- addVideo:

/*
 * 接收他人视频数据
 * @param streamId 他人视频 streamId
 */
- (BOOL)addVideo:(NSString*)streamId;

- removeVideo:

/*
 * 不接收他人视频数据
 * @param streamId 他人视频 streamId
 */
- (BOOL)removeVideo:(NSString*)streamId;

- invitePublishWithThirdUserId:

/*
 * 邀请 上麦推流
 * @param third_user_id 被邀请/取消邀请人的第三方id
 */
- (BOOL)invitePublishWithThirdUserId:(const NSString *_Nonnull)third_user_id;

- acceptPublishRequest: thirdUserId:

/*
 * 是否接受 上麦推流申请
 * @param third_user_id 互动观众的第三方id
 */
- (BOOL)acceptPublishRequest:(BOOL)isAccept thirdUserId:(const NSString *_Nonnull)third_user_id;

- refusePublish

/*
 * 拒绝被邀请上麦推流
 */
- (BOOL)refusePublish;

- requestPublish

/*
 * 申请上麦推流
 */
- (BOOL)requestPublish;

- inviteUserList:

/*
 * 互动房间用户列表
 * userList数据结构
 * third_party_user_id  第三方用户ID
 * status               用户状态 1 推流中 2 观看中 3 受邀中  4 申请上麦中 
 */
- (BOOL)inviteUserList:(void(^)(NSArray* userList)) block;

- kickoutUserList:

/*
 * 互动房间被踢出用户列表
 * userList数据结构 [xxxxxx,...]
 */
- (BOOL)kickoutUserList:(void(^)(NSArray* userList)) block;

- publishAnotherLive: liveRoomId: completeBlock:

接口参数及错误码介绍

#pragma mark - 旁路操作
/*
 * 开启/关闭旁路直播
 * @param isOpen Yes开启旁路直播   NO关闭旁路直播
 * @param roomID 旁路直播间
 */
- (BOOL)publishAnotherLive:(BOOL)isOpen liveRoomId:(const NSString *_Nonnull)liveRoomId completeBlock:(void(^)(NSError *error)) block;

代理方法

VHInteractiveRoomDelegate

- room: error:
#pragma mark - 房间信息回调
/*
 * 房间错误回调
 */
- (void)room:(VHInteractiveRoom *)room error:(NSError*)error;
- room: didChangeStatus
/*
 * 房间状态变化
 */
- (void)room:(VHInteractiveRoom *)room didChangeStatus:(VHInteractiveRoomStatus)status;
- room: didEnterRoom:
/*
 * 进入互动房间
 */
- (void)room:(VHInteractiveRoom *)room didEnterRoom:(NSString *)third_user_id;
- room: didLeaveRoom: isKickOutRoom:
/*
 * 离开互动房间
 */
- (void)room:(VHInteractiveRoom *)room didLeaveRoom:(NSString *)third_user_id isKickOutRoom:(BOOL)isKickOut;
- room: didAddAttendView:
/*
 * 他人上麦消息
 */
- (void)room:(VHInteractiveRoom *)room didAddAttendView:(VHRenderView *)attendView;
- room: didRemovedAttendView:
/*
 * 他人下麦消息
 */
- (void)room:(VHInteractiveRoom *)room didRemovedAttendView:(VHRenderView *)attendView;
- room: requestPublish:
#pragma mark - 上下麦推流信息回调
/*
 * 收到别人上麦申请 调用审核申请上麦接口回复
 */
- (void)room:(VHInteractiveRoom *)room requestPublish:(NSString *)third_user_id;
- room: canPublish: type:
/*
 *
 * canPublish YES 可以上麦推流 NO 不可上麦推流
 * type 1、进入房间后有无上麦推流权限 2、申请上麦 审核后有无上麦推流权限 3、收到邀请上麦消息 获得上麦推流权限
 */
- (void)room:(VHInteractiveRoom *)room canPublish:(BOOL)canPublish type:(int) type;
- room: userChangeStatus: onlineNum:
/*
 * 房间中人员列表信息变化
 */
- (void)room:(VHInteractiveRoom *)room userChangeStatus:(int)status onlineNum:(NSInteger)onlineNum;
- room: didPublish:
/*
 * 推流成功
 */
- (void)room:(VHInteractiveRoom *)room didPublish:(VHRenderView *)cameraView;
- room: didUnpublish:
/*
 * 停止推流成功
 * reason  "主动下麦" "被动下麦"
 */
- (void)room:(VHInteractiveRoom *)room didUnpublish:(NSString *)reason;
- room: didUpdateOfStream: muteStream:
/**
 @brief 流音视频开启情况
 @param streamId 流id
 @param muteStream 流音视频开启情况
 */
- (void)room:(VHInteractiveRoom *)room didUpdateOfStream:(NSString *)streamId muteStream:(NSDictionary *)muteStream;
- room: onStreamMixed:
/**
 @brief 服务器已准备好混流可以调用混流接口
 @param msg msg
 @discussion onStreamMixed
 */
- (void)room:(VHInteractiveRoom *)room onStreamMixed:(NSDictionary *)msg;

结构体

VHInteractiveRoomStatus

/*
 * 互动房间状态
 */
typedef NS_ENUM(NSInteger, VHInteractiveRoomStatus) {
    VHInteractiveRoomStatusReady,
    VHInteractiveRoomStatusConnected,
    VHInteractiveRoomStatusDisconnected,
    VHInteractiveRoomStatusError
};