预先说明:由于观众端也可以推流成为主播,为了避免歧义,下文中的观众均指
ZegoRole
为ZEGO_AUDIENCE
的角色,主播均指ZegoRole
为ZEGO_ANCHOR
的角色。
SDK 提供了主播和观众的连麦(多主播同台)功能,支持主播与观众互动。直播中的连麦分为两种情况:
下面分别介绍这两种方式的实现。
连麦操作的前提是主播正在推流、观众正在同一房间拉流观看。因此前置步骤同推拉流一致,此处不再赘述。
参考文档:初级功能指南-推流
请注意,连麦模式推流,需要指定
startPublishing:title:flag:
中的 flag 为ZEGO_JOIN_PUBLISH
。
参考文档:初级功能指南-拉流
观众申请连麦的流程为:
流程图如下所示:
按照上述步骤,SDK API 调用过程如下所示。
请特别注意:
下述处理流程中,请开发者注意区分各 API 是属于观众端逻辑,还是主播端逻辑。否则可能导致数据流不通,功能异常。
开发者需要在观众端调用此 API 实现连麦请求。主播端的响应结果会通过其中的 blk 回调。
ZegoLiveRoomApi-Player.h/** 请求连麦 @param blk 回调 block @return true 成功,false 失败 @attention 观众请求连麦后,主播会收到 [ZegoLivePublisherDelegate -onJoinLiveRequest:fromUserID:fromUserName:roomID:] 回调 @note 连麦成功后,结果通过 blk 回调 */- (bool)requestJoinLive:(ZegoResponseBlock)blk;
由于开发者已经在主播推流环节,设置了 ZegoLivePublisherDelegate
代理对象,此处无需再次设置。
观众连麦请求发送成功后,主播端可直接在此 API 中收到观众端的连麦申请。
ZegoLiveRoomApi-Publisher.h/** 收到连麦请求 @param seq 连麦请求序列号,标识当次连麦请求 @param userId 来源用户 ID @param userName 来源用户名 @param roomID 房间 ID @attention 观众调用 [ZegoLiveRoomApi (Player) -requestJoinLive] 申请连麦后,主播端会收到本通知 */- (void)onJoinLiveRequest:(int)seq fromUserID:(NSString *)userId fromUserName:(NSString *)userName roomID:(NSString *)roomID;
主播端收到观众端的连麦请求后,需要调用此 API 做出响应(同意或拒绝)。
一般是在 3.2 onJoinLiveRequest
的通知中调用此 API 响应。
ZegoLiveRoomApi-Publisher.h/** 响应连麦请求 @param seq 连麦请求序列号,标识当次连麦请求 @param rspResult 响应结果,0 表示同意连麦 @return true 成功,false 失败 @attention 主播端通过 [ZegoLivePublisherDelegate -onJoinLiveRequest:fromUserID:fromUserName:seq:] 收到观众连麦申请,再调用本 API 响应 */- (bool)respondJoinLiveReq:(int)seq result:(int)rspResult;
观众端可直接在 3.1 requestJoinLive
的回调 blk 中获取主播端的响应结果,无需额外调用其他 API。
连麦结束后,开发者需要在主播端调用此 API 结束与指定观众的连麦。
/** 结束连麦 @param userId 指定 UserId 停止连麦 @param block 信令发送结果 @return true 成功,false 失败 */- (bool)endJoinLive:(NSString *)userId completionBlock:(ZegoCustomCommandBlock)block;
除此之外,观众也可结束连麦,调用 stopPublishing
即可。
主播端结束连麦后,观众端可在此 API 中获取结束连麦的通知,并在其中进行一些清理操作。
/** 收到结束连麦信令 @param fromUserId 来源用户 ID @param fromUserName 来源用户名 @param roomID 房间 ID */- (void)onEndJoinLiveCommad:(NSString *)fromUserId userName:(NSString *)fromUserName roomID:(NSString *)roomID;
此步骤仅适用于主播结束连麦,观众调用 stopPublishing
结束连麦,主播方不支持类似回调,但可以通过房间流的删减知悉。
主播邀请观众连麦的流程为:
流程图如下所示:
按照上述步骤,SDK API 调用过程如下。
请特别注意:
下述处理流程中,请开发者注意区分各 API 是属于观众端逻辑,还是主播端逻辑。否则可能导致数据流不通,功能异常。
开发者需要在主播端调用此 API 实现连麦邀请,邀请的观众必须是同一房间内的观众。观众端的响应结果会通过其中的 blk 回调。
ZegoLiveRoomApi-Publisher.h/** 邀请连麦 @param userID 准备邀请的用户 ID @param blk 邀请成功后,通过 blk 回调结果 @return true 成功,false 失败 @attention 主播邀请连麦成功后,被邀请的观众收到 [ZegoLivePlayerDelegate -onInviteJoinLiveRequest:fromUserID:fromUserName:roomID:] 通知 */- (bool)inviteJoinLive:(NSString *)userID responseBlock:(ZegoResponseBlock)blk;
由于开发者已经在观众拉流环节,设置了 ZegoLivePlayerDelegate
代理对象,此处无需再次设置。
主播连麦邀请发送成功后,被邀请的观众端可直接在此 API 中收到主播端的连麦请求。
ZegoLiveRoomApi-Player.h/** 收到主播端的邀请连麦请求 @param seq 连麦请求序列号,标识当次连麦请求 @param userId 来源用户 ID @param userName 来源用户名 @param roomID 房间 ID @attention 主播端调用 [ZegoLiveRoomApi (Publisher) -inviteJoinLive:responseBlock:] 邀请观众连麦后,观众端会收到此通知 @note 建议在此通知中,调用 [ZegoLiveRoomApi (Player) -respondInviteJoinLiveReq:result:] 回应邀请连麦请求 */- (void)onInviteJoinLiveRequest:(int)seq fromUserID:(NSString *)userId fromUserName:(NSString *)userName roomID:(NSString *)roomID;
观众端收到主播端的连麦邀请后,需要调用此 API 做出响应(同意或拒绝)。一般是在 4.2 onInviteJoinLiveRequest
的通知中调用此 API响应。
ZegoLiveRoomApi-Player.h/** 回应主播端的邀请连麦请求 @param seq 连麦请求序列号,标识当次连麦请求 @param rspResult 回应,0 为同意 @return true 成功,false 失败 @attention 一般在 [ZegoLivePlayerDelegate -onInviteJoinLiveRequest:fromUserID:fromUserName:roomID:] 中调用本 API 回应邀请连麦请求 */- (bool)respondInviteJoinLiveReq:(int)seq result:(int)rspResult;
主播端可直接在 4.1 inviteJoinLive
的回调 blk 中获取观众端的响应结果,无需额外调用其他 API。
连麦结束后,开发者需要在主播端调用此 API 结束与指定观众的连麦。
/** 结束连麦 @param userId 指定 UserId 停止连麦 @param block 信令发送结果 @return true 成功,false 失败 */- (bool)endJoinLive:(NSString *)userId completionBlock:(ZegoCustomCommandBlock)block;
除此之外,观众也可结束连麦,调用 stopPublishing
即可。
主播端结束连麦后,观众端可在此 API 中获取结束连麦的通知,并在其中进行一些清理操作。
/** 收到结束连麦信令 @param fromUserId 来源用户 ID @param fromUserName 来源用户名 @param roomID 房间 ID */- (void)onEndJoinLiveCommad:(NSString *)fromUserId userName:(NSString *)fromUserName roomID:(NSString *)roomID;
此步骤仅适用于主播结束连麦,观众调用 stopPublishing
结束连麦,主播方不支持类似回调,但可以通过房间流的删减知悉。
连麦系统架构图如下所示:
联系客服