// // TUICalling.h // TUICalling // // Created by noah on 2021/8/28. // #import #import typedef NS_ENUM(NSUInteger, TUICallingType) { TUICallingTypeAudio, // 语音呼叫 TUICallingTypeVideo, // 视频呼叫 }; typedef NS_ENUM(NSUInteger, TUICallingRole) { TUICallingRoleCall, // 主叫角色 TTUICallingRoleCalled, // 被叫角色 }; typedef NS_ENUM(NSUInteger, TUICallingEvent) { TUICallingEventCallStart = 200, // 通话开始 TUICallingEventCallEnd = 201, // 通话结束 TUICallingEventCallSucceed = 300, // 接通成功 // 接通失败,详细原因见message // 1、呼叫忙线,无人接听 // 2、音视频通道建立失败(TRTC进房错误) // 3、其他原因 TUICallingEventCallFailed = 400, }; typedef void (^TUICallingCallback)(int code, NSString * _Nonnull desc); NS_ASSUME_NONNULL_BEGIN @protocol TUICallingListerner // 收到呼叫时,先通过此方法询问是否可以唤起被叫UI. // 返回为true,直接唤起UI。返回为false,内部返回忙线 // 不实现默认直接可以唤起UI - (BOOL)shouldShowOnCallView NS_SWIFT_NAME(shouldShowOnCallView()); /// 呼叫开始回调。主叫、被叫均会触发; /// 被叫触发时,会将控制器通过监听回调出来,由接入方决定显示方案。 /// @param userIDs 本次通话用户id(自己除外) /// @param type 通话类型:视频\音频 /// @param role 通话角色:主叫\被叫 /// @param viewController 提供Calling功能页面给调用方,可以让用户在此基础上自定义 - (void)callStart:(NSArray *)userIDs type:(TUICallingType)type role:(TUICallingRole)role viewController:(UIViewController * _Nullable)viewController NS_SWIFT_NAME(callStart(userIDs:type:role:viewController:)); /// 通话结束回调 /// @param userIDs 本次通话用户id(自己除外) /// @param type 通话类型:视频\音频 /// @param role 通话角色:主叫\被叫 /// @param totalTime 通话时长 - (void)callEnd:(NSArray *)userIDs type:(TUICallingType)type role:(TUICallingRole)role totalTime:(float)totalTime NS_SWIFT_NAME(callEnd(userIDs:type:role:totalTime:)); /// 通话事件回调 /// @param event 回调事件类型 /// @param type 通话类型:视频\音频 /// @param role 通话角色:主叫\被叫 /// @param message 事件 - (void)onCallEvent:(TUICallingEvent)event type:(TUICallingType)type role:(TUICallingRole)role message:(NSString *)message NS_SWIFT_NAME(onCallEvent(event:type:role:message:)); @end @interface TUICalling : NSObject + (instancetype)shareInstance; /// +----------------------------+ /// + 通话接口 + /// +----------------------------+ - (void)call:(NSArray *)userIDs type:(TUICallingType)type NS_SWIFT_NAME(call(userIDs:type:)); /// +----------------------------+ /// + 通话相关设置 + /// +----------------------------+ - (void)setCallingListener:(id)listener NS_SWIFT_NAME(setCallingListener(listener:)); /// 设置铃声,建议在30s以内,只支持本地音频文件 /// @param filePath 音频文件路径 - (void)setCallingBell:(NSString *)filePath NS_SWIFT_NAME(setCallingBell(filePath:)); /// 设置用户昵称 /// @param nickname 用户昵称 (长度不得超过500个字节) /// @param callback 结果回调 code = 0 代表成功,否则为错误码 - (void)setUserNickname:(NSString *)nickname callback:(TUICallingCallback)callback NS_SWIFT_NAME(setUserNickname(nickname:callback:)); /// 设置用户头像 /// @param avatar 用户头像, 头像必须是URL格式 (长度不得超过500个字节) /// 例如: https://liteav.sdk.qcloud.com/app/res/picture/voiceroom/avatar/user_avatar1.png /// @param callback 结果回调 code = 0 代表成功,否则为错误码 - (void)setUserAvatar:(NSString *)avatar callback:(TUICallingCallback)callback NS_SWIFT_NAME(setUserAvatar(avatar:callback:)); /// 开启静音模式(默认关) - (void)enableMuteMode:(BOOL)enable NS_SWIFT_NAME(enableMuteMode(enable:)); /// 打开悬浮窗(默认关), 注意:用户自定义路由 不支持悬浮窗 - (void)enableFloatWindow:(BOOL)enable NS_SWIFT_NAME(enableFloatWindow(enable:)); /** * 开启自定义路由(默认关) * 打开后,在onStart回调中,会收到对应的ViewController对象,可以自行决定视图展示方式 */ - (void)enableCustomViewRoute:(BOOL)enable NS_SWIFT_NAME(enableCustomViewRoute(enable:)); @end NS_ASSUME_NONNULL_END