ByteRtcEngineDelegate

@protocol ByteRtcEngineDelegate <NSObject>

ByteRtcEngineDelegate 协议包含了SDK提供的回调方法,SDK通过代理向应用程序上报一些运行时事件

成员函数

返回 名称
void rtcEngine:didOccurWarning:
void rtcEngine:didOccurError:
void rtcEngineConnectionDidInterrupted:
void rtcEngineConnectionDidLost:
void rtcEngine:networkTypeChangedToType:
void rtcEngine:didJoinChannel:withUid:elapsed:
void rtcEngine:didRejoinChannel:withUid:elapsed:
void rtcEngine:didJoinedOfUid:elapsed:
void rtcEngine:didOfflineOfUid:reason:
void rtcEngine:didStreamRemoved:
void rtcEngine:didStreamAdded:
void rtcEngine:didStreamSizeChange:width:height:rotation:
void rtcEngine:firstLocalVideoFrameWithSize:elapsed:
void rtcEngine:firstRemoteVideoFrameOfUid:size:elapsed:
void rtcEngine:firstLocalScreenFrameWithSize:elapsed:
void rtcEngine:firstRemoteScreenFrameOfUid:size:elapsed:
void rtcEngine:didVideoMuted:byUid:
void rtcEngine:didVideoEnabled:byUid:
void rtcEngine:didLocalVideoEnabled:byUid:
void rtcEngine:firstRemoteVideoDecodedOfUid:size:elapsed:
void rtcEngine:firstLocalAudioFrame:
void rtcEngine:firstRemoteAudioFrameOfUid:elapsed:
void rtcEngine:didAudioMuted:byUid:
void rtcEngine:didAudioEnabled:byUid:
void rtcEngine:didLocalAudioEnabled:byUid:
void rtcEngine:reportAudioVolumeIndicationOfSpeakers:totalVolume:
void rtcEngine:reportRtcStats:
void rtcEngine:networkQuality:txQuality:rxQuality:
void rtcEngine:audioQualityOfUid:quality:delay:lost:

函数说明

rtcEngine:didOccurWarning:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didOccurWarning:(ByteRtcWarningCode)Code;

发生警告回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* 当前 RTCEngine 对象
Code ByteRtcWarningCode 警告代码,详情定义见: ByteRtcWarningCode

注意

该回调方法表示SDK运行时出现了(网络或媒体相关的)警告。通常情况下,SDK上报的警告信息App可以忽略,SDK会自动恢复。

rtcEngine:didOccurError:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didOccurError:(ByteRtcErrorCode)errorCode;

发生错误回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* 当前 RTCEngine 对象
errorCode ByteRtcErrorCode 错误代码,详情定义见: ByteRtcErrorCode

注意

表示SDK运行时出现了(网络或媒体相关的)错误。通常情况下,SDK上报的错误意味着SDK无法自动恢复,需要App干预或提示用户。

rtcEngineConnectionDidInterrupted:

- (void)rtcEngineConnectionDidInterrupted:(ByteRtcEngineKit * _Nonnull)engine;

SDK 与信令服务器连接中断回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象

注意

1.当 SDK 检测到与信令服务器的网络连接中断时回调该事件; 2.除非主动调用 leaveChannel: ,否则 SDK 会一直尝试重连。

rtcEngineConnectionDidLost:

- (void)rtcEngineConnectionDidLost:(ByteRtcEngineKit * _Nonnull)engine;

SDK 与信令服务器连接断开回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象

注意

1.当 SDK 与信令服务器的网络连接断开超过 10 秒时回调该事件; 2.除非主动调用 leaveChannel: ,否则 SDK 会一直尝试重连。

rtcEngine:networkTypeChangedToType:

- (void) rtcEngine:(ByteRtcEngineKit * _Nonnull)engine networkTypeChangedToType:(ByteRtcNetworkType)type;

SDK 当前网络连接类型改变回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
type ByteRtcNetworkType SDK 当前的网络连接类型,详见:ByteRtcNetworkType

