CloudHub 文档中心
下载中心 文档中心

RTC 实时音视频


CloudHubSDK iOS

CloudHubRTCEngineDelegate

如非特别说明,delegete 的回调方法均在主线程运行

频道事件

rtcEngine:didOccurError:withMessage:

发生错误回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
    didOccurError:(CloudHubErrorCode)errorCode
      withMessage:(NSString * _Nonnull)message;
参数描述
engineCloudHubRtcEngineKit 实例指针
errorCodeCloudHubErrorCode 错误码
message错误说明

详情

该回调方法表示 sdk 内部发生错误

rtcEngine:didJoinChannelwithUid:elapsed:

设置频道场景

- (void)       rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
   didJoinChannelwithUid:(NSString * _Nonnull)uid
                 elapsed:(NSInteger) elapsed;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
stats统计数据,详见 CloudHubChannelStats

详情

当用户调用 leaveChannel: 离开频道后,SDK 会触发该回调

rtcEngine:onClientRoleChangedFrom:to:

直播场景下用户角色已切换回调

- (void)      rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onClientRoleChangedFrom:(CloudHubClientRole)oldRole
                     to:(CloudHubClientRole)newRole;
参数描述
engineCloudHubRtcEngineKit 实例指针
oldRoleCloudHubClientRole 切换前的角色
newRoleCloudHubClientRole 切换后的角色

详情

直播场景下,当本地用户在加入频道后调用 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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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; 如果加入之前,已经有其他用户在频道中了,新加入的用户也会收到这些已有用户加入频道的回调,此时 isHistoryYES

直播场景下,该回调提示有主播加入了频道,并返回该主播的 ID,如果在加入之前,已经有主播在频道中了,新加入的用户也会收到已有主播加入频道的回调

该回调在如下情况下会被触发:

Note:

rtcEngine:didOfflineOfUid:reason:

远端用户(通信场景)/主播(直播场景)离开当前频道回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
  didOfflineOfUid:(NSString * _Nonnull)uid
           reason:(NSInteger)reason
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
state当前的网络连接状态,详见 CloudHubConnectionStateType

详情

该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状

rtcEngine:tokenPrivilegeWillExpire:

token即将在30秒内过期回调

- (void)       rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
tokenPrivilegeWillExpire:(NSString *_Nonnull)token;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针

详情

在调用 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;
参数描述
engineCloudHubRtcEngineKit 实例指针
typeCloudHubPermissionType 发生变化的权限类型,1 发布,2 订阅
permission当前是否有权限

详情

您可以通过后端api更改频道内任意一个用户的发布、订阅权限,当一个用户的发布、订阅权限发生变化时,已经发布的音视频码流会立刻被中断,此时本地会收到 rtcEngine:onLocalUserPermissionChanged:permission: 回调
如果失去发布权限,频道内的其他人将无法接收到此用户的音视频;如果失去订阅权限,此用户将法接收频道内其他人的音视频

Note:

本地媒体事件回调

rtcEngine:localAudioStateChange:error:

本地音频状态改变回调

- (void)    rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
localAudioStateChange:(CloudHubAudioLocalState)state
                error:(CloudHubAudioLocalError)error;
参数描述
engineCloudHubRtcEngineKit 实例指针
state新的本地音频状态,详见CloudHubAudioLocalState
error错误码,详见CloudHubAudioLocalError

详情

本地音频的状态发生改变时(包括本地麦克风录制状态和音频编码状态),SDK 会触发该回调报告当前的本地音频状态,在本地音频出现故障时,该回调可以帮助了解当前音频的状态以及出现故障的原因

rtcEngine:localVideoStateChangeWithState:error:

本地视频状态改变回调

- (void)             rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
localVideoStateChangeWithState:(CloudHubLocalVideoStreamState)state
                         error:(CloudHubLocalVideoStreamError)error;
参数描述
engineCloudHubRtcEngineKit 实例指针
state新的本地视频状态,详见CloudHubLocalVideoStreamState
error错误码,详见CloudHubLocalVideoStreamError

详情

本地视频的状态发生改变时,SDK 会触发该回调报告当前的本地视频状态,在本地视频出现故障时,该回调可以帮助了解当前视频的状态以及出现故障的原因

rtcEngineFirstLocalAudioFrame:

已发送本地音频首帧回调

- (void)rtcEngineFirstLocalAudioFrame:(CloudHubRtcEngineKit * _Nonnull)engine;
参数描述
engineCloudHubRtcEngineKit 实例指针

rtcEngine:firstLocalVideoFrameWithSize:elapsed:

已显示本地视频首帧回调

- (void)           rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
firstLocalVideoFrameWithSize:(CGSize)size
                     elapsed:(NSInteger)elapsed;
