RTCEngineKit 是一个进程内只存在一个实例的单例对象,只承载账号级与共享硬件级能力:摄像头采集与预览、音频路由、ReplayKit 屏幕采集、美颜渲染、网络测速、即时通讯,以及频道实例的生命周期管理。
频道内的加入与离开、成员数据、码流发布与订阅、音频发送等能力由 RTCEngineChannel 承载,通过 createChannelWithDelegate: 创建。同一进程可以同时存在多个频道实例,实例之间的成员数据、码流统计与渲染互不干扰。
创建实例和事件回调
delegate
id<RTCEngineDelegate> delegate
设置进程级引擎事件回调
您可以通过 RTCEngineDelegate 获得音频路由变更、网络测速与应用性能三类进程级事件通知。频道内的事件请实现 RTCEngineChannelDelegate。
imDelegate
id<RTCEngineIMDelegate> imDelegate
设置即时通讯事件回调,详情请参考 RTCEngineIMDelegate。
sharedEngine()
+ (RTCEngineKit *)sharedEngine
创建 RTCEngineKit 实例(单例模式)。
sharedEngineWithConfig:appGroup:delegate:()
+ (instancetype)sharedEngineWithConfig:(RTCEngineConfig *)engineConfig appGroup:(NSString *)appGroup delegate:(nullable id <RTCEngineDelegate>)delegate
创建 RTCEngineKit 实例并同时完成初始化(单例模式)。
该接口等价于先调用 sharedEngine() 再调用 initializeWithConfig:appGroup:delegate:(),适合在业务层希望一步完成创建与初始化的场景。
参数
initializeWithConfig:appGroup:delegate:()
- (RTCEngineError)initializeWithConfig:(RTCEngineConfig *)engineConfig appGroup:(NSString *)appGroup delegate:(nullable id <RTCEngineDelegate>)delegate
初始化 RTCEngineKit 服务
RTC 的所有用户都需要初始化 RTCEngineKit 服务之后才可以使用相关的接口,包括创建频道实例、加入频道等。
参数
destroy()
- (void)destroy
销毁 RTCEngineKit 实例(单例模式)。
内部会先销毁全部存活的频道实例,等待其离开完成后再释放进程级资源,业务层无需逐个调用频道实例的 destroy。
version()
- (NSString *)version
获取 RTCEngineKit 版本号。
decrypt:()
+ (nullable NSString *)decrypt:(nullable NSString *)value
解密字符串
参数
频道实例相关接口函数
createChannelWithDelegate:()
- (nullable RTCEngineChannel *)createChannelWithDelegate:(nullable id<RTCEngineChannelDelegate>)delegate
创建频道实例
每次调用返回一个独立的 RTCEngineChannel 实例,可以多次调用以同时加入多个频道。频道实例由引擎持有,业务侧使用完毕后需调用其 destroy 归还,否则实例不会被释放。
引擎正在销毁时返回 nil。
参数
getChannels()
- (NSArray<RTCEngineChannel *> *)getChannels
获取活跃频道列表
返回当前已经加入频道的实例列表。已创建但尚未加入、或者已经离开的实例不会出现在结果中。
即时通讯相关接口函数
enableImWithToken:delegate:()
- (RTCEngineError)enableImWithToken:(NSString *)token delegate:(nullable id<RTCEngineIMDelegate>)delegate
启用即时通讯
RTC 的所有用户如需使用即时通讯业务,首先调后台接口获取启用即时通讯的鉴权令牌,然后调用该接口开启 SDK 即时通讯服务,方便开发者利用该服务实现,如会前呼叫、通知等业务功能。
即时通讯属于账号级能力,与加入了几个频道无关。
参数
disableIm()
- (void)disableIm
停用即时通讯
当您不再需要即时通讯服务时,可通过该接口进行停用。
视频相关接口函数
摄像头在 iOS 上是单路共享硬件,采集与预览属进程级能力,全部频道实例共用同一路采集数据。是否把该路数据推送到某个频道,由该频道实例的
publishLocalVideo: 单独控制。startLocalPreview:view:()
- (RTCEngineError)startLocalPreview:(BOOL)frontCamera view:(VIEW_CLASS *)view
开启本地摄像头的预览画面
在加入频道之前调用此函数,SDK 只会开启摄像头,并一直等到频道实例加入频道之后才开始推流。在加入频道之后调用此函数,SDK 会开启摄像头并自动开始视频推流。
自2.5.7起,如果frontCamera指定的摄像头无法创建输入或启动后未输出有效视频帧,SDK 会自动尝试另一可用摄像头。业务层无需通过额外调用switchCamera恢复预览;实际采集方向可通过currentCameraDirection获取。
参数
updateLocalView:()
- (RTCEngineError)updateLocalView:(VIEW_CLASS *)view
更新本地摄像头的预览画面
stopLocalPreview()
- (RTCEngineError)stopLocalPreview
停止摄像头预览
switchCamera()
- (RTCEngineError)switchCamera
切换摄像头
SDK 仅在目标摄像头能够创建输入时执行切换。目标摄像头不可用时保持当前实际采集设备,不会切换到无效输入。
setLocalPreviewMirror:()
- (RTCEngineError)setLocalPreviewMirror:(BOOL)mirror
设置前置摄像头本地预览镜像偏好
仅作用于本地预览画面,不影响推流数据。前置摄像头按 mirror 取值设置镜像,后置摄像头始终不镜像;切换摄像头后 SDK 会自动应用对应策略。
参数
currentCameraDirection()
- (RTCEngineCameraDirection)currentCameraDirection
获取当前摄像头方向
可通过该接口获取当前实际采集使用的摄像头方向。请求的摄像头不可用并发生自动回退时,该接口返回回退后设备的方向。返回值参考 RTCEngineCameraDirection。
setCameraZoomRatio:()
- (RTCEngineError)setCameraZoomRatio:(CGFloat)zoomRatio
设置摄像头的缩放倍数
参数
setCameraFocusPosition:()
- (RTCEngineError)setCameraFocusPosition:(CGPoint)position
设置摄像头的对焦位置
参数
setCameraExposureRatio:()
- (RTCEngineError)setCameraExposureRatio:(CGFloat)exposureRatio
设置摄像头的曝光系数
参数
enableCameraTorch:()
- (RTCEngineError)enableCameraTorch:(BOOL)enabled
设置闪光灯状态
参数
音频路由相关接口函数
音频路由对应进程内唯一的
AVAudioSession,属共享设备能力,切换结果对全部频道实例同时生效。switchAudioRoute:()
- (RTCEngineError)switchAudioRoute:(RTCAudioRoute)audioRoute
切换音频路由
可通过该接口显式请求切换扬声器、听筒、蓝牙耳机或有线耳机。显式选择扬声器或听筒后,SDK 会优先保留该选择;未显式选择内置路由时,自2.5.8起,音频会话重配后 SDK 会主动恢复可用外设,同时存在蓝牙和有线耳机时优先使用蓝牙耳机。
接口返回成功表示系统调用已受理,最终实际路由以 currentAudioRoute 和 onAudioRouteChange:previousRoute: 回调为准。
参数
currentAudioRoute()
- (RTCAudioRoute)currentAudioRoute
获取系统当前实际音频路由
可通过该接口获取系统当前实际使用的音频播放设备,如扬声器、听筒、蓝牙或有线耳机。
headphoneDeviceAvailable()
- (BOOL)headphoneDeviceAvailable
判断是否存在有线耳机设备
bluetoothDeviceAvailable()
- (BOOL)bluetoothDeviceAvailable
判断是否存在蓝牙耳机设备
共享屏幕相关接口函数
ReplayKit 采集运行在独立的 Broadcast Upload Extension 进程,属进程级共享能力,采集数据按订阅关系分发给各个频道实例。单个频道是否推送共享流,由该频道实例的
publishScreenRecord: 控制。broadcastStartedWithAppGroup:delegate:()
- (void)broadcastStartedWithAppGroup:(NSString *)appGroup delegate:(id<RTCScreenDelegate>)delegate
扩展程序开启屏幕共享,并绑定代理回调
此方法在扩展程序SampleHandler中使用,详情请参考屏幕录制。
参数
sendSampleBuffer:withType:()
- (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType
扩展程序发送共享屏幕帧数据
此方法在扩展程序SampleHandler中使用。当前支持 RPSampleBufferTypeVideo 与 RPSampleBufferTypeAudioApp 类型的数据帧,RPSampleBufferTypeAudioMic 不支持,麦克风采集数据请在宿主 App 中处理。
参数
stopScreenRecord()
- (void)stopScreenRecord
宿主程序关闭屏幕共享
此方法在宿主程序中使用,会断开扩展端连接以结束本次系统录屏,并停止进程内全部频道实例的共享推流。采集服务在会中保持监听,用户仍可再次通过系统面板拉起屏幕录制。仅需停止单个频道推流时,请调用该频道实例的 publishScreenRecord: 并传入 NO。
网络测速相关接口函数
startSpeedTest:()
- (RTCEngineError)startSpeedTest:(RTCSpeedTestParams *)params
开始进行网速测试(加入频道前使用)
参数
注意
- 请在进入频道前进行网速测试,在频道中网速测试会影响正常的音视频传输效果,而且由于干扰过多,网速测试结果也不准确。
- 同一时间只允许一项网速测试任务运行。
stopSpeedTest()
- (void)stopSpeedTest
停止网络测速
视频渲染接口函数
视频渲染与美颜作用于共享摄像头采集链路,设置对全部频道实例同时生效。
installRenderModule:authDataSize:logLevel:()
- (RTCEngineError)installRenderModule:(char *)authData authDataSize:(int)authDataSize logLevel:(RTCEngineLogLevel)logLevel
装载视频渲染组件
RTC 所有用户在使用 SDK 提供的美颜、滤镜等视频处理功能时,首先需要调用此函数加载视频渲染资源以及初始化视频渲染实例。
参数
uninstallRenderModule()
- (void)uninstallRenderModule
卸载视频渲染组件
视频渲染组件不再使用时,需要调用此方法释放视频渲染资源。
enabledBeauty:()
- (RTCEngineError)enabledBeauty:(BOOL)enabled
美颜功能开关
调用installRenderModule:authDataSize:logLevel:()方法加载视频渲染组件之后,可以通过该方法设置视频美颜功能的开关。
参数
setBlurLevel:()
- (void)setBlurLevel:(float)blurLevel
设置磨皮等级
参数
getBlurLevel()
- (float)getBlurLevel
获取当前磨皮等级
setWhiteLevel:()
- (void)setWhiteLevel:(float)whiteLevel
设置美白等级
参数
getWhiteLevel()
- (float)getWhiteLevel
获取当前美白等级
setRedLevel:()
- (void)setRedLevel:(float)redLevel
设置红润等级
参数
getRedLevel()
- (float)getRedLevel
获取当前红润等级
setSharpenLevel:()
- (void)setSharpenLevel:(float)sharpenLevel
设置锐化等级
参数
getSharpenLevel()
- (float)getSharpenLevel
获取当前锐化等级
setFilterLevel:()
- (void)setFilterLevel:(float)filterLevel
设置滤镜等级
参数
getFilterLevel()
- (float)getFilterLevel
获取当前滤镜等级
setFilterName:()
- (void)setFilterName:(NSString *)filterName
设置滤镜效果
参数
getFilterName()
- (NSString *)getFilterName
获取当前滤镜效果
虚拟背景接口函数
installVirtualBackground:()
- (RTCEngineError)installVirtualBackground:(nullable NSString *)modelPath
装载虚拟背景组件
使用背景虚化或背景替换前需要先调用此方法装载人像分割模型并创建推理会话。装载后默认不开启,由enabledVirtualBackground:()决定。
参数
返回值
uninstallVirtualBackground()
- (void)uninstallVirtualBackground
卸载虚拟背景组件
虚拟背景不再使用时,调用此方法释放推理会话与相关缓冲。引擎销毁时会自动卸载。
enabledVirtualBackground:()
- (RTCEngineError)enabledVirtualBackground:(BOOL)enabled
虚拟背景功能开关
组件未装载时调用返回RTCEngineErrorConflict。关闭后为零开销直通,不再进行推理,并清除帧间状态,下次开启从首帧重新收敛。
参数
setVirtualBackgroundBlur:()
- (void)setVirtualBackgroundBlur:(NSInteger)level
设置背景虚化
与setVirtualBackgroundImage:()互斥,后调用的生效。装载前调用也会被记住,装载完成后自动生效。
参数
setVirtualBackgroundImage:()
- (void)setVirtualBackgroundImage:(nullable UIImage *)image
设置背景替换
与setVirtualBackgroundBlur:()互斥,后调用的生效。
参数
setVirtualBackgroundInferenceInterval:()
- (void)setVirtualBackgroundInferenceInterval:(NSInteger)interval
设置分割推理间隔
低端机保帧率使用,合成仍是每帧进行。
参数
setVirtualBackgroundMaskSync:()
- (void)setVirtualBackgroundMaskSync:(BOOL)enabled
设置蒙版对齐
开启后非推理帧不重新合成,画面与蒙版永远同一时刻,可消除挥手时的错位拖影,代价是画面更新率降到蒙版率。interval为 1 时开启与否没有区别。
参数
isVirtualBackgroundEnabled()
- (BOOL)isVirtualBackgroundEnabled
获取虚拟背景开启状态