rtcEngine:didJoinChannel:withUid:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didJoinChannel:(NSString * _Nonnull)channel withUid:(nonnull NSString*)uid elapsed:(NSInteger) elapsed;

加入房间回调。 该回调方法表示该用户成功加入了指定的房间。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
channel NSString* 房间 ID
uid NSString* 用户 ID
elapsed NSInteger 从调用 joinChannelByKey:channelName:info:uid: 方法到加入房间成功所经历的时间间隔(毫秒)

rtcEngine:didRejoinChannel:withUid:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didRejoinChannel:(NSString * _Nonnull)channel withUid:(nonnull NSString*)uid elapsed:(NSInteger) elapsed;

重新加入房间成功。 该回调方法表示该用户成功重连入指定的房间。有时候由于网络状况异常,SDK 可能会失去和服务器的连接,此时 SDK 会自动重试 连接,重连成功后会通过此回调方法通知用户。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
channel NSString* 房间 ID
uid NSString* 用户 ID
elapsed NSInteger 从连接断开到重连成功所经历的时间间隔(毫秒)

rtcEngine:didJoinedOfUid:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didJoinedOfUid:(nonnull NSString*)uid elapsed:(NSInteger)elapsed;

远端用户加入当前房间回调。 1.频道模式为通信模式。如果本端用户已经在房间中,有新的远端用户加入时,SDK 通过此回调方法通知房间中有新用户加入;如果 用户加入房间前,房间中已有其他用户,新加入的用户也会收到这些已有用户的加入房间回调。 2.频道模式为直播、游戏或云游戏模式。则只会回调用户角色为主播或观众加入房间。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
uid NSString* 新加入的远端用户 ID
elapsed NSInteger 从本端用户调用 joinChannelByKey:channelName:info:uid: 加入房间到收到该事件经历的时间(毫秒)

注意

此回调会被触发的时机如下:1.通信模式下的用户或其他模式下用户角色为主播、观众的用户调用 joinChannelByKey:channelName:info:uid: 方法加入房间。 2.通信模式下的用户或其他模式下用户角色为主播、观众的用户在断网后重连入房间。 3.直播、游戏或云游戏模式下用户角色为静默观众的用户调用 setClientRole:withKey: 方法将用户角色切换至主播或观众。

rtcEngine:didOfflineOfUid:reason:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didOfflineOfUid:(NSString* _Nonnull )uid reason:(ByteRtcUserOfflineReason)reason;

远端用户离开当前房间回调。 提示本端用户有远端用户离开了房间。用户离开房间的原因有两个,即用户主动调用 leaveChannel: 方法离开 房间和超时掉线。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
uid NSString* 离开的远端用户 ID
reason ByteRtcUserOfflineReason 用户离开的原因,详见枚举类型 ByteRtcUserOfflineReason

注意

此回调会被触发的时机如下:1.通信模式下的用户或其他模式下用户角色为主播、观众的用户调用 leaveChannel: 方法离开房间。 2.直播、游戏或云游戏模式下用户角色为主播或观众的用户调用 setClientRole:withKey: 方法将用户角色切换s至静默观众。 3.远端用户断网且一直未恢复。

rtcEngine:didStreamRemoved:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didStreamRemoved:(ByteRtcByteStream* _Nonnull )stream;

房间内远端流移除回调。 房间内的远端用户停止发布音视频流时,本端用户会收到此回调通知。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
stream ByteRtcByteStream* 流的属性,详见数据结构 ByteRtcByteStream

rtcEngine:didStreamAdded:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didStreamAdded:(ByteRtcByteStream* _Nonnull)stream;

房间内新流发布回调。 房间内的远端用户发布新的音视频流时,本端用户会收到此回调通知。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
stream ByteRtcByteStream* 流的属性,详见数据结构 ByteRtcByteStream

rtcEngine:didStreamSizeChange:width:height:rotation:

-(void)rtcEngine:(ByteRtcEngineKit *_Nonnull)engine didStreamSizeChange:(NSString* _Nonnull)uid width:(int)width height:(int)height rotation:(int)rotation;

