阅读 163

iOS 直播拉流

iOS 直播拉流

本文简述iOS环境下,接入即构科技音视频SDK实现直播拉流功能的具体操作步骤等。


1、简介


直播过程中,如果想观看房间内其他成员的推流画面,都需要进行拉流操作。一般有下面 2 种情形:


1.1主播推流成功后,观众端拉流观看主播画面。


1.2主播与观众连麦成功后,主播端拉流观看观众画面。


无论拉流时机如何,拉流操作都是相同的。本文主要以第一种情形为例。


2、步骤


2.1 初始化 SDK


参考文档:初级功能指南-初始化


2.2 设置拉流代理对象


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


ZegoLiveRoomApi-Player.h


/**

 设置 Player 代理对象


 @param playerDelegate 遵循 ZegoLivePlayerDelegate 协议的代理对象

 @return true 成功,false 失败

 @attention 使用 Player 功能,初始化相关视图控制器时需要设置代理对象

 @note 未设置代理对象,或对象设置错误,可能导致无法正常收到相关回调

 */

- (bool)setPlayerDelegate:(id<ZegoLivePlayerDelegate>)playerDelegate;

1

2

3

4

5

6

7

8

9

10

11

2.3 登录房间


SDK 提供了两个 API 用于登录房间,区别仅在于是否指定房间名称。登录成功后,blk 会返回当前房间中的 streamList。


ZegoLiveRoomApi.h


/**

 登录房间


 @param roomID 房间 ID,长度不可超过 255 bytes

 @param role 成员角色,可取值为 ZEGO_ANCHOR(主播),ZEGO_AUDIENCE(观众),详见 ZegoRole 定义

 @param blk 回调 block

 @return true 成功,false 失败

 @attention 登录房间成功,才能开始直播

 @note 观众登录房间成功后,会在 blk 中返回当前房间的流信息

 */

- (bool)loginRoom:(NSString *)roomID role:(int)role withCompletionBlock:(ZegoLoginCompletionBlock)blk;


/**

 登录房间


 @param roomID 房间 ID,长度不可超过 255 bytes

 @param roomName 房间名称,可选,长度不可超过 255 bytes

 @param role 成员角色,可取值为ZEGO_ANCHOR(主播),ZEGO_AUDIENCE(观众),详见 ZegoRole 定义

 @param blk 回调 block

 @return true 成功,false 失败

 @attention 登录房间成功,才能开始直播

 @note 观众登录房间成功后,会在 blk 中返回当前房间的流信息

 */

- (bool)loginRoom:(NSString *)roomID roomName:(NSString *)roomName role:(int)role withCompletionBlock:(ZegoLoginCompletionBlock)blk;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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



请注意:


1、本 API 中的第一个参数 roomID,是由 App 业务端定义、实现并传入的。开发者在定义 roomID

时需要确保在同一时刻是唯一的。


2、回调 blk 中的是 ZegoStream 对象,内部封装了 userID、userName、streamID 和 extraInfo。


2.4 拉流


登录房间成功后,用户可在成功 blk 的 streamList 中,获取到房间的流信息(streamID)。用户需根据此信息进行拉流操作。


调用如下 API 进行拉流。


/**

 播放直播流


 @param streamID 流 ID,长度不可超过 255 bytes,支持可打印字符

 @param view 用来渲染播放视频的视图

 @return true 成功,false 失败

 @attention 播放直播流调用此 API

 @note 播放成功后,等待 [ZegoLivePlayerDelegate -onPlayStateUpdate:streamID:] 回调

 */

- (bool)startPlayingStream:(NSString *)streamID inView:(ZEGOView *)view;

1

2

3

4

5

6

7

8

9

10

请注意


streamID 可从登录成功的回调 blk 中解析出。


播放视图由用户自定义。


2.5 设置视图模式(可选)


启动拉流后,本地视图的默认预览模式为等比缩放填充整个 View(可能有部分被裁剪)。如果用户想更改,还需要额外调用此 API 设置。


ZegoLiveRoomApi-Player.h


/**

 设置观看直播的View的模式


 @param mode 模式,参考 ZegoVideoViewMode 定义。默认 ZegoVideoViewModeScaleAspectFill

 @param streamID 播放流 ID,长度不可超过 255 bytes,支持可打印字符

 @return true 成功,false 失败

 @note startPlaying 后调用才有效,否则无效

 @attention 流播放、流新增、全屏切换等其他流尺寸可能变化的场合时调用

 */

- (bool)setViewMode:(ZegoVideoViewMode)mode ofStream:(NSString *)streamID;

1

2

3

4

5

6

7

8

9

10

11

12

请注意,该 API 在 startPlaying 后调用才有效,否则无效。


2.6 获取拉流状态回调


拉流开始后,开发者可在如下回调中获取拉流状态和流信息。


ZegoLiveRoomApi-Player.h


/**

 播放流事件


 @param stateCode 播放状态码,0 表示拉流成功

 @param streamID 流 ID

 @attention 观众调用 [ZegoLiveRoomApi (Player) -startPlayingStream:inView:] 拉流成功后,通过该 API 通知

 */

- (void)onPlayStateUpdate:(int)stateCode streamID:(NSString *)streamID;

1

2

3

4

5

6

7

8

9

10

常见拉流错误码参考如下:


2.7 停止拉流


当房间中的某条流被删除后,开发者需要调用此 API 停止拉流。


ZegoLiveRoomApi-Player.h


/**

 停止播放流


 @param streamID 流 ID,长度不可超过 255 bytes,支持可打印字符

 @return true 成功,false 失败

 @attention 主播停止流推后,会通过 [ZegoRoomDelegate -onStreamUpdated:streams:roomID:] 通知房间内用户流删除,建议开发者在此通知中调用本 API 停止播放流

 @note 停止播放流后,注意移除相关的 UI 控件

 */

- (bool)stopPlayingStream:(NSString *)streamID;

1

2

3

4

5

6

7

8

9

10

11

注意停止拉流后移除相关的 UI 控件。


2.8 退出房间


拉流结束后,调用如下 API 退出房间。请开发者在退出房间前,确保停止拉流,并清理相关状态与控件。


ZegoLiveRoomApi.h


/**

 退出房间


 @return true 成功,false 失败

 @attention 连麦情况下,要 stop 所有的 stream 后,才能执行 logoutRoom

 */

- (bool)logoutRoom;

————————————————

版权声明:本文为CSDN博主「海水冷却」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/sinat_20146421/article/details/83692574


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