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