视频size变化回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
uid NSString* 用户ID
width int 视频宽度
height int 视频高度
rotation int 视频旋转信息,详见类型ByteVideoRotation

rtcEngine:firstLocalVideoFrameWithSize:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine firstLocalVideoFrameWithSize:(CGSize)size elapsed:(NSInteger)elapsed;

本地首帧视频数据渲染事件回调。调用 joinChannelByKey:channelName:info:uid:后,渲染本地首帧视频数据前的事件。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
size CGSize 视频的宽高尺寸
elapsed NSInteger 从调用 joinChannelByKey:channelName:info:uid:到渲染本地首帧视频数据前的总耗时(ms)

rtcEngine:firstRemoteVideoFrameOfUid:size:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine firstRemoteVideoFrameOfUid:(NSString* _Nonnull )uid size:(CGSize)size elapsed:(NSInteger)elapsed;

远端首帧视频数据渲染事件回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
uid NSString* 发送当前帧的远端用户的用户ID
size CGSize 视频的宽高尺寸
elapsed NSInteger 从开始订阅远端流到开始渲染远端首帧视频数据事件的总耗时(ms)

rtcEngine:firstLocalScreenFrameWithSize:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine firstLocalScreenFrameWithSize:(CGSize)size elapsed:(NSInteger)elapsed;

本地首帧屏幕数据渲染事件回调。调用 joinChannelByKey:channelName:info:uid: 后,渲染本地首帧屏幕数据前的事件。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* RtcEngine 实例,参考: ByteRtcEngineKit
size CGSize 视频的宽高尺寸
elapsed NSInteger 从调用 joinChannelByKey:channelName:info:uid: 到渲染本地首帧屏幕数据前的总耗时 (ms)

rtcEngine:firstRemoteScreenFrameOfUid:size:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine firstRemoteScreenFrameOfUid:(NSString* _Nonnull )uid size:(CGSize)size elapsed:(NSInteger)elapsed;

远端首帧屏幕数据渲染事件回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* RtcEngine 实例,参考: ByteRtcEngineKit
uid NSString* 发送当前帧的远端用户的用户 id
size CGSize 视频的宽高尺寸
elapsed NSInteger 从开始订阅远端流到开始渲染远端首帧屏幕数据事件的总耗时 (ms)

rtcEngine:didVideoMuted:byUid:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didVideoMuted:(BOOL)muted byUid:(NSString * _Nonnull)uid;

远端用户暂停/重新发送视频回调。房间中远端用户调用muteLocalVideoStream:YES或muteLocalVideoStream:NO时,本地用户将会收到该回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
muted BOOL YES:远端用户恢复发送视频流;NO:远端用户暂停发送视频流
uid NSString* 调用muteLocalVideoStream接口的远端用户ID

rtcEngine:didVideoEnabled:byUid:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didVideoEnabled:(BOOL)enabled byUid:(NSString * _Nonnull)uid;

远端用户启用/关闭视频回调。房间中远端用户调用enableVideo/disableVideo时,本地用户将会收到该回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
enabled BOOL YES:远端用户启动了视频功能;NO:远端用户关闭了视频功能
uid NSString* 调用enableVideo接口的远端用户ID

rtcEngine:didLocalVideoEnabled:byUid:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didLocalVideoEnabled:(BOOL)enabled byUid:(NSString * _Nonnull)uid;

远端用户启用/关闭本地视频回调。房间中远端用户调用enableLocalVideo时,本地用户将会收到该回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
enabled BOOL YES:远端用户启动了本地视频;NO:远端用户关闭了本地视频
uid NSString* 调用enableLocalVideo接口的远端用户ID

rtcEngine:firstRemoteVideoDecodedOfUid:size:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine firstRemoteVideoDecodedOfUid:( NSString* _Nonnull )uid size:(CGSize)size elapsed:(NSInteger)elapsed;