参数描述
engineCloudHubRtcEngineKit实例指针
size首帧视频的宽高
elapsed从本地用户调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 到发生此事件过去的时间(ms)

远端媒体事件

rtcEngine:remoteAudioStateChangedOfUid:state:reason:

远端音频流状态已变化回调

- (void)           rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
remoteAudioStateChangedOfUid:(NSString * _Nonnull)uid
                       state:(CloudHubAudioRemoteState)state
                      reason:(CloudHubAudioRemoteStateReason)reason;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
uid远端视频流的用户 uid
streamId该路视频流在频道内的唯⼀ Id,在使⽤ Plus 版接⼝调⽤订阅/播放/设置远端视频流⽅法时,都需要传⼊此 Id
type视频流类型,可能是音频、视频、屏幕共享等,详见CloudHubMediaType
size首帧视频的宽高

详情

本地收到远端第一个视频帧并解码成功后,会触发该回调,有两种情况:

rtcEngine:remoteVideoSizeChangedOfUID:streamId:type:size:

远端视频流宽高已变化回调

- (void)          rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
remoteVideoSizeChangedOfUID:(NSString * _Nonnull)uid
                   streamId:(NSString * _Nonnull)streamId
                       type:(CloudHubMediaType)type
                       size:(CGSize)size;
参数描述
engineCloudHubRtcEngineKit 实例指针
uid远端视频流的用户 uid
streamId该路视频流在频道内的唯⼀ Id,在使⽤ Plus 版接⼝调⽤订阅/播放/设置远端视频流⽅法时,都需要传⼊此 Id
type视频流类型,可能是音频、视频、屏幕共享等,详见CloudHubMediaType
size首帧视频的宽高

数据统计事件

rtcEngine:remoteAudioStats:

通话中远端音频流的统计信息回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
 remoteAudioStats:(CloudHubRtcRemoteAudioStats * _Nonnull)stats;
参数描述
engineCloudHubRtcEngineKit 实例指针
stats远端音频统计数据,详见 CloudHubRtcRemoteAudioStats

详情

该回调描述远端用户在通话中端到端的音频流统计信息,针对每个远端用户/主播每 2 秒触发一次

如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次

rtcEngine:onRtcStats:

通话中的整体统计信息回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
       onRtcStats:(CloudHubChannelStats * _Nonnull)stats;
参数描述
engineCloudHubRtcEngineKit 实例指针
stats统计数据,详见 CloudHubChannelStats

详情

该回调描述用户在通话中所有媒体流综合统计信息,每 2 秒触发一次

rtcEngine:onNetworkQuality:

网络上下行质量报告

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
 onNetworkQuality:(NSString * _Nonnull)uid
        txQuality:(CloudHubNetworkQuality)txQuality
        rxQuality:(CloudHubNetworkQuality)rxQuality;
参数描述
engineCloudHubRtcEngineKit 实例指针
uid用户 uid
txQuality发送质量报告,⻅ CloudHubNetworkQuality
rxQuality接收质量报告,⻅ CloudHubNetworkQuality

详情

该回调描述用户在通话中发送媒体流和接收远端媒体流的统计信息。外发媒体流和每个远端用户媒体流会分开回调

rtcEngine:localAudioStats:

本地音频流统计信息回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
  localAudioStats:(CloudHubRtcLocalAudioStats * _Nonnull)stats;
参数描述
engineCloudHubRtcEngineKit 实例指针
stats本地音频统计数据,详见 CloudHubRtcLocalAudioStats

详情

该回调描述本地设备发送音频流的统计信息,SDK 每 2 秒触发该回调一次

rtcEngine:localVideoStats:

本地视频流统计信息回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
  localVideoStats:(CloudHubRtcLocalVideoStats * _Nonnull)stats;
参数描述
engineCloudHubRtcEngineKit 实例指针
stats本地视频统计数据,详见 CloudHubRtcLocalVideoStats

详情

该回调描述本地设备发送视频流的统计信息,SDK 每 2 秒触发该回调一次

rtcEngine:remoteVideoStats:

通话中远端视频流的统计信息回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
 remoteVideoStats:(CloudHubRtcRemoteVideoStats * _Nonnull)stats;
参数描述
engineCloudHubRtcEngineKit 实例指针
stats远端视频统计数据,详见 CloudHubRtcRemoteVideoStats

详情

该回调描述远端用户在通话中端到端的视频流统计信息,针对每个远端用户/主播每 2 秒触发一次

如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次

音乐文件播放事件

rtcEngine:onLocalMovieStateChanged:state:errorCode:

本地用户的音乐文件播放状态改变回调

- (void)       rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLocalMovieStateChanged:(NSString * _Nonnull)filepath
                   state:(CloudHubMovieStateCode)state
               errorCode:(CloudHubMovieErrorCode)errorCode;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
