CloudHubSDK iOS
- 概览
- CloudHubRtcEngineKit
- CloudHubRtcEngineDelegate
- CloudHubRtcChannelKit
- CloudHubRtcChannelDelegate
- CloudHubEnumerates
- CloudHubObjects
CloudHubRTCEngineDelegate
如非特别说明,delegete 的回调方法均在主线程运行
频道事件
rtcEngine:didOccurError:withMessage:
发生错误回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
didOccurError:(CloudHubErrorCode)errorCode
withMessage:(NSString * _Nonnull)message;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
errorCode | CloudHubErrorCode 错误码 |
message | 错误说明 |
详情
该回调方法表示 sdk 内部发生错误
rtcEngine:didJoinChannelwithUid:elapsed:
设置频道场景
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
didJoinChannelwithUid:(NSString * _Nonnull)uid
elapsed:(NSInteger) elapsed;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 用户 Id,如果在 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 方法中指定了 uid,它会返回指定的 ID; 如果没有,它将返回由 CloudHubRtcEngineKit 自动分配的 |
elapsed | 从调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 开始到发生此事件过去的时间(ms) |
详情
该回调方法表示该客户端成功加入了指定的频道,同 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 的 joinSuccessBlock
回调
rtcEngine:didReJoinChannelwithUid:elapsed:
重新加入频道回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
didReJoinChannelwithUid:(NSString * _Nonnull)uid
elapsed:(NSInteger) elapsed;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 用户 Id,如果在 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 方法中指定了 uid,它会返回指定的 Id; 如果没有,它将返回由 CloudHubRtcEngineKit 自动分配的 |
elapsed | 从调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 开始到发生此事件过去的时间(ms) |
详情
有时候由于网络原因,客户端可能会和服务器失去连接,SDK 会进行自动重连,自动重连成功后触发此回调方法
rtcEngine:didLeaveChannel:
离开频道回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
didLeaveChannel:(CloudHubChannelStats * _Nonnull)stats;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
stats | 统计数据,详见 CloudHubChannelStats |
详情
当用户调用 leaveChannel: 离开频道后,SDK 会触发该回调
rtcEngine:onClientRoleChangedFrom:to:
直播场景下用户角色已切换回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onClientRoleChangedFrom:(CloudHubClientRole)oldRole
to:(CloudHubClientRole)newRole;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
oldRole | CloudHubClientRole 切换前的角色 |
newRole | CloudHubClientRole 切换后的角色 |
详情
直播场景下,当本地用户在加入频道后调用 setClientRole: 切换角色时会触发此回调,即主播切换为观众时,或观众切换为主播时
rtcEngine:didJoinedOfUid:properties:isHistory:fromChannel:
远端用户(通信场景)/主播(直播场景)加入当前频道回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
didJoinedOfUid:(NSString * _Nonnull)uid
properties: (NSString * _Nullable)properties
isHistory: (BOOL)isHistory
fromChannel:(NSString* _Nonnull)srcChannel;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 加入频道的远端用户/主播 ID,如果在 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 中指定了 uid,则此处返回该 ID;否则使用 CloudHubRtcEngineKit 自动分配的 ID |
properties | 该用户的自定义属性,通过 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 和 setPropertyOfUid:tell:properties: 接口可以指定用户自定义属性 |
isHistory | 该用户是否是在本地用户之前加入频道的 |
srcChannel | 当有来⾃其他频道的跨频道媒体流转发到本频道时,本频道⽤户会收到 rtcEngine:didJoinedOfUid:properties:isHistory:fromChannel: ,此时 srcChannel 为该转发媒体流源频道的频道号,其他情况下该值为空字符串 |
详情
通信场景下,该回调提示有远端用户加入了频道,并返回新加入用户的 ID; 如果加入之前,已经有其他用户在频道中了,新加入的用户也会收到这些已有用户加入频道的回调,此时 isHistory
为 YES
直播场景下,该回调提示有主播加入了频道,并返回该主播的 ID,如果在加入之前,已经有主播在频道中了,新加入的用户也会收到已有主播加入频道的回调
该回调在如下情况下会被触发:
- 远端用户/主播调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 方法加入频道
- 远端用户加入频道后调用 setClientRole: 将用户角色改变为主播
- 远端用户/主播网络中断后重新加入频道
Note:
- 主播间能相互收到新主播加入频道的回调,并能获得该主播的 uid
- 观众也能收到新主播加入频道的回调,并能获得该主播的 uid
rtcEngine:didOfflineOfUid:reason:
远端用户(通信场景)/主播(直播场景)离开当前频道回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
didOfflineOfUid:(NSString * _Nonnull)uid
reason:(NSInteger)reason
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 离开频道的远端用户/主播 ID |
reason | 用户离开的原因 |
详情
提示有远端用户/主播离开了频道(或掉线),用户离开频道有两个原因,即正常离开和超时掉线(超过 30 秒无法与服务器正常通信)
用户离开的原因有以下值:
值 | 描述 |
---|---|
1 | 用户调用了 leaveChannel 主动离开频道 |
2 | 因过长时间收不到对方数据包,超时掉线 |
3 | 用户被踢出频道 |
4 | 因为有相同的用户 id 进入频道而离开频道 |
5 | 因为服务器主动关闭频道,踢出所有用户 |
6 | 用户角色从主播切换为观众 |
0 | 未知原因离开频道 |
8 | 跨房间通道主动关闭 |
9 | 跨房间通道连接断开 |
rtcEngine:connectionChangedToState:
网络连接状态已改变回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
connectionChangedToState:(CloudHubConnectionStateType)state;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
state | 当前的网络连接状态,详见 CloudHubConnectionStateType |
详情
该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状
rtcEngine:tokenPrivilegeWillExpire:
token即将在30秒内过期回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
tokenPrivilegeWillExpire:(NSString *_Nonnull)token;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
token | 即将服务失效的 Token |
详情
在调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 时如果指定了 Token
,由于 Token
具有一定的时效,在通话过程中如果 Token
即将失效,SDK 会提前 30 秒触发该回调,提醒应用程序更新 Token
,当收到该回调时,用户需要重新在服务端生成新的 Token
,然后调用 renewToken: 将新生成的 Token
传给 SDK
rtcEngineRequestToken:
token已经过期,需要更新
- (void)rtcEngineRequestToken:(CloudHubRtcEngineKit * _Nonnull)engine;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
详情
在调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 时如果指定了 Token
,由于 Token
具有一定的时效,在通话过程中如果 Token
已经失效,SDK 会立刻触发该回调,提醒应用程序更新 Token
,当收到该回调时,用户需要重新在服务端生成新的 Token
,然后调用 renewToken: 将新生成的 Token
传给 SDK
rtcEngine:onLocalUserPermissionChanged:permission:
本地用户发布或订阅权限发生变化
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLocalUserPermissionChanged:(CloudHubPermissionType)type
permission:(BOOL)hasPermission;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
type | CloudHubPermissionType 发生变化的权限类型,1 发布,2 订阅 |
permission | 当前是否有权限 |
详情
您可以通过后端api更改频道内任意一个用户的发布、订阅权限,当一个用户的发布、订阅权限发生变化时,已经发布的音视频码流会立刻被中断,此时本地会收到 rtcEngine:onLocalUserPermissionChanged:permission:
回调
如果失去发布权限,频道内的其他人将无法接收到此用户的音视频;如果失去订阅权限,此用户将法接收频道内其他人的音视频
Note:
- 当重新获得发布权限后,如果希望立刻发布自己的音视频,则需要在收到
rtcEngine:onLocalUserPermissionChanged:permission:
回调后,重新调用 publishStream 方法 - 当重新获得订阅权限后,则订阅自动继续,只需要响应接下来的 rtcEngine:remoteAudioStateChangedOfUid:state:reason: 和 rtcEngine:remoteVideoStateChangedOfUid:streamId:type:state:reason:streamInfo: 即可
本地媒体事件回调
rtcEngine:localAudioStateChange:error:
本地音频状态改变回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
localAudioStateChange:(CloudHubAudioLocalState)state
error:(CloudHubAudioLocalError)error;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
state | 新的本地音频状态,详见CloudHubAudioLocalState |
error | 错误码,详见CloudHubAudioLocalError |
详情
本地音频的状态发生改变时(包括本地麦克风录制状态和音频编码状态),SDK 会触发该回调报告当前的本地音频状态,在本地音频出现故障时,该回调可以帮助了解当前音频的状态以及出现故障的原因
rtcEngine:localVideoStateChangeWithState:error:
本地视频状态改变回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
localVideoStateChangeWithState:(CloudHubLocalVideoStreamState)state
error:(CloudHubLocalVideoStreamError)error;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
state | 新的本地视频状态,详见CloudHubLocalVideoStreamState |
error | 错误码,详见CloudHubLocalVideoStreamError |
详情
本地视频的状态发生改变时,SDK 会触发该回调报告当前的本地视频状态,在本地视频出现故障时,该回调可以帮助了解当前视频的状态以及出现故障的原因
rtcEngineFirstLocalAudioFrame:
已发送本地音频首帧回调
- (void)rtcEngineFirstLocalAudioFrame:(CloudHubRtcEngineKit * _Nonnull)engine;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
rtcEngine:firstLocalVideoFrameWithSize:elapsed:
已显示本地视频首帧回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
firstLocalVideoFrameWithSize:(CGSize)size
elapsed:(NSInteger)elapsed;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit实例指针 |
size | 首帧视频的宽高 |
elapsed | 从本地用户调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 到发生此事件过去的时间(ms) |
rtcEngine:onLocalVideoSizeChanged:
本地视频大小发生改变回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLocalVideoSizeChanged:(CGSize)size;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit实例指针 |
size | 视频的宽高 |
远端媒体事件
rtcEngine:remoteAudioStateChangedOfUid:state:reason:
远端音频流状态已变化回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
remoteAudioStateChangedOfUid:(NSString * _Nonnull)uid
state:(CloudHubAudioRemoteState)state
reason:(CloudHubAudioRemoteStateReason)reason;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 远端音频流的用户 uid |
state | 新的音频流状态,详见CloudHubAudioRemoteState |
reason | 发生变化的原因,详见CloudHubAudioRemoteStateReason |
详情
远端用户/主播音频状态发生改变时,SDK 会触发该回调向本地用户报告当前的远端音频流状态
rtcEngine:remoteVideoStateChangedOfUid:streamId:type:state:reason:streamInfo:
远端视频流状态已变化回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
remoteVideoStateChangedOfUid:(NSString * _Nonnull)uid
streamId:(NSString * _Nonnull)streamId
type:(CloudHubMediaType)type
state:(CloudHubVideoRemoteState)state
reason:(CloudHubVideoRemoteStateReason)reason
streamInfo:(NSString * _Nullable)streamInfo;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 远端视频流的用户 uid |
streamId | 该路视频流在频道内的唯⼀ Id,在使⽤ Plus 版接⼝调⽤订阅/播放/设置远端视频流⽅法时,都需要传⼊此 Id |
type | 视频流类型,可能是音频、视频、屏幕共享等,详见CloudHubMediaType |
state | 新的音频流状态,详见CloudHubVideoRemoteState |
reason | 发生变化的原因,详见CloudHubVideoRemoteStateReason |
streamInfo | 用户自定义数据(Json字符串格式) |
详情
远端⽤户/主播视频状态发⽣改变时,SDK 会触发该回调向本地⽤户报告当前的远端视频流状态
每个⽤户可能有多个视频流,每路视频都有其类型(type),streamId 是⼀路视频流在频道内的唯⼀标识
rtcEngine:firstRemoteAudioFrameOfUid:
已接收远端音频首帧回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
firstRemoteAudioFrameOfUid:(NSString * _Nonnull)uid;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 远端音频流的用户 uid |
rtcEngine:firstRemoteVideoFrameOfUID:streamId:type:Size:
已显示远端视频首帧回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
firstRemoteVideoFrameOfUID:(NSString * _Nonnull)uid
streamId:(NSString * _Nonnull)streamId
type:(CloudHubMediaType)type
Size:(CGSize)size;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 远端视频流的用户 uid |
streamId | 该路视频流在频道内的唯⼀ Id,在使⽤ Plus 版接⼝调⽤订阅/播放/设置远端视频流⽅法时,都需要传⼊此 Id |
type | 视频流类型,可能是音频、视频、屏幕共享等,详见CloudHubMediaType |
size | 首帧视频的宽高 |
详情
本地收到远端第一个视频帧并解码成功后,会触发该回调,有两种情况:
- 远端用户首次上线后发送视频
- 远端用户视频离线再上线发送视频,视频离线指本地在 15 秒内没有收到视频包,可能有如下原因:
- 远端用户离开频道
- 远端用户掉线
- 远端用户停止发送视频流(调用了 调用了 muteLocalVideoStream: )
- 远端用户关闭视频(调用了 enableLocalVideo:
NO
)
rtcEngine:remoteVideoSizeChangedOfUID:streamId:type:size:
远端视频流宽高已变化回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
remoteVideoSizeChangedOfUID:(NSString * _Nonnull)uid
streamId:(NSString * _Nonnull)streamId
type:(CloudHubMediaType)type
size:(CGSize)size;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 远端视频流的用户 uid |
streamId | 该路视频流在频道内的唯⼀ Id,在使⽤ Plus 版接⼝调⽤订阅/播放/设置远端视频流⽅法时,都需要传⼊此 Id |
type | 视频流类型,可能是音频、视频、屏幕共享等,详见CloudHubMediaType |
size | 首帧视频的宽高 |
数据统计事件
rtcEngine:remoteAudioStats:
通话中远端音频流的统计信息回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
remoteAudioStats:(CloudHubRtcRemoteAudioStats * _Nonnull)stats;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
stats | 远端音频统计数据,详见 CloudHubRtcRemoteAudioStats |
详情
该回调描述远端用户在通话中端到端的音频流统计信息,针对每个远端用户/主播每 2 秒触发一次
如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次
rtcEngine:onRtcStats:
通话中的整体统计信息回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onRtcStats:(CloudHubChannelStats * _Nonnull)stats;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
stats | 统计数据,详见 CloudHubChannelStats |
详情
该回调描述用户在通话中所有媒体流综合统计信息,每 2 秒触发一次
rtcEngine:onNetworkQuality:
网络上下行质量报告
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onNetworkQuality:(NSString * _Nonnull)uid
txQuality:(CloudHubNetworkQuality)txQuality
rxQuality:(CloudHubNetworkQuality)rxQuality;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 用户 uid |
txQuality | 发送质量报告,⻅ CloudHubNetworkQuality |
rxQuality | 接收质量报告,⻅ CloudHubNetworkQuality |
详情
该回调描述用户在通话中发送媒体流和接收远端媒体流的统计信息。外发媒体流和每个远端用户媒体流会分开回调
rtcEngine:localAudioStats:
本地音频流统计信息回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
localAudioStats:(CloudHubRtcLocalAudioStats * _Nonnull)stats;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
stats | 本地音频统计数据,详见 CloudHubRtcLocalAudioStats |
详情
该回调描述本地设备发送音频流的统计信息,SDK 每 2 秒触发该回调一次
rtcEngine:localVideoStats:
本地视频流统计信息回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
localVideoStats:(CloudHubRtcLocalVideoStats * _Nonnull)stats;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
stats | 本地视频统计数据,详见 CloudHubRtcLocalVideoStats |
详情
该回调描述本地设备发送视频流的统计信息,SDK 每 2 秒触发该回调一次
rtcEngine:remoteVideoStats:
通话中远端视频流的统计信息回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
remoteVideoStats:(CloudHubRtcRemoteVideoStats * _Nonnull)stats;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
stats | 远端视频统计数据,详见 CloudHubRtcRemoteVideoStats |
详情
该回调描述远端用户在通话中端到端的视频流统计信息,针对每个远端用户/主播每 2 秒触发一次
如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次
音乐文件播放事件
rtcEngine:onLocalMovieStateChanged:state:errorCode:
本地用户的音乐文件播放状态改变回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLocalMovieStateChanged:(NSString * _Nonnull)filepath
state:(CloudHubMovieStateCode)state
errorCode:(CloudHubMovieErrorCode)errorCode;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
filepath | 调用 startPlayingMovie:cycle:view:paused: 时,传入的文件路径 |
state | 播放状态,详见CloudHubMovieStateCode |
errorCode | 错误码,详见CloudHubMovieErrorCode |
rtcEngine:onLocalMovieProgress:pos:total:
本地用户的音乐文件播放进度回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLocalMovieProgress:(NSString * _Nonnull)filepath
pos:(NSUInteger)pos
total:(NSUInteger)total;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
filepath | 调用 startPlayingMovie:cycle:view:paused: 时,传入的文件路径 |
pos | 播放进度(毫秒) |
total | 文件总时长(毫秒) |
rtcEngine:firstLocalMovieVideoFrame:size:
本地视频播放第一帧的时候触发的回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
firstLocalMovieVideoFrame:(NSString * _Nonnull)filepath
size:(CGSize)size;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
filepath | 调用 startPlayingMovie:cycle:view:paused: 时,传入的文件路径 |
size | 首帧视频的宽高 |
⾳效文件播放事件回调
rtcEngine:onAudioEffectFinish:
本地⽤户的⾳效⽂件播放状态改变回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onAudioEffectFinish:(int)soundId;;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
soundId | 在 playEffect:filePath:loopCount: pitch:pan:gain:publish:startTimeMS:endTimeMS: 时传⼊的⾳效 ID |
跨频道媒体流转发事件回调
rtcEngine:onChannel:MediaRelayStateChanged:error:
跨频道媒体流转发状态已变化回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onChannel:(NSString* _Nonnull)channelID
MediaRelayStateChanged:(CloudHubMediaRelayState)state
error:(CloudHubMediaRelayError)error;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
channelID | ⽬标频道号,在启动/更新跨房间媒体流转发时指定 |
state | 当前状态:详⻅ CloudHubMediaRelayStateCloudHub_RELAY_STATE_IDLE(0) :SDK 正在初始化CloudHub_RELAY_STATE_CONNE CTING(1) :SDK 尝试跨频道CloudHub_RELAY_STATE_RUNNING(2) :源频道主播成功加⼊⽬标频道CloudHub_RELAY_STATE_FAILURE(3) :发⽣异常,详⻅ code 中提示的错误信息 |
error | 跨频道媒体流转发出错的错误码:详⻅ CloudHubMediaRelayErrorCloudHub_RELAY_OK(0) :⼀切正常RELAY_ERROR_SERVER_ERROR_R ESPONSE(1) :服务器回应出错CloudHub_RELAY_ERROR_SERVER _ERROR_RESPONSE(2) :服务器⽆回应CloudHub_RELAY_ERROR_NO_RES OURCE_AVAILABLE(3) :SDK ⽆法获取服务,可能是因为服务器资源有限导致CloudHub_RELAY_ERROR_FAILED_ JOIN_SRC(4) :发起跨频道转发媒体流请求失败CloudHub_RELAY_ERROR_FAILED_ JOIN_DEST(5) :接受跨频道转发媒体流请求失败CloudHub_RELAY_ERROR_FAILED_ PACKET_RECEIVED_FROM_SRC(6) :服务器接收跨频道转发媒体流失败CloudHub_RELAY_ERROR_FAILED_ PACKET_SENT_TO_DEST(7) :服务器发送跨频道转发媒体流失败CloudHub_RELAY_ERROR_SERVER _CONNECTION_LOST(8) :SDK 因⽹络质量不佳与服务器断开,你可以调⽤ leaveChannel: ⽅法离开当前频道 |
Note:
当跨频道媒体流转发状态发⽣改变时,SDK 会触发该回调,并 报告当前的转发状态以及相关的错误信息
音量提示事件回调
rtcEngine:reportAudioVolumeIndication:totalVolume:
说话者音量提示回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
reportAudioVolumeIndication:(NSArray * _Nonnull)speakers
totalVolume:(NSInteger)totalVolume;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
speakers | CloudHubAudioVolumeInfo 数组 •在本地用户的回调中,此数组中包含以下成员: • uid ,本地用户的 uid;• volume 等于 totalVolume,表示本地用户混音后的音量;• vad ,表示本地用户人声状态;• channelId ,表示当前说话者在哪个频道在远端用户的回调中,此数组中包含以下成员: • uid ,表示每位说话者各自的用户 ID;• volume ,表示说话者各自混音后的音量;• vad = 0,表示对远端用户无效;• channelId ,表示当前说话者在哪个频道,如果报告的 speakers 数组为空,则表示此时远端没有人说话 |
volume | (混音后的)总音量,取值范围为 [0,255] 在本地用户的回调中,totalVolume 为本地用户混音后的音量 在远端用户的回调中,totalVolume 为所有说话者混音后的总音量 |
详情
该回调报告频道内瞬时音量最高的几个用户(最多 3 个)的用户 ID、他们的音量及本地用户是否在说话
该回调默认禁用,可以通过 enableAudioVolumeIndication:smooth:reportVAD: 方法开启;开启后,无论频道内是否有人说话,SDK 都会按 enableAudioVolumeIndication:smooth:reportVAD: 方法中设置的时间间隔触发该回调,每次触发,用户会收到两个独立的该回调,其中一个包含本地用户的音量信息,另一个包含远端所有用户的音量信息,详见上方参数描述
rtcEngine:onActiveSpeaker:
监测到远端最活跃用户回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onActiveSpeaker:(NSString * _Nonnull)uid;
参数 | 描述 |
---|---|
uid | 远端最活跃用户的 ID |
详情
成功调用 enableAudioVolumeIndication:smooth:reportVAD:后,SDK 会持续监测音量 最大的远端用户,并统计该用户被判断为音量最大者的次数。当前时间段内,该次数累积最多的远端用户为最活跃的用户。
当频道内用户数量大于或等于 2 且有活跃用户时,SDK 会触发该回调并报告最活跃用户的 uid。
- 如果最活跃用户一直是同一位用户,则 SDK 不会再次触发 onActiveSpeaker 回调。
- 如果最活跃用户有变化,则 SDK 会再次触发该回调并报告新的最活跃用户的 uid。
音视频流回退回调
rtcEngine:didLocalPublishFallbackToAudioOnly:deviceId:
本地发布流已回退为音频流或恢复为音视频流回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
didLocalPublishFallbackToAudioOnly:(BOOL)isFallbackOrRecover
deviceId:(NSString * _Nonnull)deviceId;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
isFallbackOrRecover | YES: 由于网络环境不理想,本地发布的媒体流已回退为音频流; NO: 由于网络环境改善,发布的音频流已恢复为音视频流。 |
deviceId | 设备id |
rtcEngine:didRemoteSubscribeFallbackToAudioOnly:byUid:type:streamId:
远端订阅流已回退为音频流或恢复为音视频流回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
didRemoteSubscribeFallbackToAudioOnly:(BOOL)isFallbackOrRecover
byUid:(NSString * _Nonnull)uid
type:(CloudHubMediaType)type
streamId:(NSString * _Nonnull)streamId;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
isFallbackOrRecover | YES: 由于网络环境不理想,远端订阅流已回退为音频流; NO: 由于网络环境改善,订阅的音频流已恢复为音视频流。 |
uid | 用户id |
type | 视频流类型,可能是⾳频、视频、屏幕共享等,详⻅ CloudHubMediaType |
streamId | 流 id |
通话前网络测试事件回调
rtcEngine:onLastmileQuality:
报告本地⽤户的⽹络质量
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLastmileQuality:(CloudHubNetworkQuality * _Nonnull)quality;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
quality | 当前本地⽤户的⽹络质量,详⻅ CloudHubNetworkQuality |
rtcEngine:onLastmileProbeResult:
报告通话前⽹络测试的结果
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLastmileProbeResult:(CloudHubLastmileProbeResult * _Nonnull)result;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
result | 通话前⽹络测试的结果,详⻅ CloudHubLastmileProbeResult |
原始音频数据事件回调
rtcEngine:onRecordAudioFrame:sampleRate:channels:
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onRecordAudioFrame:(NSData * _Nonnull)buffer
sampleRate:(int)sampelRate
channels:(int)channels;
设置采集数据回调的格式。
参数
参数 | 说明 |
---|---|
audioFrame | 音频裸数据。详见: AudioFrame 中 buffer 数据有效,数据会被发送;false:audioFrame中 buffer 数据无效,数据会被舍弃 |
data | 接收到的数据 |
rtcEngine:onPlaybackAudioFrame:sampleRate:channels:
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onPlaybackAudioFrame:(NSData * _Nonnull)buffer
sampleRate:(int)sampelRate
channels:(int)channels;
设置播放数据回调的格式
参数
参数 | 说明 |
---|---|
audioFrame | 音频裸数据。详见: AudioFrame 中 buffer 数据有效,数据会被发送;false:audioFrame中 buffer 数据无效,数据会被舍弃 |
data | 接收到的数据 |
音频录制事件回调
rtcEngine:voiceClipFileReady:clip:ts:
录制声音片段回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
voiceClipFileReady:(NSString* _Nonnull)clipBaseName
clip:(NSString* _Nonnull)currentClipFileName
ts:(int64_t)clipTs;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
clipBaseName | 声音片段basename |
currentClipFileName | 声音片段完整name |
clipTs | 毫秒级时间戳 |
rtcEngine:onVoiceTranslateTextReady:text:
声音文件识别回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onVoiceTranslateTextReady:(NSString* _Nonnull)wavFileName
text:(NSString * _Nonnull)text;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
wavFileName | 声音文件 |
text | 识别的文本 |
设备管理回调
rtcEngine:didAudioRouteChanged:
音频输出设备变更通知
- (void) rtcEngine:(CloudHubRtcEngineKit *_Nonnull)engine
didAudioRouteChanged:(CloudHubAudioOutputRouting)routing;
参数 | 说明 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
routing | 详情见:CloudHubAudioOutputRouting |
流消息事件回调
rtcEngine:onStreamMessagWithUid:data:
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onStreamMessagWithUid:(NSString * _Nonnull)uid
data:(NSData * _Nonnull)data;
接收到对方数据流消息的回调。
该回调表示本地用户收到了远端用户调用 sendStreamMessage: 方法发送的流消息。
参数 | 说明 |
---|---|
uid | 用户 ID |
data | 接收到的数据 |
远端发布事件回调(仅用于关闭自动订阅模式时)
rtcEngine:onUserPublished:type:stream:
远端⽤户开始发布⾳视频回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onUserPublished:(NSString * _Nonnull)uid
type:(CloudHubMediaType)type
stream:(NSString * _Nonnull)streamId;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 发布视频流的用户id |
type | 视频流类型,可能是⾳频、视频、屏幕共享等,详⻅ CloudHubMediaType |
streamId | 该路视频流在频道内的唯⼀ Id,在使⽤ Plus 版接⼝调⽤订阅/播放/设置远端视频流⽅法时,都需要传⼊此 Id |
详情
当频道内有⽤户发布⾳视频流成功后,本地如果关闭了⾃动订阅,会收到该回调, 此时如果决定收看此⼈, 则需要调⽤ subscribe,成功后收到 rtcEngine:remoteVideoStateChangedOfUid:streamId:type:state:reason:streaminfo: 回调, 本地如果未关闭⾃动订阅,会直接收到 rtcEngine:remoteVideoStateChangedOfUid:streamId:type:state:reason:streamInfo: 回调
rtcEngine:onUserUnPublished:type:stream:
远端⽤户停⽌发布⾳视频回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onUserUnPublished:(NSString * _Nonnull)uid
type:(CloudHubMediaType)type
stream:(NSString * _Nonnull)streamId;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 发布视频流的用户 id |
type | 视频流类型,可能是⾳频、视频、屏幕共享等,详⻅CloudHubMediaType |
streamId | 该路视频流在频道内的唯⼀ Id,在使⽤ Plus 版接⼝调⽤订阅/播放/设置远端视频流⽅法时,都需要传⼊此 Id |
详情
当频道内有⽤户停⽌⾳视频流后,本地如果关闭了⾃动订阅,会收到该回调,此时⽆需主动调⽤ unSubscribe ⽅法
服务器录制事件回调
rtcEngine:onServerRecordStateChange:startTS:currTS:pauseDuration:recordDuration:
本地⽤户的⾳乐⽂件播放状态改变回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onServerRecordStateChange:(CloudHubRecordingState)state
startTS:(NSUInteger)startTS
currTS:(NSUInteger)currTS
pauseDuration:(NSUInteger)pauseDuration
recordDuration:(NSUInteger)recordDuration;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
state | 当前录制状态,0 未开始,1 录制中,2 暂停 |
startTS | 开始时间(⾃ 1970 年 1 ⽉ 1 ⽇ 0 时起经历的毫秒) |
currTS | 当前服务器时间(⾃ 1970 年 1 ⽉ 1 ⽇ 0 时起经历的毫秒) |
pauseDuration | 暂停总时⻓,毫秒 |
recordDuration | 录制总时⻓(不含暂停时间),毫秒 |
高级信令事件回调
rtcEngine:onSetPropertyOfUid:from:properties:
用户自定义属性变化回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onSetPropertyOfUid:(NSString * _Nonnull)uid
from:(NSString * _Nullable)fromuid
properties:(NSString * _Nonnull)prop;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
uid | 属性变化的用户 uid |
fromuid | 发起操作的用户 uid |
prop | 发生变化的属性,json 字符串 |
Note:
仅当本地用户在调用 setPropertyOfUid:tell:properties: 时指定的通知范围内(不指定即通知频道内所有人)时,本地用户才会收到该回调
rtcEngine:onChatMessageArrival:from:withExtraData:
聊天消息回调
- (void) rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onChatMessageArrival:(NSString * _Nonnull)message
from:(NSString * _Nullable)fromuid
withExtraData:(NSString * _Nullable)extraData;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
message | 消息文本内容 |
fromuid | 发起操作的用户 uid |
extraData | 附加数据,可能为空 |
Note:
仅当本地用户在调用 sendChatMsg:to:withExtraData: 时指定的通知范围内(不指定即通知频道内所有人)时,本地用户才会收到该回调
rtcEngine:onPubMsg:msgId:from:withData:associatedWithUser:associatedWithMsg:ts:withExtraData:isHistory:
自定义消息发布回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onPubMsg:(NSString * _Nonnull)msgName
msgId:(NSString * _Nonnull)msgId
from:(NSString * _Nullable)fromuid
withData:(NSString * _Nullable)data
associatedWithUser:(NSString * _Nullable)uid
associatedWithMsg:(NSString * _Nullable)assMsgID
ts:(NSUInteger)ts
withExtraData:(NSString * _Nullable)extraData
isHistory:(BOOL)isHistory;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
msgName | 消息名称 |
msgId | 消息 id,是一条消息在频道内的唯一标识 |
fromuid | 消息发送者的 uid |
data | 消息内容,必须是 json 字符串,可以为空 |
uid | 关联用户的 uid,一旦一条消息和一个用户关联,则该用户退出时,此条消息自动被删除 |
assMsgID | 关联消息的 id,一旦一条消息和另一条消息关联,则被关联的消息被删除时,此条消息自动被删除 |
ts | 服务器最后一次收到该消息时的时间戳 |
extraData | 保留参数 |
isHistory | 该消息是否是在本地用户进入频道前发送的 |
Note:
仅当本地用户在调用 pubMsg:msgId:to:withData:associatedWithUser:associatedWithMsg:save:extraData: 时指定的通知范围内(不指定即通知频道内所有人)时,本地用户才会收到该回调
rtcEngine:onPubMsg:msgId:from:withData:associatedWithUser:associatedWithMsg:ts:withExtraData:isHistory:seq:
自定义消息发布回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onPubMsg:(NSString * _Nonnull)msgName
msgId:(NSString * _Nonnull)msgId
from:(NSString * _Nullable)fromuid
withData:(NSString * _Nullable)data
associatedWithUser:(NSString * _Nullable)uid
associatedWithMsg:(NSString * _Nullable)assMsgID
ts:(NSUInteger)ts
withExtraData:(NSString * _Nullable)extraData
isHistory:(BOOL)isHistory
seq:(NSInteger)seq;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
msgName | 消息名称 |
msgId | 消息 id,是一条消息在频道内的唯一标识 |
fromuid | 消息发送者的 uid |
data | 消息内容,必须是 json 字符串可以为空 |
uid | 关联用户的 uid,一旦一条消息和一个用户关联,则该用户退出时,此条消息自动被删除 |
assMsgID | 关联消息的 id,一旦一条消息和另一条消息关联,则被关联的消息被删除时,此条消息自动被删除 |
ts | 服务器最后一次收到该消息时的时间戳 |
extraData | 保留参数 |
isHistory | 该消息是否是在本地用户进入频道前发送的 |
seq | 服务器下发消息的顺序 |
Note:
仅当本地用户在调用 pubMsg:msgId:to:withData:associatedWithUser:associatedWithMsg:save:extraData: 时指定的通知范围内(不指定即通知频道内所有人)时,本地用户才会收到该回调
rtcEngine:onDelMsg:msgId:from:withData:
自定义消息删除回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onDelMsg:(NSString * _Nonnull)msgName
msgId:(NSString * _Nonnull)msgId
from:(NSString * _Nullable)fromuid
withData:(NSString * _Nullable)data;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
msgName | 消息名称 |
msgId | 消息 id,是一条消息在频道内的唯一标识 |
fromuid | 消息发送者的 uid |
data | 保留参数 |
Note:
仅当本地用户在调用 delMsg:msgId:to: 时指定的通知范围内(不指定即通知频道内所有人)时,本地用户才会收到该回调
rtcEngine:onDelMsg:msgId:from:withData:ts:seq:
自定义消息删除回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onDelMsg:(NSString * _Nonnull)msgName
msgId:(NSString * _Nonnull)msgId
from:(NSString * _Nullable)fromuid
withData:(NSString * _Nullable)data
ts:(NSUInteger)ts
seq:(NSInteger)seq;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
msgName | 消息名称 |
msgId | 消息 id,是一条消息在频道内的唯一标识 |
fromuid | 消息发送者的 uid |
data | 保留参数 |
ts | 消息发送时间 |
seq | 服务器下发消息的顺序 |
Note:
仅当本地用户在调用 delMsg:msgId:to: 时指定的通知范围内(不指定即通知频道内所有人)时,本地用户才会收到该回调
rtcEngine:onLocalUserEvicted:
本地用户被踢出频道回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLocalUserEvicted:(NSInteger)reason;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
reason | 被踢原因,由服务器填写,或调用 evictUser:reason: 时传入,见下方详情 |
详情
当收到该条回调时,可能有两种原因:
- 有另一个用户调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 时,使用了和本地用户相同的 uid,服务器认为二者身份相同,将旧的用户踢出频道,此时
reason
为 0 - 有用户调用了 evictUser:reason: 接口将本地用户踢出频道,此时
reason
为对方调用时传入的reason
值
rtcEngine:onChannelForceClosed:reason:
频道被服务器关闭回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onChannelForceClosed:(NSString * _Nonnull)channelID
reason:(CloudHubCloseChannelReason)reason;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
channelID | 被关闭的频道号 |
reason | 频道被关闭的原因,详⻅ CloudHubCloseChannelReason |
error | 跨频道媒体流转发出错的错误码:详⻅ CloudHubMediaRelayError CloudHub_RELAY_OK(0):⼀切正常 RELAY_ERROR_SERVER_ERROR_R ESPONSE(1) :服务器回应出错CloudHub_RELAY_ERROR_SERVER _ERROR_RESPONSE(2) :服务器⽆回应CloudHub_RELAY_ERROR_NO_RES OURCE_AVAILABLE(3) :SDK ⽆法获取服务,可能是因为服务器资源有限导致CloudHub_RELAY_ERROR_FAILED_ JOIN_SRC(4) :发起跨频道转发媒体流请求失败CloudHub_RELAY_ERROR_FAILED_ JOIN_DEST(5) :接受跨频道转发媒体流请求失败CloudHub_RELAY_ERROR_FAILED_ PACKET_RECEIVED_FROM_SRC(6) :服务器接收跨频道转发媒体流失败CloudHub_RELAY_ERROR_FAILED_ PACKET_SENT_TO_DEST(7) :服务器发送跨频道转发媒体流失败CloudHub_RELAY_ERROR_SERVER _CONNECTION_LOST(8) :SDK 因⽹络质量不佳与服务器断开,你可以调⽤ leaveChannel: ⽅法离开当前频道 |
详情
当跨频道媒体流转发状态发⽣改变时,SDK 会触发该回调,并报告当前的转发状态以及相关的错误信息
rtcEngineOnHistoryDataReady:
历史信令发送完毕的回调
- (void)rtcEngineOnHistoryDataReady:(CloudHubRtcEngineKit * _Nonnull**)engine;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
详情
当服务器保存的历史信令发送完后,SDK会会触发该回调
其他回调
rtcEngine:onServerTime:
返回服务器时间的回调
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onServerTime:(NSUInteger)serverts;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
serverts | 服务器时间 |
rtcEngine:onDocAddr:serial:
返回课件服务器地址
- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onDocAddr:(NSString * _Nonnull)docaddr
serial:(NSString * _Nonnull)serial;
参数 | 描述 |
---|---|
engine | CloudHubRtcEngineKit 实例指针 |
docaddr | 课件服务器地址列表 |
serial | 频道 Id |