远端首帧视频数据解码事件回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
uid NSString* 发送当前帧的远端用户的用户ID
size CGSize 视频的宽高尺寸
elapsed NSInteger 从开始订阅远端流到远端视频首帧解码事件的总耗时(ms)

rtcEngine:firstLocalAudioFrame:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine firstLocalAudioFrame:(NSInteger)elapsed;

当收到本地第一帧音频的时候上报该事件

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
elapsed NSInteger 从开始发布音频流到收到该事件经历的时间(毫秒单位)

rtcEngine:firstRemoteAudioFrameOfUid:elapsed:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine firstRemoteAudioFrameOfUid:(NSString * _Nonnull)uid elapsed:(NSInteger)elapsed;

当收到远端流的第一帧音频的时候上报该事件

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
uid NSString* 远端用户ID
elapsed NSInteger 从开始订阅音频流到收到该事件经历的时间(毫秒单位)

rtcEngine:didAudioMuted:byUid:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didAudioMuted:(BOOL)muted byUid:(NSString * _Nonnull)uid;

远端用户音频静音回调。 提示有远端用户已将其本地音频流静音(或取消静音),该回调由远端用户调用 muteLocalAudioStreammuteLocalAudioStream:,本地用户将会收到该回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
muted BOOL YES: 该用户已将其本地音频流静音;NO: 该用户已将其本地音频流取消了静音
uid NSString* 远端用户 ID

rtcEngine:didAudioEnabled:byUid:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didAudioEnabled:(BOOL)enabled byUid:(NSString * _Nonnull)uid;

远端用户启用/关闭音频回调。房间中远端用户调用enableAudio/disableAudio时,本地用户将会收到该回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
enabled BOOL YES:远端用户启动了音频功能;NO:远端用户关闭了音频功能
uid NSString* 调用enableAudio接口的远端用户ID

rtcEngine:didLocalAudioEnabled:byUid:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine didLocalAudioEnabled:(BOOL)enabled byUid:(NSString * _Nonnull)uid;

远端用户开启/关闭音频设备采集回调 提示有远端用户已开启/关闭音频设备采集,该回调由远端用户调用 enableLocalAudioenableLocalAudio: 方法触发

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit对象
enabled BOOL YES: 该用户开启了音频设备采集;NO: 该用户关闭了音频设备采集
uid NSString* 远端用户 ID

rtcEngine:reportAudioVolumeIndicationOfSpeakers:totalVolume:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine reportAudioVolumeIndicationOfSpeakers:(NSArray<ByteRtcAudioVolumeInfo *> * _Nonnull)speakers totalVolume:(NSInteger)totalVolume;

通话音量提示的回调。回调当前房间内每个用户的音量、总音量。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* RtcEngine 实例
speakers NSArray* 房间内用户的音量信息的数组,每个用户音量信息详见类型 ByteRtcAudioVolumeInfo,包括发送流与接收流
totalVolume NSInteger 房间内的总音量大小,只包括接收流

rtcEngine:reportRtcStats:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine reportRtcStats:(ByteRtcStats * _Nonnull)stats;

当前通话数据统计回调。该回调在通话或直播中每两秒触发一次。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* RtcEngine 实例
stats ByteRtcStats* 频道的统计数据,详见类型ByteRtcStats

rtcEngine:networkQuality:txQuality:rxQuality:

- (void)rtcEngine:(ByteRtcEngineKit *_Nonnull)engine networkQuality:(NSString*_Nonnull)uid txQuality:(ByteNetworkQuality)txQuality rxQuality:(ByteNetworkQuality)rxQuality;

通话中用户的媒体流网络上下行质量报告回调。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* ByteRtcEngineKit 对象
uid NSString* 回调的网络质量报告所属用户的用户 ID
txQuality ByteNetworkQuality uid 所属用户的媒体流上行网络质量
rxQuality ByteNetworkQuality uid 所属用户的媒体流下行网络质量

注意