filepath调用 startPlayingMovie:cycle:view:paused: 时,传入的文件路径
pos播放进度(毫秒)
total文件总时长(毫秒)

rtcEngine:firstLocalMovieVideoFrame:size:

本地视频播放第一帧的时候触发的回调

- (void)        rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
firstLocalMovieVideoFrame:(NSString * _Nonnull)filepath
                     size:(CGSize)size;
参数描述
engineCloudHubRtcEngineKit 实例指针
filepath调用 startPlayingMovie:cycle:view:paused: 时,传入的文件路径
size首帧视频的宽高

⾳效文件播放事件回调

rtcEngine:onAudioEffectFinish:

本地⽤户的⾳效⽂件播放状态改变回调

- (void)  rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onAudioEffectFinish:(int)soundId;;
参数描述
engineCloudHubRtcEngineKit 实例指针
soundIdplayEffect: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;
参数描述
engineCloudHubRtcEngineKit 实例指针
channelID⽬标频道号,在启动/更新跨房间媒体流转发时指定
state当前状态:详⻅ CloudHubMediaRelayState
CloudHub_RELAY_STATE_IDLE(0):SDK 正在初始化
CloudHub_RELAY_STATE_CONNE CTING(1):SDK 尝试跨频道
CloudHub_RELAY_STATE_RUNNING(2):源频道主播成功加⼊⽬标频道
CloudHub_RELAY_STATE_FAILURE(3):发⽣异常,详⻅ code 中提示的错误信息
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: ⽅法离开当前频道

Note:
当跨频道媒体流转发状态发⽣改变时,SDK 会触发该回调,并 报告当前的转发状态以及相关的错误信息

音量提示事件回调

rtcEngine:reportAudioVolumeIndication:totalVolume:

说话者音量提示回调

- (void)          rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
reportAudioVolumeIndication:(NSArray * _Nonnull)speakers
                totalVolume:(NSInteger)totalVolume;
参数描述
engineCloudHubRtcEngineKit 实例指针
speakersCloudHubAudioVolumeInfo 数组
•在本地用户的回调中,此数组中包含以下成员:
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。

通话前网络测试事件回调

rtcEngine:onLastmileQuality:

报告本地⽤户的⽹络质量

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLastmileQuality:(CloudHubNetworkQuality * _Nonnull)quality;
参数描述
engineCloudHubRtcEngineKit 实例指针
quality当前本地⽤户的⽹络质量,详⻅ CloudHubNetworkQuality

rtcEngine:onLastmileProbeResult:

报告通话前⽹络测试的结果

- (void)    rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLastmileProbeResult:(CloudHubLastmileProbeResult * _Nonnull)result;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
clipBaseName声音片段basename
currentClipFileName声音片段完整name
clipTs毫秒级时间戳

rtcEngine:onVoiceTranslateTextReady:text:

声音文件识别回调

- (void)        rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onVoiceTranslateTextReady:(NSString* _Nonnull)wavFileName
                     text:(NSString * _Nonnull)text;
参数描述
engineCloudHubRtcEngineKit 实例指针
wavFileName声音文件
text识别的文本

流消息事件回调

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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针
msgName消息名称
msgId消息 id,是一条消息在频道内的唯一标识
fromuid消息发送者的 uid
data保留参数
ts消息发送时间
seq服务器下发消息的顺序

Note:

仅当本地用户在调用 delMsg:msgId:to: 时指定的通知范围内(不指定即通知频道内所有人)时,本地用户才会收到该回调

rtcEngine:onLocalUserEvicted:

本地用户被踢出频道回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onLocalUserEvicted:(NSInteger)reason;
参数描述
engineCloudHubRtcEngineKit 实例指针
reason被踢原因,由服务器填写,或调用 evictUser:reason: 时传入,见下方详情

详情

当收到该条回调时,可能有两种原因:

rtcEngine:onChannelForceClosed:reason:

频道被服务器关闭回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
onChannelForceClosed:(NSString * _Nonnull)channelID
           reason:(CloudHubCloseChannelReason)reason;
参数描述
engineCloudHubRtcEngineKit 实例指针
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;
参数描述
engineCloudHubRtcEngineKit 实例指针

详情

当服务器保存的历史信令发送完后,SDK会会触发该回调

其他回调

rtcEngine:onServerTime:

返回服务器时间的回调

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
     onServerTime:(NSUInteger)serverts;
参数描述
engineCloudHubRtcEngineKit 实例指针
serverts服务器时间

rtcEngine:onDocAddr:serial:

返回课件服务器地址

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
        onDocAddr:(NSString * _Nonnull)docaddr
           serial:(NSString * _Nonnull)serial;
参数描述
engineCloudHubRtcEngineKit 实例指针
docaddr课件服务器地址列表
serial频道 Id