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;

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、本 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;

请注意

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;

请注意,该 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;

常见拉流错误码参考如下:
在这里插入图片描述
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;

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

2.8 退出房间

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

ZegoLiveRoomApi.h

/**
 退出房间

 @return true 成功,false 失败
 @attention 连麦情况下,要 stop 所有的 stream 后,才能执行 logoutRoom
 */
- (bool)logoutRoom;

猜你喜欢

转载自blog.csdn.net/sinat_20146421/article/details/83692574