1.加入房间成功后,每隔 2 秒会有一次回调,通知房间内用户与媒体服务器之间数据交互的网络质量; 2.当 uid 为本地用户 ID 时,txQuality 为该用户的上行网络质量,rxQuality 为该用户的下行网络质量; 3.当 uid 为远端用户 ID 时,目前仅支持获取该用户的上行网络质量 txQuality ,下行网络质量 rxQuality 为 ByteRtcNetworkQualityUnknown; 4.ByteNetworkQuality 的定义详见:ByteNetworkQuality。

rtcEngine:audioQualityOfUid:quality:delay:lost:

- (void)rtcEngine:(ByteRtcEngineKit * _Nonnull)engine audioQualityOfUid:(NSString* _Nonnull )uid quality:(ByteNetworkQuality)quality delay:(NSUInteger)delay lost:(NSUInteger)lost;

用户的音频质量回调。每两秒钟更新一次。

传入参数

参数名 类型 说明
engine ByteRtcEngineKit* RtcEngine 实例
uid NSString* 用户 id
quality ByteNetworkQuality 音频质量,参见 ByteNetworkQuality
delay NSUInteger 远端用户的延迟
lost NSUInteger 丢失数据包的百分比

ByteRtcEngineMediaMetadataObserver

@protocol ByteRtcEngineMediaMetadataObserver <NSObject>

metadata 观察者,可以接收媒体流中的 metadata, 或者向媒体流中添加 metadata

成员函数

返回 名称
NSData* videoFrameMediaMetaDataAtTime:
void receiveVideoFrameFromUID:withExtendedData:atTimestamp:

函数说明

videoFrameMediaMetaDataAtTime:

- (NSData *_Nullable)videoFrameMediaMetaDataAtTime:(NSTimeInterval)timestamp;

当SDK准备发送一个视频帧时,会回调该接口,向你询问是否需要在该视频帧中添加 metadata

传入参数

参数名 类型 说明
timestamp NSTimeInterval 待添加 metadata 视频帧的时间戳, 单位微秒

返回值

待发送的数据,大小不能超过1024bytes

注意

1、返回 null 代表不需要添加 metadata2、回调中不能做长时间逻辑处理,以免影响视频卡顿

receiveVideoFrameFromUID:withExtendedData:atTimestamp:

- (void)receiveVideoFrameFromUID:(NSString * _Nonnull)uid withExtendedData:(NSData* _Nullable)extendedData atTimestamp:(NSTimeInterval)timestamp;

当SDK收到的视频帧包含 medatada 时,会回调该接口

传入参数

参数名 类型 说明
uid NSString* 当前帧所属的用户ID
extendedData NSData* metadata
timestamp NSTimeInterval 包含 metadata 视频帧的时间戳,单位为微秒

注意

回调中不能做长时间逻辑处理,以免影响视频卡顿

ByteEncryptHandler

@protocol ByteEncryptHandler <NSObject>

自定义加密接口

成员函数

返回 名称
NSData* ByteEngineEncryptRawData:
NSData* ByteEngineDecryptRawData:

函数说明

ByteEngineEncryptRawData:

- (NSData * _Nonnull)ByteEngineEncryptRawData:(NSData * _Nonnull)rawData;

自定义加密的方法接口,通过继承并实现该方法,可以扩展传输过程中的加密方法, 详见 setCustomizeEncryptHandler:

传入参数

参数名 类型 说明
rawData NSData* 原始音视频桢数据

返回值

加密后的数据,可以为空,表示丢弃该桢

注意

返回的数据大小应控制在原始数据的90%~120%范围以内,不然将被丢弃

ByteEngineDecryptRawData:

- (NSData * _Nonnull)ByteEngineDecryptRawData:(NSData * _Nonnull)rawData;

自定义解密的方法接口,通过继承并实现该方法,可以扩展传输过程中的解密方法, 详见 setCustomizeEncryptHandler:

传入参数

参数名 类型 说明
rawData NSData* 原始音视频桢数据

返回值

解密后的数据,可以为空,表示丢弃该桢

注意

返回的数据大小应控制在原始数据的90%~120%范围以内,不然将被丢弃