! 新版开发者中心已正式上线,旧文档将于6月30日下架,不再维护 立即体验

手动发布直播

下载pdf
更新时间:2019-09-27 10:08

1 简介

登录房间成功后,有两种发布直播的方式:

  1. 手动发布直播。登录成功后,SDK 不会自动开始推流,需要用户手动触发。
  2. 自动发布直播。登录成功后,SDK 会自动开始推流。

本文主要讲述手动发布直播的实现过程。

2 步骤

2.1 初始化 SDK

参考文档:快速集成-初始化

2.2 设置手动发布直播

调用如下 API 设置手动发布直播。

ZegoAudioRoomApi.h

/**
  设置登录房间成功后,是否手动发布直播

 @param manual YES:手动发布直播,NO:自动发布直播,默认为自动发布直播
 */
- (void)setManualPublish:(bool)manual;

2.3 设置发布代理对象

调用如下 API 设置 ZegoAudioLivePublisherDelegate 代理对象。设置代理对象失败,会导致 App 收不到相关回调。

ZegoAudioRoomApi-Publisher.h

/**
 设置 ZegoAudioLivePublisher 代理对象

 @param publisherDelegate 遵循 ZegoAudioLivePublisherDelegate 协议的对象
 @attention 推流前务必要设置代理对象
 @note 设置代理对象失败,会导致 App 收不到相关回调
 */
- (void)setAudioPublisherDelegate:(id<ZegoAudioLivePublisherDelegate>)publisherDelegate

2.4 登录房间

调用如下 API 登录房间。

ZegoAudioRoomApi.h

/**
 登录房间

 @param roomID 房间 ID,App 需保证其唯一性,长度不可超过 255 bytes
 @param block 登录完成回调 block
 @return true:登录成功,false:登录失败
 */
- (bool)loginRoom:(NSString *)roomID completionBlock:(ZegoAudioRoomBlock)block;

常见登录错误码参考如下:

错误码 说明
stateCode = 0 登录成功
stateCode = -1 没有配置为测试环境,请调用 [setUseTestEnv:YES]
stateCode = -2 调用次数太频繁,超出后台限制。请调整调用次数,每分钟最多 30 次
stateCode = 1042 网络连不上,请检查当前网络是否正常
stateCode = 4131 网络连接失败,一般由于网络波动或其他异常导致,请检查当前网络是否正常
stateCode = 1048677 测试环境或正式环境设置错误。如果使用测试环境,
请确保在初始化 SDK 之前调用 [setUseTestEnv:YES]
stateCode = 1048680 房间不存在,请检查房间是否存在

请注意,参数 roomID,是由 App 业务端定义、实现并传入的。开发者在定义 roomID 时需要确保在同一时刻是唯一的。

2.5 发布直播

调用如下 API 发布直播,该方法只有在 [ZegoAudioRoomApi setManualPublish:true] 时调用才有效。手动发布直播模式下,用户需要手动发布直播

ZegoAudioRoomApi-Publisher.h

/**
 开始直播

 @return true:调用成功; false:调用失败(失败原因:当前直播流已达上限、已经开播等)
 @note 该方法只有在 [ZegoAudioRoomApi setManualPublish:true] 时调用才有效
 */
- (bool)startPublish;

2.6 处理发布状态回调

手动发布开始后,开发者可在如下通知中处理发布状态和信息。

ZegoAudioRoomApi-Publisher.h

/**
 推流状态更新

 @param stateCode 状态码,0 表示推流成功
 @param streamID 流 ID
 @param info 流信息
 @note 注意调用 [ZegoAudioRoomApi (Publisher) -setAudioPublisherDelegate] 设置代理对象成功后,客户端才能收到此通知
 */
- (void)onPublishStateUpdate:(int)stateCode streamID:(NSString *)streamID streamInfo:(NSDictionary *)info;

常见发布错误码参考如下:

错误码 说明
stateCode = 0 推流成功
stateCode = 3 直播遇到严重错误。stateCode = 1/2/3 基本不会出现
stateCode = 4 创建直播流失败。请确认 userId,userName 是否为空
stateCode = 6 流不存在。请检查:1.AppID 是否相同,要保证一致。2.是否同时开启测试环境或同时在正式环境下
stateCode = 7 媒体服务器连接失败。请检查:1.推流端是否正常推流。2.正式环境和测试环境是否设置都是同一个。
3.网络是否正常
stateCode = 8 DNS 解析失败。请检查网络是否正常
stateCode = 9 未 loginRoom 就直接 play/publish。请确认推流前已 loginRoom
stateCode = 10 逻辑服务器网络错误(网络断开约 3 分钟时会返回该错误)。请检查网络是否正常

2.7 停止直播

调用如下 API 停止直播,该方法只有在 [ZegoAudioRoomApi setManualPublish:true] 时调用才有效。

手动发布直播模式下,用户需要手动发布直播。停止直播后不会直接退出房间,用户依然可以在此房间中再次发布直播。

ZegoAudioRoomApi-Publisher.h

/**
 停止直播

 @note 该方法只有在 [ZegoAudioRoomApi setManualPublish:true] 时调用才有效
 */
- (void)stopPublish;

2.8 退出房间

调用如下 API 退出房间。退出房间成功会停止所有的推流。

ZegoAudioRoomApi.h

/**
 退出房间

 @return true:成功,false:失败
 @note 退出房间成功会停止所有的推拉流
 */
- (bool)logoutRoom;

3 API 调用时序图

手动推流的 API 调用时序图如下所示,请开发者参考。