功能详细说明
关于创建、加入频道
Easyvaas 多人连麦 SDK 中提供了三种身份:Master(主播)、LiveGuest(连麦观众)、Guest(观众),一个频道中只能有一个 Master,可以有最多六个 LiveGuest,若干 Guest。
- 一个频道只能创建一次,创建该频道的用户身份应为
Master
- 用户只能加入已创建的频道进行多人连麦,加入已有频道进行连麦的用户身份应为
LiveGuest
- 当某一频道开启了旁路直播,则可以通过获取流地址进行观看,观看者用户身份应为
Guest
一个频道的连麦步骤大体如下:
一. Master 创建并加入一个频道 customChannel
,开启旁路直播,保存视频
[self.rtcKit createAndJoinChannel:customChannel uid:0 hasPublisher:YES record:YES callback:^(EVRtcResponseCode code, NSDictionary *info, NSError *error) {
if (code == EVRtcResponseCode_None) {
// 创建、加入频道成功
} else {
// 创建、加入频道失败
}
}];
此时名为 customChannel
的频道已经由一名 Master 用户成功创建了,此频道中当前只有创建频道的用户一个人
二. 一名连麦观众(LiveGuest)想加入 customChannel
频道
[self.rtcKit joinChannel:customChannel uid:0 callback:^(EVRtcResponseCode code, NSDictionary *info, NSError *error) {
if (code == EVRtcResponseCode_None) {
// 加入频道成功
} else {
// 加入频道失败
}
}];
此时频道 customChannel
中有两名用户,其他主播也可以通过第[二]步操作,以 LiveGuest
身份加入连麦,进行多人连麦
注:一个频道中包括 Master 在内最多可以容纳七人。
三. 一名观众(Guest)想观看 customChannel
频道中的多人连麦视频流,但自己不进行连麦操作
[self.rtcKit watchLiveWithChannel:self.roomName callback:^(EVRtcResponseCode code, NSDictionary *info, NSError *error) {
if (code == EVRtcResponseCode_None) {
// 已获取到播放地址
} else {
// 获取播放地址失败
}
}];
获取连麦视频流地址后,既可通过播放器观看 customChannel
频道下的视频流,人数无限制。
关于画布设置
本地画布设置
一个频道中的每一位用户,都有自己唯一的标识 uid
。当 customChannel
频道中加入了新用户时,我们想显示该用户的画面,就需要为其创建一个和 uid 绑定的 UIView
,通过改变这个视图的布局,来实现更改本地各个连麦画面布局的效果。
创建好了绑定唯一 uid 的 newView,我们需要让该 uid 对应用户的视频流显示到新创建的视图上,调用如下方法传入 newView,SDK 内部会对其进行渲染处理
[self.rtcKit configCanvasWithView:newView uid:uid mode:EVRtc_Render_Fit];
本地需要维护一个数组array,来缓存每个用户的 uid、view 等信息。
当前用户创建或加入频道时,可标识 uid = 0 创建用户信息并加入到array中,本地即可使用 uid=0 来识别当前用户;新加入的用户可以在代理回调firstRemoteVideoDecodedOfUid
中创建新用户信息,并加入数组array。详情请参考demo。
旁路视频流中画布设置
是否开启旁路推流,以及旁路视频流中画布的布局设置,只有 Master 才有权限设置
设置旁路视频流画布布局可在视图渲染后,通过 - (void)configVideoRegion:(NSArray<EVRTCVideoRegion *> *)regions;
方法进行设置,regions 是一个由 EVRTCVideoRegion
类型对象组成的数组,每个对象中主要包含对应的 uid、x、y、width、height 等
注:x、y、width、height 的值区间为 [0,1],按百分比计算
[self.rtcKit configVideoRegion:regions];
SDK内默认的旁路推流布局如下,其中数字代表连麦观众显示的顺序,最外层为屏幕边缘,具体效果详见 Demo 运行效果
--------------------------------
| | 4 | 1 |
| -----------------------|
| | 5 | 2 |
| -----------------------|
| | 6 | 3 |
--------------------------------
注意事项
- 使用RTC模块前,需要先通过 appid/appkey/appsecret 进行初始化,初始化成功才可使用服务
- 三种身份中,Master只能、必须有
1个
,LiveGuest最多有6个
,Guest个数不限
(Guest身份只是获取播放地址,所以不存在限制) - Master如果在连麦过程中出现异常退出,可通过原来的 channel/uid 可重新加入其已创建的房间
- LiveGuest异常退出后,不能重新以原有 uid 重新加入房间,并且原有 uid 在其心跳超时之前会占用一个 LiveGuest 的位置
枚举值
用户加入频道的身份枚举 EVRtcClientRole
名称 | 数值 | 含义 |
---|---|---|
EVRtc_ClientRole_Master | 0 | 主播 |
EVRtc_ClientRole_LiveGuest | 1 | 连麦观众 |
EVRtc_ClientRole_Guest | 2 | 观众 |
连麦断线理由枚举 EVRtcOfflineReason
名称 | 数值 |
---|---|
EVRtc_UserOffline_Quit | 0 |
EVRtc_UserOffline_Dropped | 1 |
EVRtc_UserOffline_BecomeAudience | 2 |
画面布局类型枚举 EVRtcRenderMode
名称 | 数值 | 含义 |
---|---|---|
EVRtc_Render_Hidden | 1 | 裁剪画面,填充显示 |
EVRtc_Render_Fit | 2 | 不裁剪画面,自适应视图 |
EVRtc_Render_Adaptive | 3 | 如果屏幕方向一致,则等同于 AgoraRtc_Render_Hidden;屏幕方向不一致,则等同于 AgoraRtc_Render_Fit |
远端视频流清晰度枚举 EVRtcVideoStreamType
名称 | 数值 | 含义 |
---|---|---|
EVRtc_VideoStream_High | 0 | 高清晰度,默认 |
EVRtc_VideoStream_Low | 1 | 低清晰度 |
回调中的错误码枚举 EVRtcResponseCode
名称 | 数值 | 含义 |
---|---|---|
EVRtcResponseCode_None | 0 | 无错误 |
EVRtcResponseCode_Server | -1004 | SDK 内部网络请求错误 |
EVRtcResponseCode_NoAppId | -2002 | 获取 App id 失败 |
EVRtcResponseCode_Core | -4000 | 核心处理模块错误 |
EVRtcResponseCode_NoRtcId | -4001 | 没有传入连麦 id |
EVRtcResponseCode_NoCanvasView | -4002 | 没有传入画布视图 |
EVRtcResponseCode_NotTheMaster | -4003 | 操作用户不是 master |
EVRtcResponseCode_NoRegions | -4004 | 没有传入 Regions 数组 |
EVRtcResponseCode_NoChannel | -4005 | 没有传入频道字符串 |
EVRtcResponseCode_MasterExit | -4006 | 主播退出了频道 |
EVRtcResponseCode_GuestExceeded | -4007 | 连麦观众超出了6个 |