fix:修改图标和其他

This commit is contained in:
2026-03-07 02:02:22 +07:00
parent d874620a83
commit 67495ea864
653 changed files with 78983 additions and 816 deletions

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>RongCallLib.framework/RongCallLib</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>RongCallLib.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>RongCallLib.framework/RongCallLib</string>
<key>LibraryIdentifier</key>
<string>ios-x86_64-simulator</string>
<key>LibraryPath</key>
<string>RongCallLib.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@@ -0,0 +1,536 @@
//
// RCCallClient.h
// RongCallLib
//
// Created by RongCloud on 16/2/28.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <AVFoundation/AVFoundation.h>
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import <RongRTCLib/RongRTCLib.h>
#import "RCCallClientSignalServer.h"
#import "RCCallCommonDefine.h"
#import "RCCallSession.h"
NS_ASSUME_NONNULL_BEGIN
/*!
CallLib全局通话呼入的监听器
*/
@protocol RCCallReceiveDelegate <NSObject>
@required
/*!
接收到通话呼入的回调
@param callSession 呼入的通话实体
@discussion
接收到通话呼入的回调
@remarks 代理
*/
- (void)didReceiveCall:(RCCallSession *)callSession;
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@param isVoIPPush 是否 VoIP 推送
@param pushConfig 推送配置
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(nullable NSString *)callId
inviterUserId:(nullable NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(nullable NSArray<NSString *> *)userIdList
userDict:(nullable NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
pushConfig:(nullable RCMessagePushConfig *)pushConfig;
/*!
接收到取消通话的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param pushConfig 推送配置
@param isRemoteCancel 是否为远端取消呼叫
@discussion
接收到取消通话的远程通知的回调
@remarks 代理
*/
- (void)didCancelCallRemoteNotification:(nullable NSString *)callId
inviterUserId:(nullable NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(nullable NSArray<NSString *> *)userIdList
pushConfig:(nullable RCMessagePushConfig *)pushConfig
isRemoteCancel:(BOOL)isRemoteCancel;
@optional
/*!
接收到通话漏接的回调
@param callSession 呼入的通话实体
@discussion
接收到通话漏接的回调
@remarks 代理
*/
- (void)didMissCall:(RCCallSession *)callSession;
/*!
接收到取消通话的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@discussion
接收到取消通话的远程通知的回调
@remarks 代理
*/
- (void)didCancelCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
DEPRECATED_MSG_ATTRIBUTE(
"use didCancelCallRemoteNotification:inviterUserId:mediaType:userIdList:pushConfig:isRemoteCancel: instead");
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
DEPRECATED_MSG_ATTRIBUTE(
"use didReceiveCallRemoteNotification:inviterUserId:mediaType:userIdList:userDict:isVoIPPush:pushConfig: "
"instead");
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@param isVoIPPush 是否 VoIP 推送
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
DEPRECATED_MSG_ATTRIBUTE(
"use didReceiveCallRemoteNotification:inviterUserId:mediaType:userIdList:userDict:isVoIPPush:pushConfig: "
"instead");
@end
/*!
语音识别监听器
*/
@protocol RCCallASRDelegate <NSObject>
@optional
/*!
语音识别错误通知回调
@remarks 代理
*/
- (void)didASRError:(NSInteger)code;
/*!
语音识别服务开启通知回调
@remarks 代理
*/
- (void)didReceiveStartASR;
/*!
语音识别服务停止通知回调
@remarks 代理
*/
- (void)didReceiveStopASR;
/*!
语音识别信息回调
@param asrContent 语音识别信息
@remarks 代理
*/
- (void)didReceiveASRContent:(RCRTCASRContent *)asrContent;
/*!
语音翻译内容回调
@param content 语音翻译内容
@remarks 代理
*/
- (void)didReceiveRealtimeTranslationContent:(RCRTCRealtimeTranslationContent *)content;
@end
@class RCMessagePushConfig;
/*!
融云CallLib核心类
*/
@interface RCCallClient : NSObject
/*!
自定义push消息. 应在startCall之前调用
*/
@property (nonatomic, strong, nullable) RCMessagePushConfig *invitePushConfig;
/*!
自定义push消息. 应在startCall之前调用
*/
@property (nonatomic, strong, nullable) RCMessagePushConfig *hangupPushConfig;
/*!
呼叫或通话过程中, 当收到手机号系统来电时, 是否挂断当前呼叫或通话, 默认: Yes 挂断
*/
@property (nonatomic, assign) BOOL canHangupSystemPhonecall;
/*!
在开启 IM 链接多端登录的前提下,同一 UserId 的不同端先后加入通话的处理行为 默认: RCCallJoinCallTypeKick 将先加入通话用户踢出通话
*/
@property (nonatomic, assign) RCCallJoinCallType joinCallType;
/*!
获取融云通话能力库 RCCallClient 的核心类单例
@discussion
您可以通过此方法, 获取 RCCallClient 的单例,访问对象中的属性和方法
@remarks 通话设置
@return 融云通话能力库 RCCallClient 的核心类单例
*/
+ (instancetype)sharedRCCallClient;
/*!
设置全局通话呼入的监听器
@param delegate CallLib全局通话呼入的监听器
@discussion
设置全局通话呼入的监听器
@remarks 通话设置
*/
- (void)setDelegate:(id<RCCallReceiveDelegate>)delegate;
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId, 多人呼叫时targetId为群组Id, 请不要填写主叫端UserId, 否则无法发起呼叫
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (nullable RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray<NSString *> *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
发起一个跨应用通话
@param conversationType 会话类型 (仅支持单聊)
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫注意此处ID组成形式为Appkey+UserId, 格式为appkey_userid注意下划线拼接
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (RCCallSession *)startCrossCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId, 多人呼叫时targetId为群组Id
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param observerIdList 主叫端指定需要以观察者身份加入房间的用户ID列表, 如果主叫端需要以观察者身份加入房间也需要填写主叫端UserId
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (nullable RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray<NSString *> *)userIdList
observerIdList:(NSArray<NSString *> *)observerIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
当前会话类型是否支持音频通话
@param conversationType 会话类型
@discussion
当前会话类型是否支持音频通话
@remarks 通话设置
@return 是否支持音频通话
*/
- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;
/*!
当前会话类型是否支持视频通话
@param conversationType 会话类型
@discussion
当前会话类型是否支持视频通话
@remarks 通话设置
@return 是否支持视频通话
*/
- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;
/*!
设置本地视频分辨率
@param profile 通话视频分辨率
@discussion
设置本地视频分辨率
@remarks 视频设置
*/
- (void)setVideoProfile:(RCVideoProfile)profile;
/*!
设置本地视频属性, 可用此接口设置本地视频方向
@param orientation 视频方向, 默认: AVCaptureVideoOrientationPortrait
@discussion
设置本地视频属性, 可用此接口设置本地视频方向
@remarks 视频设置
*/
- (void)setVideoOrientation:(AVCaptureVideoOrientation)orientation;
/*!
设置码率
@param rate 码率 单位 kbps
@discussion
设置码率
@remarks 视频设置
*/
- (void)setBitRate:(NSUInteger)rate;
/*!
设置外部信令服务器代理
@param signalServerDelegate 外部信令服务器代理
@discussion
默认情况下 app 使用融云消息作为信令即可, 不需要设置此代理, 此时有个限制就是所有的通话必须在某一个会话中进行, 比如群组.
如果您需要摆脱会话的限制, 请使用 server api 服务实现本代理, 然后 startCall 时 conversationType 传 0, targetId 传 nil, calllib 会调用您设置的代理来发送消息.
请务必使用一个全局代理, 确保在拨打和接听 VoIP 的时候代理对象都存活, 这样才能确保正常通话.
@remarks 通话设置
*/
- (void)setSignalServerDelegate:(id<RCCallSignalServerDelegate>)signalServerDelegate;
/*!
当前的通话会话实体
*/
@property (nonatomic, strong, readonly, nullable) RCCallSession *currentCallSession;
/*!
@remarks 上次通话的通话会话静态实体
@discussion
5.8.0版本callLib修改
currentCallSession有效生命周期由开始通话直到下次通话开始为止变为了由开始通话直到这次通话结束为止
为了弥补这个逻辑缺失新增了lastCallSession从这次通话回调结束以后生效直到下次通话结束失效
*/
@property (nonatomic, strong, readonly, nullable) RCCallSessionSnapshot *lastCallSession;
/*!
是否生成通话记录消息默认为YES
*/
@property (nonatomic, assign) BOOL enableCallSummary;
/*!
是否开启多平台模式默认为NO
*/
@property (nonatomic, assign) BOOL enableMultiPlatformMode;
/*!
设置是否使用苹果 PushKit 推送
@param enable YES 使用, NO 不使用
@discussion
是否打开苹果 PushKit 推送, 该推送可以直接激活 App, 注: iOS 13 以后 PushKit 必须结合苹果 CallKit.framework 进行使用, 否则无法正常处理 VoIP 相关推送逻辑,
如果设置为 NO 则使用普通 APNS 消息推送来处理音视频信令逻辑, 默认关闭. 打开之后 App 默认需要自行处理 VoIP 推送唤起 CallKit.framework 的逻辑.
@remarks 通话设置
*/
- (void)setApplePushKitEnable:(BOOL)enable;
/*!
设置是否使用音视频预热
@param preconnectEnabled YES 使用, NO 不使用
@discussion
默认情况下 SDK 内部会在发送通话信令或接听信令成功的时候,主动进行音视频的预热
@remarks 通话设置
*/
- (void)setPreconnectEnabled:(BOOL)preconnectEnabled;
/*!
设置语音识别监听器
@param delegate 语音识别监听器
@discussion
设置语音识别监听器
@remarks 语音识别设置
*/
- (void)setASRDelegate:(id<RCCallASRDelegate>)delegate;
/*!
设置语音识别源语言
@param languageCode 语言代码
@discussion
设置语音识别源语言
@remarks 语音识别设置
*/
- (void)setSrcLanguageCode:(NSString *)languageCode;
/*!
开启语音识别服务
@param completion 开启语音识别服务回调
@discussion
开启语音识别服务如果房间内没有人发布流则无法开启语音识别服务SDK 会在有人发布流后补偿进行开启语音识别服务
@remarks 语音识别
*/
- (void)startASR:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
停止语音识别服务
@param completion 停止语音识别服务回调
@discussion
停止语音识别服务
@remarks 语音识别设置
*/
- (void)stopASR:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
设置是否打开语音识别
@param enable YES 打开, NO 关闭
@return 返回值0 代表成功
@discussion
1. 通话接通后,可以通过此接口打开或关闭语音识别功能;
2. 默认关闭语音识别功能,开启后会在通话过程中自动识别用户语音并转换为文字。
@remarks 语音识别设置
*/
- (int)setEnableASR:(BOOL)enable;
/*!
开启语音翻译
@param destLangCode 翻译目标语言码
@discussion
1. 语音翻译依赖语音识别服务,需要在收到 RCCallASRDelegate 的 didReceiveStartASR 回调后,调用开启语音翻译
2. 开启语音翻译,会通过 RCCallASRDelegate 的 didReceiveRealtimeTranslationContent 回调返回语音翻译结果
@remarks 语音识别设置
*/
- (void)startRealtimeTranslation:(NSString *)destLangCode copmletion:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
关闭语音翻译
@discussion
关闭语音翻译
@remarks 语音识别设置
*/
- (void)stopRealtimeTranslation:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
获取 SDK 版本号
@return 版本号
@remarks 参数配置
*/
+ (NSString *)getVersion;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,69 @@
//
// RCCallClientSignalServer.h
// RongCallLib
//
// Created by RongCloud on 2017/7/25.
// Copyright © 2017年 Rong Cloud. All rights reserved.
//
#ifndef RCCallClientSignalServer_h
#define RCCallClientSignalServer_h
#import <RongCallLib/RongCallLib.h>
#import "RCCallSummaryMessage.h"
NS_ASSUME_NONNULL_BEGIN
/*!
信令服务代理
*/
@protocol RCCallSignalServerDelegate <NSObject>
/*!
获取通话参与者的唯一媒体ID, 必须保证每次电话会议的每个人的媒体ID都是全局唯一的
@param successBlock 为当前用户分配的媒体Id成功的回调
@param errorBlcok 获取媒体Id失败的回调
@discussion
获取通话参与者的唯一媒体ID, 必须保证每次电话会议的每个人的媒体ID都是全局唯一的
@remarks 代理
*/
- (void)getUniqueMediaId:(nullable void (^)(NSString *mediaId))successBlock error:(nullable void (^)(int errorCode))errorBlcok;
/*!
发送 VoIP 信令消息
@param messageContent 消息内容
@param toUserIdList 接收者的Id
@param pushContent pushContent
@param pushData pushData
@param successBlock 成功的回调
@param errorBlcok 失败的回调
@discussion
发送 VoIP 信令消息
@remarks 代理
*/
- (void)sendVoipSignalMessage:(RCMessageContent *)messageContent
toUserIdList:(NSArray<NSString *> *)toUserIdList
pushContent:(nullable NSString *)pushContent
pushData:(nullable NSString *)pushData
success:(nullable void (^)(void))successBlock
error:(nullable void (^)(int errorCode))errorBlcok;
/*!
VoIP 通话结束返回的统计信息
@param summary 通话统计
@discussion
VoIP 通话结束返回的统计信息
@remarks 代理
*/
- (void)onVoipCallSummary:(RCCallSummaryMessage *)summary;
@end
NS_ASSUME_NONNULL_END
#endif /* RCCallClientSignalServer_h */

View File

@@ -0,0 +1,454 @@
//
// RCCallCommonDefine.h
// RongCallLib
//
// Created by RongCloud on 16/2/28.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#ifndef RCCallCommonDefine_h
#define RCCallCommonDefine_h
/*!
引擎类型
*/
typedef NS_ENUM(NSInteger, RCCallEngineType) {
/*!
*/
RCCallEngineNone = 0,
/*!
声网
*/
RCCallEngineAgora = 1,
/*!
融云
*/
RCCallEngineRong = 2,
/*!
Blink
*/
RCCallEngineBlink = 3,
/*!
RTC3.0
*/
RCCallEngineRongRTC = 4
};
/*!
媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallMediaType) {
/*!
音频
*/
RCCallMediaAudio = 1,
/*!
视频
*/
RCCallMediaVideo = 2
};
/*!
媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallRoomType) {
/*!
同App通话
*/
RCCallRoomTypeNormalCall = 0,
/*!
跨App通话
*/
RCCallRoomTypeCrossCall = 7
};
/*!
通话质量
*/
typedef NS_ENUM(NSUInteger, RCCallQuality) {
/*!
未知
*/
RCCall_Quality_Unknown = 0,
/*!
Excellent
*/
RCCall_Quality_Excellent = 1,
/*!
Good
*/
RCCall_Quality_Good = 2,
/*!
Poor
*/
RCCall_Quality_Poor = 3,
/*!
Bad
*/
RCCall_Quality_Bad = 4,
/*!
VBad
*/
RCCall_Quality_VBad = 5,
/*!
Down
*/
RCCall_Quality_Down = 6
};
/**
视频显示模式
*/
typedef NS_ENUM(NSInteger, RCCallRenderModel) {
/*!
默认: 如果视频尺寸与显示视窗尺寸不一致,则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。
*/
RCCallRenderModelHidden = 1,
/*!
RenderFit: 如果视频尺寸与显示视窗尺寸不一致,在保持长宽比的前提下,将视频进行缩放后填满视窗。
*/
RCCallRenderModelFit = 2,
/*!
RenderAdaptive: 如果自己和对方都是竖屏,或者如果自己和对方都是横屏,使用
RCCallRenderModelHidden如果对方和自己一个竖屏一个横屏则使用RCCallRenderModelFit。
*/
RCCallRenderModelAdaptive = 3
};
#pragma mark - Call
/*!
错误码
*/
typedef NS_ENUM(NSInteger, RCCallErrorCode) {
/*!
成功
*/
RCCallSuccess = 0,
/*!
网络不可用
*/
RCCallNetworkUnavailable = 1,
/*!
已经处于通话中了
*/
RCCallOneCallExisted = 2,
/*!
无效操作
*/
RCCallOperationUnavailable = 3,
/*!
参数错误
*/
RCCallInvalidParam = 4,
/*!
网络不稳定
*/
RCCallNetworkUnstable = 5,
/*!
媒体服务请求失败
*/
RCCallMediaRequestFailed = 6,
/*!
媒体服务初始化失败
*/
RCCallMediaServerNotReady = 7,
/*!
媒体服务未初始化
*/
RCCallMediaServerNotInitialized = 8,
/*!
媒体服务请求超时
*/
RCCallMediaRequestTimeout = 9,
/*!
未知的媒体服务错误
*/
RCCallMediaUnkownError = 10,
/*!
已被禁止通话
*/
RCCallMediaKickedByServerError = 11,
/*!
音视频服务已关闭
*/
RCCallMediaServerClosedError = 12,
/*!
音视频发布资源失败
*/
RCCallMediaServerPublishError = 13,
/*!
音视频订阅资源失败
*/
RCCallMediaServerSubscribeError = 14,
/*!
其他端已在通话中
*/
RCCallMediaJoinRoomRefuseError = 15,
/*!
己方其他端已加入其他房间
*/
RCCallMediaOtherClientJoinedRoom = 16
};
/*!
通话结束原因
*/
typedef NS_ENUM(NSInteger, RCCallDisconnectReason) {
/*!
己方取消已发出的通话请求
*/
RCCallDisconnectReasonCancel = 1,
/*!
己方拒绝收到的通话请求
*/
RCCallDisconnectReasonReject = 2,
/*!
己方挂断
*/
RCCallDisconnectReasonHangup = 3,
/*!
己方忙碌
*/
RCCallDisconnectReasonBusyLine = 4,
/*!
己方未接听
*/
RCCallDisconnectReasonNoResponse = 5,
/*!
己方不支持当前引擎
*/
RCCallDisconnectReasonEngineUnsupported = 6,
/*!
己方网络出错
*/
RCCallDisconnectReasonNetworkError = 7,
/*!
己方获取媒体资源失败
*/
RCCallDisconnectReasonResourceError = 8,
/*!
己方发布资源失败
*/
RCCallDisconnectReasonPublishError = 9,
/*!
己方订阅资源失败
*/
RCCallDisconnectReasonSubscribeError = 10,
/*!
对方取消已发出的通话请求
*/
RCCallDisconnectReasonRemoteCancel = 11,
/*!
对方拒绝收到的通话请求
*/
RCCallDisconnectReasonRemoteReject = 12,
/*!
对方挂断
*/
RCCallDisconnectReasonRemoteHangup = 13,
/*!
对方忙碌
*/
RCCallDisconnectReasonRemoteBusyLine = 14,
/*!
对方未接听
*/
RCCallDisconnectReasonRemoteNoResponse = 15,
/*!
对方不支持当前引擎
*/
RCCallDisconnectReasonRemoteEngineUnsupported = 16,
/*!
对方网络错误
*/
RCCallDisconnectReasonRemoteNetworkError = 17,
/*!
对方获取媒体资源失败
*/
RCCallDisconnectReasonRemoteResourceError = 18,
/*!
对方发布资源失败
*/
RCCallDisconnectReasonRemotePublishError = 19,
/*!
对方订阅资源失败
*/
RCCallDisconnectReasonRemoteSubscribeError = 20,
/*!
己方其他端已加入新通话
*/
RCCallDisconnectReasonKickedByOtherCall = 21,
/*!
己方其他端已在通话中
*/
RCCallDisconnectReasonInOtherCall = 22,
/*!
己方已被禁止通话
*/
RCCallDisconnectReasonKickedByServer = 23,
/*!
己方已接听系统来电
*/
RCCallDisconnectReasonAcceptSystemCall = 24,
/*!
对方其他端已加入新通话
*/
RCCallDisconnectReasonRemoteKickedByOtherCall = 31,
/*!
对方其他端已在通话中
*/
RCCallDisconnectReasonRemoteInOtherCall = 32,
/*!
对方已被禁止通话
*/
RCCallDisconnectReasonRemoteKickedByServer = 33,
/*!
对方已接听系统来电
*/
RCCallDisconnectReasonRemoteAcceptSystemCall = 34,
/*!
己方其他端已接听
*/
RCCallDisconnectReasonAcceptByOtherClient = 101,
/*!
己方其他端已挂断
*/
RCCallDisconnectReasonHangupByOtherClient = 102,
/*!
己方被对方加入黑名单
*/
RCCallDisconnectReasonAddToBlackList = 103,
/*!
音视频服务已关闭
*/
RCCallDisconnectReasonMediaServerClosed = 104,
/*!
己方被降级为观察者
*/
RCCallDisconnectReasonDegrade = 301
};
/*!
通话视频参数
*/
typedef NS_ENUM(NSInteger, RCVideoProfile) {
/*!
176x132, 10fps, 150kbps
*/
RC_VIDEO_PROFILE_132P = 10,
/*!
256x144, 15fps, 240kbps
*/
RC_VIDEO_PROFILE_144P_1 = 11,
/*!
240x240, 15fps, 280kbps
*/
RC_VIDEO_PROFILE_240P = 20,
/*!
320x240, 15fps, 400kbps
*/
RC_VIDEO_PROFILE_240P_1 = 21,
/*!
480x360, 15fps, 650kbps
*/
RC_VIDEO_PROFILE_360P = 30,
/*!
640x360, 15fps, 800kbps
*/
RC_VIDEO_PROFILE_360P_1 = 40,
/*!
640x480, 15fps, 900kbps
*/
RC_VIDEO_PROFILE_480P = 50,
/*!
720x480, 15fps, 1000kbps
*/
RC_VIDEO_PROFILE_480P_1 = 60,
/*!
1280x720, 15fps, 2500kbps
*/
RC_VIDEO_PROFILE_720P = 70,
/*
1920*1080, 15fps, 4000kbps
*/
RC_VIDEO_PROFILE_1080P = 80,
/*!
默认的视频参数
*/
RC_VIDEO_PROFILE_DEFAULT = RC_VIDEO_PROFILE_480P
};
/*!
视频编码方式
*/
typedef NS_ENUM(NSInteger, RCVideoCodecType) {
/*!
H264
*/
RC_VIDEO_CODEC_H264
};
/*!
通话状态
*/
typedef NS_ENUM(NSInteger, RCCallStatus) {
/*!
初始状态
*/
//RCCallIdle = 0,
/*!
正在呼出
*/
RCCallDialing = 1,
/*!
正在呼入
*/
RCCallIncoming = 2,
/*!
收到一个通话呼入后,正在振铃
*/
RCCallRinging = 3,
/*!
正在通话
*/
RCCallActive = 4,
/*!
已经挂断
*/
RCCallHangup = 5
};
/*!
用户类型
*/
typedef NS_ENUM(NSInteger, RCCallUserType) {
/*!
正常用户
*/
RCCallUserNormal = 1,
/*!
观察者
*/
RCCallUserObserver = 2
};
/*!
同UserId两端同时加入通话类型
*/
typedef NS_ENUM(NSUInteger, RCCallJoinCallType) {
/*!
将先加入通话用户踢出通话
*/
RCCallJoinCallTypeKick,
/*!
拒绝当前用户加入通话
*/
RCCallJoinCallTypeRefuse,
};
#endif /* RCCallCommonDefine_h */

View File

@@ -0,0 +1,687 @@
//
// RCCallSession.h
// RongCallLib
//
// Created by RongCloud on 16/2/29.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <CoreMedia/CoreMedia.h>
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCCallCommonDefine.h"
#import "RCCallUserProfile.h"
NS_ASSUME_NONNULL_BEGIN
/*!
通话状态变化的监听器
*/
@protocol RCCallSessionDelegate <NSObject>
@optional
/*!
通话已接通
@discussion
通话已接通
@remarks 代理
*/
- (void)callDidConnect;
/*!
通话已结束
@discussion
通话已结束
@remarks 代理
*/
- (void)callDidDisconnect;
/*!
通话已结束
@param reason 挂断原因
@discussion
通话已结束
@warning
这个接口和callDidDisconnect 回调方法相同,增加返回挂断原因。
同时实现本回调通话已结束将不会再通过callDidDisconnect 处理。
@remarks 代理
*/
- (void)callDidDisconnectWithReason:(RCCallDisconnectReason)reason;
/*!
对端用户正在振铃
@param userId 正在振铃的用户ID
@discussion
对端用户正在振铃
@remarks 代理
*/
- (void)remoteUserDidRing:(NSString *)userId;
/*!
有用户被邀请加入通话
@param userId 被邀请的用户ID
@param mediaType 希望被邀请者使用的媒体类型
@discussion
有用户被邀请加入通话
@remarks 代理
*/
- (void)remoteUserDidInvite:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户加入了通话
@param userId 用户ID
@param mediaType 用户的媒体类型
@discussion
对端用户加入了通话
@remarks 代理
*/
- (void)remoteUserDidJoin:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户切换了媒体类型
@param userId 用户ID
@param mediaType 切换至的媒体类型
@discussion
对端用户切换了媒体类型
@remarks 代理
*/
- (void)remoteUserDidChangeMediaType:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户开启或关闭了麦克风的状态
@param disabled 是否关闭麦克风
@param userId 用户ID
@discussion
对端用户开启或关闭了麦克风的状态
@remarks 代理
*/
- (void)remoteUserDidDisableMicrophone:(BOOL)disabled byUser:(NSString *)userId;
/*!
对端用户开启或关闭了摄像头的状态
@param disabled 是否关闭摄像头
@param userId 用户ID
@discussion
对端用户开启或关闭了摄像头的状态
@remarks 代理
*/
- (void)remoteUserDidDisableCamera:(BOOL)disabled byUser:(NSString *)userId;
/*!
对端用户挂断
@param userId 用户ID
@param reason 挂断的原因
@discussion
对端用户挂断
@remarks 代理
*/
- (void)remoteUserDidLeft:(NSString *)userId reason:(RCCallDisconnectReason)reason;
/*!
对端用户发布自定义媒体流
@param streamId 自定义流ID
@param tag 自定义流标签
@param mediaType 媒体类型
@discussion
对端用户发布自定义媒体流
@remarks 代理
*/
- (void)remoteUserDidPublishCustomMediaStream:(NSString *)streamId
streamTag:(NSString *)tag
mediaType:(RCCallMediaType)mediaType;
/*!
对端用户取消发布自定义媒体流
@param streamId 自定义流ID
@discussion
对端用户取消发布自定义媒体流
@remarks 代理
*/
- (void)remoteUserDidCancelPublishCustomMediaStream:(NSString *)streamId;
/*!
本地发布资源上报
@param success 发布资源是否成功
@discussion
本地发布资源上报
@remarks 代理
*/
- (void)localUserDidPublishStream:(BOOL)success;
/*!
彩铃
@discussion
彩铃
@remarks 代理
*/
- (void)shouldAlertForWaitingRemoteResponse;
/*!
来电铃声
@discussion
来电铃声
@remarks 代理
*/
- (void)shouldRingForIncomingCall;
/*!
通话接通或挂断时停止播放铃声
@discussion
通话接通或挂断时停止播放铃声
@remarks 代理
*/
- (void)shouldStopAlertAndRing;
/*!
通话过程中的错误回调
@param error 错误码
@discussion
通话过程中的错误回调
@warning
这个接口回调的错误码主要是为了提供必要的log以及提示用户如果是不可恢复的错误SDK会挂断电话并回调callDidDisconnectApp可以在callDidDisconnect中统一处理通话结束的逻辑
@remarks 代理
*/
- (void)errorDidOccur:(RCCallErrorCode)error;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param txQuality 上行网络质量
@param rxQuality 下行网络质量, 接收到的所有远端用户网络质量的平均值
@discussion
当前通话网络状态的回调,该回调方法每秒触发一次
@remarks 代理
*/
- (void)networkTxQuality:(RCCallQuality)txQuality rxQuality:(RCCallQuality)rxQuality;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param txQuality 上行网络质量
@param rxQuality 下行网络质量, 接收到的某个远端用户的网络质量
@param userID 远端用户
@discussion
当前通话网络状态的回调,该回调方法每秒触发一次
@remarks 代理
*/
- (void)networkTxQuality:(RCCallQuality)txQuality rxQuality:(RCCallQuality)rxQuality remoteUserID:(nullable NSString *)userID;
/*!
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@param leavel 声音级别: 0~9, 0为无声, 依次变大
@param userID 用户ID, 本端用户ID(发送音量) 或 远端用户ID(接收音量)
@discussion
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@remarks 代理
*/
- (void)audioLevel:(NSInteger)leavel userID:(nullable NSString *)userID;
/*!
摄像头采集视频帧数据上报
@param pixelBuffer 摄像头采集视频帧数据
@discussion
当前视频通话摄像头采集视频帧数据回调,如果修改了该视频数据,会影响显示本地和发送视频帧数据
@remarks 代理
*/
- (void)processCaptureVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
发送本地视频帧数据上报
@param pixelBuffer 发送本地视频帧数据
@discussion
当前视频通话发送本地视频帧数据回调,如果修改了该视频数据,会影响发送视频帧数据
@remarks 代理
*/
- (void)processVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
显示本地视频帧数据上报
@param pixelBuffer 显示本地视频数据
@discussion
当前视频通话显示本地视频帧数据回调,如果修改了该视频数据,会影响显示本地视频帧数据
@remarks 代理
*/
- (void)processDisplayVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
当前通话为视频通话时, 收到远端用户的第一个视频帧的回调
@param userId 远端用户ID
@remarks 代理
*/
- (void)receiveRemoteUserVideoFirstKeyFrame:(nullable NSString *)userId;
/*!
当前通话为音频或视频通话时, 收到远端用户的第一个音频帧的回调
@param userId 远端用户ID
@remarks 代理
*/
- (void)receiveRemoteUserVideoFirstAudioFrame:(nullable NSString *)userId;
/*!
对端用户视频分辨率变化的回调
@param userId 用户ID
@param size 变化后的视频分辨率
@discussion
对端用户视频分辨率变化的回调
@remarks 代理
*/
- (void)remoteUserDidChangeResolution:(nullable NSString *)userId resolution:(CGSize)size;
@end
@class RCMessagePushConfig;
@protocol RCRTCDrawer;
/*!
通话实体
*/
@interface RCCallSession : NSObject
/*!
通话的会话类型
*/
@property (nonatomic, assign, readonly) RCConversationType conversationType;
/*!
通话ID
*/
@property (nonatomic, strong, readonly, nullable) NSString *callId;
/*!
通话的目标会话ID
*/
@property (nonatomic, strong, readonly, nullable) NSString *targetId;
/*!
RTC会话唯一标识, 用于 Server API
*/
@property (nonatomic, strong, readonly, nullable) NSString *sessionId;
/*!
是否是多方通话
*/
@property (nonatomic, assign, readonly, getter=isMultiCall) BOOL multiCall;
/*!
通话的扩展信息
*/
@property (nonatomic, strong, readonly, nullable) NSString *extra;
/*!
通话的当前状态
*/
@property (nonatomic, assign, readonly) RCCallStatus callStatus;
/*!
通话的最初发起人
*/
@property (nonatomic, strong, readonly, nullable) NSString *caller;
/*!
邀请当前用户加入通话的邀请者
*/
@property (nonatomic, strong, readonly, nullable) NSString *inviter;
/*!
当前的用户列表
*/
@property (nonatomic, strong, readonly, nullable) NSArray<RCCallUserProfile *> *userProfileList;
/*!
自己的状态
*/
@property (nonatomic, strong, readonly, nullable) RCCallUserProfile *myProfile;
/*!
当前用户使用的媒体类型
*/
@property (nonatomic, assign, readonly) RCCallMediaType mediaType;
/*!
通话开始的时间
@discussion 如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, assign, readonly) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, assign, readonly) long long connectedTime;
/*!
通话挂断原因
*/
@property (nonatomic, assign) RCCallDisconnectReason disconnectReason;
/*!
设置通话状态变化的监听器
@param delegate 通话状态变化的监听器
@discussion
设置通话状态变化的监听器
@warning
已废弃, 请使用 addDelegate:
@remarks 通话设置
*/
- (void)setDelegate:(id<RCCallSessionDelegate>)delegate DEPRECATED_MSG_ATTRIBUTE("please call method addDelegate:");
/*!
添加通话状态的监听器, 支持多代理
@param delegate 通话状态变化的监听器
@discussion
添加通话状态的监听器, 支持多代理
@remarks 通话设置
*/
- (void)addDelegate:(id<RCCallSessionDelegate>)delegate;
/**
删除通话状态的监听器
@param delegate 通话状态的监听器
@discussion
删除通话状态的监听器
@remarks 通话设置
*/
- (void)removeDelegate:(id<RCCallSessionDelegate>)delegate;
/*!
获取所有的监听器
@discussion
获取所有的监听器
@remarks 通话设置
@return 所有注册的代理数组
*/
- (NSArray<id<RCCallSessionDelegate>> *)allDelegates;
/*!
接听来电
@param type 接听使用的媒体类型
@discussion
接听来电
@remarks 通话管理
*/
- (void)accept:(RCCallMediaType)type;
/*!
挂断通话
@discussion
挂断通话
@remarks 通话管理
*/
- (void)hangup;
/*!
挂断通话
@param block 挂断消息发送回调
@discussion
挂断通话
@remarks 通话管理
*/
- (void)hangup:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
观察者身份用户, 发布自己的音视频资源
@param mediaType 发布的媒体类型
@param block 发布完成的回调
@discussion
观察者身份用户, 发布自己的音视频资源
@warning
只有观察者用户可以发布音视频资源
@remarks 资源管理
*/
- (void)publishMediaResource:(RCCallMediaType)mediaType complete:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
正常身份用户, 取消发布自己的音视频资源
@param block 取消发布完成的回调
@discussion
正常身份用户, 取消发布自己的音视频资源
@warning
只有正常用户可以取消发布音视频资源
@remarks 资源管理
*/
- (void)unPublishMediaResource:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param type 建议被邀请者使用的媒体类型
@discussion
邀请用户加入通话
@remarks 通话管理
*/
- (void)inviteRemoteUsers:(nullable NSArray<NSString *> *)userIdList mediaType:(RCCallMediaType)type;
/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param observerIdList 需要以观察者身份加入房间的用户ID列表
@param type 建议被邀请者使用的媒体类型
@discussion
邀请用户加入通话
@remarks 通话管理
*/
- (void)inviteRemoteUsers:(nullable NSArray<NSString *> *)userIdList
observerIdList:(nullable NSArray<NSString *> *)observerIdList
mediaType:(RCCallMediaType)type;
/*!
设置用户所在的视频View
@param userId 用户ID自己或他人
@param view 视频的View
@discussion
设置用户所在的视频View
@remarks 视频配置
*/
- (void)setVideoView:(nullable UIView *)view userId:(nullable NSString *)userId;
/*!
设置用户所在的视频View
@param userId 用户ID自己或他人
@param view 继承RCRTCDrawer 接口 视频的View
@discussion
设置用户所在的视频View
注意:
1.此接口需要RCCallClient中enableMultiPlatformMode设置为YES方可使用
2. view 的生命周期自己处理
@remarks 视频配置
*/
- (int)setMultiPlatformVideoView:(nullable id<RCRTCDrawer>)view userId:(nullable NSString *)userId;
/**
设置用户所在的视频View
@param view userId 用户ID自己或他人)
@param userId 视频的View
@param renderMode 视频显示模式 (默认为RCCallRenderModelHidden)
@discussion
设置用户所在的视频View
@remarks 视频配置
*/
- (void)setVideoView:(nullable UIView *)view userId:(nullable NSString *)userId renderMode:(RCCallRenderModel)renderMode;
/*!
更换自己使用的媒体类型
@param type 媒体类型
@discussion
更换自己使用的媒体类型
@remarks 通话管理
*/
- (BOOL)changeMediaType:(RCCallMediaType)type;
/*!
静音状态
*/
@property (nonatomic, readonly) BOOL isMuted;
/*!
设置静音状态
@param muted 是否静音, 默认值为NO
@discussion
设置静音状态
@remarks 音频配置
@return 是否设置成功
*/
- (BOOL)setMuted:(BOOL)muted;
/*!
是否有最小化窗口
*/
@property (nonatomic, readonly) BOOL minimized;
/*!
设置是否有最小化窗口状态
@param minimized 是否最小化
@discussion
设置是否有最小化窗口状态
@remarks 通话设置
*/
- (void)setMinimized:(BOOL)minimized;
/*!
扬声器状态,是否开启扬声器
@discussion 默认值为NO。
*/
@property (nonatomic, readonly) BOOL speakerEnabled;
/*!
设置扬声器状态
@param speakerEnabled 是否开启扬声器
@discussion
设置扬声器状态
@remarks 音频配置
@return 是否设置成功
*/
- (BOOL)setSpeakerEnabled:(BOOL)speakerEnabled;
/*!
摄像头状态,是否开启摄像头
*/
@property (nonatomic, readonly) BOOL cameraEnabled;
/*!
设置摄像头状态
@param cameraEnabled 是否开启摄像头
@discussion
音频通话的默认值为NO视频通话的默认值为YES。
@remarks 视频配置
@return 是否设置成功
*/
- (BOOL)setCameraEnabled:(BOOL)cameraEnabled;
/*!
切换前后摄像头
@discussion
切换前后摄像头
@remarks 视频配置
@return 是否切换成功
*/
- (BOOL)switchCameraMode;
@end
/*!
静态通话实体
从属性依赖callEngine取值的RCCallSession中copy一个不依赖callEngine的静态对象
*/
@interface RCCallSessionSnapshot : RCCallSession
/// 从其他对象拷贝
- (instancetype)initWithSession:(RCCallSession *)session;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,98 @@
//
// RCCallSummaryMessage.h
// RongCallLib
//
// Created by RongCloud on 16/3/1.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCCallCommonDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
通话摘要消息的类型名
*/
#define RCCallSummaryMessageTypeIdentifier @"RC:VCSummary"
/*!
通话摘要消息类
@discussion 通话摘要消息类,此消息会进行存储并计入未读消息数。
*/
@interface RCCallSummaryMessage : RCMessageContent
/*!
通话的最初发起人
*/
@property (nonatomic, strong) NSString *caller;
/*!
邀请当前用户加入通话的邀请者
*/
@property (nonatomic, strong) NSString *inviter;
/*!
当前用户最后使用的媒体类型
*/
@property (nonatomic, assign) RCCallMediaType mediaType;
/*!
通话挂断时包含的用户ID列表
*/
@property (nonatomic, strong) NSArray<NSString *> *memberIdList;
/*!
通话开始时间
@discussion
如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, assign) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, assign) long long connectedTime;
/*!
通话总时长
*/
@property (nonatomic, assign) long long duration;
/*!
通话结束的原因
*/
@property (nonatomic, assign) RCCallDisconnectReason hangupReason;
/*!
初始化通话摘要消息
@param caller 通话的最初发起人
@param inviter 邀请当前用户加入通话的邀请者
@param mediaType 当前用户最后使用的媒体类型
@param memberIdList 通话挂断时包含的用户ID列表
@param startTime 通话开始时间
@param connectedTime 通话接通时间
@param duration 通话总时长
@param hangupReason 通话结束的原因
@discussion
初始化通话摘要消息
@remarks 资源管理
@return 通话摘要消息的对象
*/
- (instancetype)initWithCaller:(NSString *)caller
inviter:(NSString *)inviter
mediaType:(RCCallMediaType)mediaType
memberIdList:(NSArray<NSString *> *)memberIdList
startTime:(long long)startTime
connectedTime:(long long)connectedTime
duration:(long long)duration
hangupReason:(RCCallDisconnectReason)hangupReason;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,114 @@
//
// RCCallUserProfile.h
// RongCallLib
//
// Created by RongCloud on 16/2/29.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "RCCallCommonDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
用户的通话状态
*/
@interface RCCallUserProfile : NSObject
/*!
用户ID
*/
@property (nonatomic, strong) NSString *userId;
/*!
用户的通话媒体连接ID
*/
@property (nonatomic, strong) NSString *mediaId;
/*!
用户所使用的媒体类型
*/
@property (nonatomic, assign) RCCallMediaType mediaType;
/*!
用户的通话状态
*/
@property (nonatomic, assign) RCCallStatus callStatus;
/*!
用户的摄像头是否已经关闭
*/
@property (nonatomic, assign) BOOL cameraDisabled;
/*!
用户的麦克风是否已经关闭
*/
@property (nonatomic, assign) BOOL micDisabled;
/*!
收到通话呼入的时间
@discussion 只有当前登录用户的呼入时间是准确的,其他用户的并不准确
*/
@property (nonatomic, assign) long long startTime;
/*!
通话的接通时间
*/
@property (nonatomic, assign) long long connectedTime;
/*!
通话的挂断时间
*/
@property (nonatomic, assign) long long endTime;
/*!
用户的视频View
*/
@property (nonatomic, strong, nullable) UIView *videoView;
/*!
音视频用户类型
*/
@property (nonatomic, assign) NSInteger blinkUserType DEPRECATED_MSG_ATTRIBUTE("use userType instead") __attribute__((deprecated));
/*!
音视频用户类型
*/
@property (nonatomic, assign) RCCallUserType userType;
/*!
音频主叫接通前声音输出 Yes:外放 NO:听筒
*/
@property (nonatomic, assign) BOOL isSpeakerInAudioMode;
/*!
用户标签
*/
@property (nonatomic, strong, nullable) NSString *tag;
/*!
初始化用户的通话状态
@param userId 用户ID
@param mediaId 用户的通话媒体连接ID
@param mediaType 用户所使用的媒体类型
@param callStatus 用户的通话状态
@param startTime 收到通话呼入的时间
@discussion
初始化用户的通话状态
@remarks 通话设置
@return 用户的通话状态对象
*/
- (instancetype)initWithUserId:(NSString *)userId
mediaId:(nullable NSString *)mediaId
mediaType:(RCCallMediaType)mediaType
callStatus:(RCCallStatus)callStatus
startTime:(long long)startTime;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,24 @@
//
// RongCallLib.h
// RongCallLib
//
// Created by RongCloud on 16/4/25.
// Copyright © 2016年 Rong Cloud. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for RongCallLib.
FOUNDATION_EXPORT double RongCallLibVersionNumber;
//! Project version string for RongCallLib.
FOUNDATION_EXPORT const unsigned char RongCallLibVersionString[];
// In this header, you should import all the public headers of your framework
// using statements like #import <RongCallLib/PublicHeader.h>
#import <RongCallLib/RCCallClient.h>
#import <RongCallLib/RCCallCommonDefine.h>
#import <RongCallLib/RCCallSession.h>
#import <RongCallLib/RCCallSummaryMessage.h>
#import <RongCallLib/RCCallUserProfile.h>

View File

@@ -0,0 +1,6 @@
framework module RongCallLib {
umbrella header "RongCallLib.h"
export *
module * { export * }
}

View File

@@ -0,0 +1,536 @@
//
// RCCallClient.h
// RongCallLib
//
// Created by RongCloud on 16/2/28.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <AVFoundation/AVFoundation.h>
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import <RongRTCLib/RongRTCLib.h>
#import "RCCallClientSignalServer.h"
#import "RCCallCommonDefine.h"
#import "RCCallSession.h"
NS_ASSUME_NONNULL_BEGIN
/*!
CallLib全局通话呼入的监听器
*/
@protocol RCCallReceiveDelegate <NSObject>
@required
/*!
接收到通话呼入的回调
@param callSession 呼入的通话实体
@discussion
接收到通话呼入的回调
@remarks 代理
*/
- (void)didReceiveCall:(RCCallSession *)callSession;
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@param isVoIPPush 是否 VoIP 推送
@param pushConfig 推送配置
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(nullable NSString *)callId
inviterUserId:(nullable NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(nullable NSArray<NSString *> *)userIdList
userDict:(nullable NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
pushConfig:(nullable RCMessagePushConfig *)pushConfig;
/*!
接收到取消通话的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param pushConfig 推送配置
@param isRemoteCancel 是否为远端取消呼叫
@discussion
接收到取消通话的远程通知的回调
@remarks 代理
*/
- (void)didCancelCallRemoteNotification:(nullable NSString *)callId
inviterUserId:(nullable NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(nullable NSArray<NSString *> *)userIdList
pushConfig:(nullable RCMessagePushConfig *)pushConfig
isRemoteCancel:(BOOL)isRemoteCancel;
@optional
/*!
接收到通话漏接的回调
@param callSession 呼入的通话实体
@discussion
接收到通话漏接的回调
@remarks 代理
*/
- (void)didMissCall:(RCCallSession *)callSession;
/*!
接收到取消通话的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@discussion
接收到取消通话的远程通知的回调
@remarks 代理
*/
- (void)didCancelCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
DEPRECATED_MSG_ATTRIBUTE(
"use didCancelCallRemoteNotification:inviterUserId:mediaType:userIdList:pushConfig:isRemoteCancel: instead");
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
DEPRECATED_MSG_ATTRIBUTE(
"use didReceiveCallRemoteNotification:inviterUserId:mediaType:userIdList:userDict:isVoIPPush:pushConfig: "
"instead");
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@param isVoIPPush 是否 VoIP 推送
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
DEPRECATED_MSG_ATTRIBUTE(
"use didReceiveCallRemoteNotification:inviterUserId:mediaType:userIdList:userDict:isVoIPPush:pushConfig: "
"instead");
@end
/*!
语音识别监听器
*/
@protocol RCCallASRDelegate <NSObject>
@optional
/*!
语音识别错误通知回调
@remarks 代理
*/
- (void)didASRError:(NSInteger)code;
/*!
语音识别服务开启通知回调
@remarks 代理
*/
- (void)didReceiveStartASR;
/*!
语音识别服务停止通知回调
@remarks 代理
*/
- (void)didReceiveStopASR;
/*!
语音识别信息回调
@param asrContent 语音识别信息
@remarks 代理
*/
- (void)didReceiveASRContent:(RCRTCASRContent *)asrContent;
/*!
语音翻译内容回调
@param content 语音翻译内容
@remarks 代理
*/
- (void)didReceiveRealtimeTranslationContent:(RCRTCRealtimeTranslationContent *)content;
@end
@class RCMessagePushConfig;
/*!
融云CallLib核心类
*/
@interface RCCallClient : NSObject
/*!
自定义push消息. 应在startCall之前调用
*/
@property (nonatomic, strong, nullable) RCMessagePushConfig *invitePushConfig;
/*!
自定义push消息. 应在startCall之前调用
*/
@property (nonatomic, strong, nullable) RCMessagePushConfig *hangupPushConfig;
/*!
呼叫或通话过程中, 当收到手机号系统来电时, 是否挂断当前呼叫或通话, 默认: Yes 挂断
*/
@property (nonatomic, assign) BOOL canHangupSystemPhonecall;
/*!
在开启 IM 链接多端登录的前提下,同一 UserId 的不同端先后加入通话的处理行为 默认: RCCallJoinCallTypeKick 将先加入通话用户踢出通话
*/
@property (nonatomic, assign) RCCallJoinCallType joinCallType;
/*!
获取融云通话能力库 RCCallClient 的核心类单例
@discussion
您可以通过此方法, 获取 RCCallClient 的单例,访问对象中的属性和方法
@remarks 通话设置
@return 融云通话能力库 RCCallClient 的核心类单例
*/
+ (instancetype)sharedRCCallClient;
/*!
设置全局通话呼入的监听器
@param delegate CallLib全局通话呼入的监听器
@discussion
设置全局通话呼入的监听器
@remarks 通话设置
*/
- (void)setDelegate:(id<RCCallReceiveDelegate>)delegate;
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId, 多人呼叫时targetId为群组Id, 请不要填写主叫端UserId, 否则无法发起呼叫
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (nullable RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray<NSString *> *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
发起一个跨应用通话
@param conversationType 会话类型 (仅支持单聊)
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫注意此处ID组成形式为Appkey+UserId, 格式为appkey_userid注意下划线拼接
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (RCCallSession *)startCrossCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId, 多人呼叫时targetId为群组Id
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param observerIdList 主叫端指定需要以观察者身份加入房间的用户ID列表, 如果主叫端需要以观察者身份加入房间也需要填写主叫端UserId
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (nullable RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray<NSString *> *)userIdList
observerIdList:(NSArray<NSString *> *)observerIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
当前会话类型是否支持音频通话
@param conversationType 会话类型
@discussion
当前会话类型是否支持音频通话
@remarks 通话设置
@return 是否支持音频通话
*/
- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;
/*!
当前会话类型是否支持视频通话
@param conversationType 会话类型
@discussion
当前会话类型是否支持视频通话
@remarks 通话设置
@return 是否支持视频通话
*/
- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;
/*!
设置本地视频分辨率
@param profile 通话视频分辨率
@discussion
设置本地视频分辨率
@remarks 视频设置
*/
- (void)setVideoProfile:(RCVideoProfile)profile;
/*!
设置本地视频属性, 可用此接口设置本地视频方向
@param orientation 视频方向, 默认: AVCaptureVideoOrientationPortrait
@discussion
设置本地视频属性, 可用此接口设置本地视频方向
@remarks 视频设置
*/
- (void)setVideoOrientation:(AVCaptureVideoOrientation)orientation;
/*!
设置码率
@param rate 码率 单位 kbps
@discussion
设置码率
@remarks 视频设置
*/
- (void)setBitRate:(NSUInteger)rate;
/*!
设置外部信令服务器代理
@param signalServerDelegate 外部信令服务器代理
@discussion
默认情况下 app 使用融云消息作为信令即可, 不需要设置此代理, 此时有个限制就是所有的通话必须在某一个会话中进行, 比如群组.
如果您需要摆脱会话的限制, 请使用 server api 服务实现本代理, 然后 startCall 时 conversationType 传 0, targetId 传 nil, calllib 会调用您设置的代理来发送消息.
请务必使用一个全局代理, 确保在拨打和接听 VoIP 的时候代理对象都存活, 这样才能确保正常通话.
@remarks 通话设置
*/
- (void)setSignalServerDelegate:(id<RCCallSignalServerDelegate>)signalServerDelegate;
/*!
当前的通话会话实体
*/
@property (nonatomic, strong, readonly, nullable) RCCallSession *currentCallSession;
/*!
@remarks 上次通话的通话会话静态实体
@discussion
5.8.0版本callLib修改
currentCallSession有效生命周期由开始通话直到下次通话开始为止变为了由开始通话直到这次通话结束为止
为了弥补这个逻辑缺失新增了lastCallSession从这次通话回调结束以后生效直到下次通话结束失效
*/
@property (nonatomic, strong, readonly, nullable) RCCallSessionSnapshot *lastCallSession;
/*!
是否生成通话记录消息默认为YES
*/
@property (nonatomic, assign) BOOL enableCallSummary;
/*!
是否开启多平台模式默认为NO
*/
@property (nonatomic, assign) BOOL enableMultiPlatformMode;
/*!
设置是否使用苹果 PushKit 推送
@param enable YES 使用, NO 不使用
@discussion
是否打开苹果 PushKit 推送, 该推送可以直接激活 App, 注: iOS 13 以后 PushKit 必须结合苹果 CallKit.framework 进行使用, 否则无法正常处理 VoIP 相关推送逻辑,
如果设置为 NO 则使用普通 APNS 消息推送来处理音视频信令逻辑, 默认关闭. 打开之后 App 默认需要自行处理 VoIP 推送唤起 CallKit.framework 的逻辑.
@remarks 通话设置
*/
- (void)setApplePushKitEnable:(BOOL)enable;
/*!
设置是否使用音视频预热
@param preconnectEnabled YES 使用, NO 不使用
@discussion
默认情况下 SDK 内部会在发送通话信令或接听信令成功的时候,主动进行音视频的预热
@remarks 通话设置
*/
- (void)setPreconnectEnabled:(BOOL)preconnectEnabled;
/*!
设置语音识别监听器
@param delegate 语音识别监听器
@discussion
设置语音识别监听器
@remarks 语音识别设置
*/
- (void)setASRDelegate:(id<RCCallASRDelegate>)delegate;
/*!
设置语音识别源语言
@param languageCode 语言代码
@discussion
设置语音识别源语言
@remarks 语音识别设置
*/
- (void)setSrcLanguageCode:(NSString *)languageCode;
/*!
开启语音识别服务
@param completion 开启语音识别服务回调
@discussion
开启语音识别服务如果房间内没有人发布流则无法开启语音识别服务SDK 会在有人发布流后补偿进行开启语音识别服务
@remarks 语音识别
*/
- (void)startASR:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
停止语音识别服务
@param completion 停止语音识别服务回调
@discussion
停止语音识别服务
@remarks 语音识别设置
*/
- (void)stopASR:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
设置是否打开语音识别
@param enable YES 打开, NO 关闭
@return 返回值0 代表成功
@discussion
1. 通话接通后,可以通过此接口打开或关闭语音识别功能;
2. 默认关闭语音识别功能,开启后会在通话过程中自动识别用户语音并转换为文字。
@remarks 语音识别设置
*/
- (int)setEnableASR:(BOOL)enable;
/*!
开启语音翻译
@param destLangCode 翻译目标语言码
@discussion
1. 语音翻译依赖语音识别服务,需要在收到 RCCallASRDelegate 的 didReceiveStartASR 回调后,调用开启语音翻译
2. 开启语音翻译,会通过 RCCallASRDelegate 的 didReceiveRealtimeTranslationContent 回调返回语音翻译结果
@remarks 语音识别设置
*/
- (void)startRealtimeTranslation:(NSString *)destLangCode copmletion:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
关闭语音翻译
@discussion
关闭语音翻译
@remarks 语音识别设置
*/
- (void)stopRealtimeTranslation:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
获取 SDK 版本号
@return 版本号
@remarks 参数配置
*/
+ (NSString *)getVersion;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,69 @@
//
// RCCallClientSignalServer.h
// RongCallLib
//
// Created by RongCloud on 2017/7/25.
// Copyright © 2017年 Rong Cloud. All rights reserved.
//
#ifndef RCCallClientSignalServer_h
#define RCCallClientSignalServer_h
#import <RongCallLib/RongCallLib.h>
#import "RCCallSummaryMessage.h"
NS_ASSUME_NONNULL_BEGIN
/*!
信令服务代理
*/
@protocol RCCallSignalServerDelegate <NSObject>
/*!
获取通话参与者的唯一媒体ID, 必须保证每次电话会议的每个人的媒体ID都是全局唯一的
@param successBlock 为当前用户分配的媒体Id成功的回调
@param errorBlcok 获取媒体Id失败的回调
@discussion
获取通话参与者的唯一媒体ID, 必须保证每次电话会议的每个人的媒体ID都是全局唯一的
@remarks 代理
*/
- (void)getUniqueMediaId:(nullable void (^)(NSString *mediaId))successBlock error:(nullable void (^)(int errorCode))errorBlcok;
/*!
发送 VoIP 信令消息
@param messageContent 消息内容
@param toUserIdList 接收者的Id
@param pushContent pushContent
@param pushData pushData
@param successBlock 成功的回调
@param errorBlcok 失败的回调
@discussion
发送 VoIP 信令消息
@remarks 代理
*/
- (void)sendVoipSignalMessage:(RCMessageContent *)messageContent
toUserIdList:(NSArray<NSString *> *)toUserIdList
pushContent:(nullable NSString *)pushContent
pushData:(nullable NSString *)pushData
success:(nullable void (^)(void))successBlock
error:(nullable void (^)(int errorCode))errorBlcok;
/*!
VoIP 通话结束返回的统计信息
@param summary 通话统计
@discussion
VoIP 通话结束返回的统计信息
@remarks 代理
*/
- (void)onVoipCallSummary:(RCCallSummaryMessage *)summary;
@end
NS_ASSUME_NONNULL_END
#endif /* RCCallClientSignalServer_h */

View File

@@ -0,0 +1,454 @@
//
// RCCallCommonDefine.h
// RongCallLib
//
// Created by RongCloud on 16/2/28.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#ifndef RCCallCommonDefine_h
#define RCCallCommonDefine_h
/*!
引擎类型
*/
typedef NS_ENUM(NSInteger, RCCallEngineType) {
/*!
*/
RCCallEngineNone = 0,
/*!
声网
*/
RCCallEngineAgora = 1,
/*!
融云
*/
RCCallEngineRong = 2,
/*!
Blink
*/
RCCallEngineBlink = 3,
/*!
RTC3.0
*/
RCCallEngineRongRTC = 4
};
/*!
媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallMediaType) {
/*!
音频
*/
RCCallMediaAudio = 1,
/*!
视频
*/
RCCallMediaVideo = 2
};
/*!
媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallRoomType) {
/*!
同App通话
*/
RCCallRoomTypeNormalCall = 0,
/*!
跨App通话
*/
RCCallRoomTypeCrossCall = 7
};
/*!
通话质量
*/
typedef NS_ENUM(NSUInteger, RCCallQuality) {
/*!
未知
*/
RCCall_Quality_Unknown = 0,
/*!
Excellent
*/
RCCall_Quality_Excellent = 1,
/*!
Good
*/
RCCall_Quality_Good = 2,
/*!
Poor
*/
RCCall_Quality_Poor = 3,
/*!
Bad
*/
RCCall_Quality_Bad = 4,
/*!
VBad
*/
RCCall_Quality_VBad = 5,
/*!
Down
*/
RCCall_Quality_Down = 6
};
/**
视频显示模式
*/
typedef NS_ENUM(NSInteger, RCCallRenderModel) {
/*!
默认: 如果视频尺寸与显示视窗尺寸不一致,则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。
*/
RCCallRenderModelHidden = 1,
/*!
RenderFit: 如果视频尺寸与显示视窗尺寸不一致,在保持长宽比的前提下,将视频进行缩放后填满视窗。
*/
RCCallRenderModelFit = 2,
/*!
RenderAdaptive: 如果自己和对方都是竖屏,或者如果自己和对方都是横屏,使用
RCCallRenderModelHidden如果对方和自己一个竖屏一个横屏则使用RCCallRenderModelFit。
*/
RCCallRenderModelAdaptive = 3
};
#pragma mark - Call
/*!
错误码
*/
typedef NS_ENUM(NSInteger, RCCallErrorCode) {
/*!
成功
*/
RCCallSuccess = 0,
/*!
网络不可用
*/
RCCallNetworkUnavailable = 1,
/*!
已经处于通话中了
*/
RCCallOneCallExisted = 2,
/*!
无效操作
*/
RCCallOperationUnavailable = 3,
/*!
参数错误
*/
RCCallInvalidParam = 4,
/*!
网络不稳定
*/
RCCallNetworkUnstable = 5,
/*!
媒体服务请求失败
*/
RCCallMediaRequestFailed = 6,
/*!
媒体服务初始化失败
*/
RCCallMediaServerNotReady = 7,
/*!
媒体服务未初始化
*/
RCCallMediaServerNotInitialized = 8,
/*!
媒体服务请求超时
*/
RCCallMediaRequestTimeout = 9,
/*!
未知的媒体服务错误
*/
RCCallMediaUnkownError = 10,
/*!
已被禁止通话
*/
RCCallMediaKickedByServerError = 11,
/*!
音视频服务已关闭
*/
RCCallMediaServerClosedError = 12,
/*!
音视频发布资源失败
*/
RCCallMediaServerPublishError = 13,
/*!
音视频订阅资源失败
*/
RCCallMediaServerSubscribeError = 14,
/*!
其他端已在通话中
*/
RCCallMediaJoinRoomRefuseError = 15,
/*!
己方其他端已加入其他房间
*/
RCCallMediaOtherClientJoinedRoom = 16
};
/*!
通话结束原因
*/
typedef NS_ENUM(NSInteger, RCCallDisconnectReason) {
/*!
己方取消已发出的通话请求
*/
RCCallDisconnectReasonCancel = 1,
/*!
己方拒绝收到的通话请求
*/
RCCallDisconnectReasonReject = 2,
/*!
己方挂断
*/
RCCallDisconnectReasonHangup = 3,
/*!
己方忙碌
*/
RCCallDisconnectReasonBusyLine = 4,
/*!
己方未接听
*/
RCCallDisconnectReasonNoResponse = 5,
/*!
己方不支持当前引擎
*/
RCCallDisconnectReasonEngineUnsupported = 6,
/*!
己方网络出错
*/
RCCallDisconnectReasonNetworkError = 7,
/*!
己方获取媒体资源失败
*/
RCCallDisconnectReasonResourceError = 8,
/*!
己方发布资源失败
*/
RCCallDisconnectReasonPublishError = 9,
/*!
己方订阅资源失败
*/
RCCallDisconnectReasonSubscribeError = 10,
/*!
对方取消已发出的通话请求
*/
RCCallDisconnectReasonRemoteCancel = 11,
/*!
对方拒绝收到的通话请求
*/
RCCallDisconnectReasonRemoteReject = 12,
/*!
对方挂断
*/
RCCallDisconnectReasonRemoteHangup = 13,
/*!
对方忙碌
*/
RCCallDisconnectReasonRemoteBusyLine = 14,
/*!
对方未接听
*/
RCCallDisconnectReasonRemoteNoResponse = 15,
/*!
对方不支持当前引擎
*/
RCCallDisconnectReasonRemoteEngineUnsupported = 16,
/*!
对方网络错误
*/
RCCallDisconnectReasonRemoteNetworkError = 17,
/*!
对方获取媒体资源失败
*/
RCCallDisconnectReasonRemoteResourceError = 18,
/*!
对方发布资源失败
*/
RCCallDisconnectReasonRemotePublishError = 19,
/*!
对方订阅资源失败
*/
RCCallDisconnectReasonRemoteSubscribeError = 20,
/*!
己方其他端已加入新通话
*/
RCCallDisconnectReasonKickedByOtherCall = 21,
/*!
己方其他端已在通话中
*/
RCCallDisconnectReasonInOtherCall = 22,
/*!
己方已被禁止通话
*/
RCCallDisconnectReasonKickedByServer = 23,
/*!
己方已接听系统来电
*/
RCCallDisconnectReasonAcceptSystemCall = 24,
/*!
对方其他端已加入新通话
*/
RCCallDisconnectReasonRemoteKickedByOtherCall = 31,
/*!
对方其他端已在通话中
*/
RCCallDisconnectReasonRemoteInOtherCall = 32,
/*!
对方已被禁止通话
*/
RCCallDisconnectReasonRemoteKickedByServer = 33,
/*!
对方已接听系统来电
*/
RCCallDisconnectReasonRemoteAcceptSystemCall = 34,
/*!
己方其他端已接听
*/
RCCallDisconnectReasonAcceptByOtherClient = 101,
/*!
己方其他端已挂断
*/
RCCallDisconnectReasonHangupByOtherClient = 102,
/*!
己方被对方加入黑名单
*/
RCCallDisconnectReasonAddToBlackList = 103,
/*!
音视频服务已关闭
*/
RCCallDisconnectReasonMediaServerClosed = 104,
/*!
己方被降级为观察者
*/
RCCallDisconnectReasonDegrade = 301
};
/*!
通话视频参数
*/
typedef NS_ENUM(NSInteger, RCVideoProfile) {
/*!
176x132, 10fps, 150kbps
*/
RC_VIDEO_PROFILE_132P = 10,
/*!
256x144, 15fps, 240kbps
*/
RC_VIDEO_PROFILE_144P_1 = 11,
/*!
240x240, 15fps, 280kbps
*/
RC_VIDEO_PROFILE_240P = 20,
/*!
320x240, 15fps, 400kbps
*/
RC_VIDEO_PROFILE_240P_1 = 21,
/*!
480x360, 15fps, 650kbps
*/
RC_VIDEO_PROFILE_360P = 30,
/*!
640x360, 15fps, 800kbps
*/
RC_VIDEO_PROFILE_360P_1 = 40,
/*!
640x480, 15fps, 900kbps
*/
RC_VIDEO_PROFILE_480P = 50,
/*!
720x480, 15fps, 1000kbps
*/
RC_VIDEO_PROFILE_480P_1 = 60,
/*!
1280x720, 15fps, 2500kbps
*/
RC_VIDEO_PROFILE_720P = 70,
/*
1920*1080, 15fps, 4000kbps
*/
RC_VIDEO_PROFILE_1080P = 80,
/*!
默认的视频参数
*/
RC_VIDEO_PROFILE_DEFAULT = RC_VIDEO_PROFILE_480P
};
/*!
视频编码方式
*/
typedef NS_ENUM(NSInteger, RCVideoCodecType) {
/*!
H264
*/
RC_VIDEO_CODEC_H264
};
/*!
通话状态
*/
typedef NS_ENUM(NSInteger, RCCallStatus) {
/*!
初始状态
*/
//RCCallIdle = 0,
/*!
正在呼出
*/
RCCallDialing = 1,
/*!
正在呼入
*/
RCCallIncoming = 2,
/*!
收到一个通话呼入后,正在振铃
*/
RCCallRinging = 3,
/*!
正在通话
*/
RCCallActive = 4,
/*!
已经挂断
*/
RCCallHangup = 5
};
/*!
用户类型
*/
typedef NS_ENUM(NSInteger, RCCallUserType) {
/*!
正常用户
*/
RCCallUserNormal = 1,
/*!
观察者
*/
RCCallUserObserver = 2
};
/*!
同UserId两端同时加入通话类型
*/
typedef NS_ENUM(NSUInteger, RCCallJoinCallType) {
/*!
将先加入通话用户踢出通话
*/
RCCallJoinCallTypeKick,
/*!
拒绝当前用户加入通话
*/
RCCallJoinCallTypeRefuse,
};
#endif /* RCCallCommonDefine_h */

View File

@@ -0,0 +1,687 @@
//
// RCCallSession.h
// RongCallLib
//
// Created by RongCloud on 16/2/29.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <CoreMedia/CoreMedia.h>
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCCallCommonDefine.h"
#import "RCCallUserProfile.h"
NS_ASSUME_NONNULL_BEGIN
/*!
通话状态变化的监听器
*/
@protocol RCCallSessionDelegate <NSObject>
@optional
/*!
通话已接通
@discussion
通话已接通
@remarks 代理
*/
- (void)callDidConnect;
/*!
通话已结束
@discussion
通话已结束
@remarks 代理
*/
- (void)callDidDisconnect;
/*!
通话已结束
@param reason 挂断原因
@discussion
通话已结束
@warning
这个接口和callDidDisconnect 回调方法相同,增加返回挂断原因。
同时实现本回调通话已结束将不会再通过callDidDisconnect 处理。
@remarks 代理
*/
- (void)callDidDisconnectWithReason:(RCCallDisconnectReason)reason;
/*!
对端用户正在振铃
@param userId 正在振铃的用户ID
@discussion
对端用户正在振铃
@remarks 代理
*/
- (void)remoteUserDidRing:(NSString *)userId;
/*!
有用户被邀请加入通话
@param userId 被邀请的用户ID
@param mediaType 希望被邀请者使用的媒体类型
@discussion
有用户被邀请加入通话
@remarks 代理
*/
- (void)remoteUserDidInvite:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户加入了通话
@param userId 用户ID
@param mediaType 用户的媒体类型
@discussion
对端用户加入了通话
@remarks 代理
*/
- (void)remoteUserDidJoin:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户切换了媒体类型
@param userId 用户ID
@param mediaType 切换至的媒体类型
@discussion
对端用户切换了媒体类型
@remarks 代理
*/
- (void)remoteUserDidChangeMediaType:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户开启或关闭了麦克风的状态
@param disabled 是否关闭麦克风
@param userId 用户ID
@discussion
对端用户开启或关闭了麦克风的状态
@remarks 代理
*/
- (void)remoteUserDidDisableMicrophone:(BOOL)disabled byUser:(NSString *)userId;
/*!
对端用户开启或关闭了摄像头的状态
@param disabled 是否关闭摄像头
@param userId 用户ID
@discussion
对端用户开启或关闭了摄像头的状态
@remarks 代理
*/
- (void)remoteUserDidDisableCamera:(BOOL)disabled byUser:(NSString *)userId;
/*!
对端用户挂断
@param userId 用户ID
@param reason 挂断的原因
@discussion
对端用户挂断
@remarks 代理
*/
- (void)remoteUserDidLeft:(NSString *)userId reason:(RCCallDisconnectReason)reason;
/*!
对端用户发布自定义媒体流
@param streamId 自定义流ID
@param tag 自定义流标签
@param mediaType 媒体类型
@discussion
对端用户发布自定义媒体流
@remarks 代理
*/
- (void)remoteUserDidPublishCustomMediaStream:(NSString *)streamId
streamTag:(NSString *)tag
mediaType:(RCCallMediaType)mediaType;
/*!
对端用户取消发布自定义媒体流
@param streamId 自定义流ID
@discussion
对端用户取消发布自定义媒体流
@remarks 代理
*/
- (void)remoteUserDidCancelPublishCustomMediaStream:(NSString *)streamId;
/*!
本地发布资源上报
@param success 发布资源是否成功
@discussion
本地发布资源上报
@remarks 代理
*/
- (void)localUserDidPublishStream:(BOOL)success;
/*!
彩铃
@discussion
彩铃
@remarks 代理
*/
- (void)shouldAlertForWaitingRemoteResponse;
/*!
来电铃声
@discussion
来电铃声
@remarks 代理
*/
- (void)shouldRingForIncomingCall;
/*!
通话接通或挂断时停止播放铃声
@discussion
通话接通或挂断时停止播放铃声
@remarks 代理
*/
- (void)shouldStopAlertAndRing;
/*!
通话过程中的错误回调
@param error 错误码
@discussion
通话过程中的错误回调
@warning
这个接口回调的错误码主要是为了提供必要的log以及提示用户如果是不可恢复的错误SDK会挂断电话并回调callDidDisconnectApp可以在callDidDisconnect中统一处理通话结束的逻辑
@remarks 代理
*/
- (void)errorDidOccur:(RCCallErrorCode)error;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param txQuality 上行网络质量
@param rxQuality 下行网络质量, 接收到的所有远端用户网络质量的平均值
@discussion
当前通话网络状态的回调,该回调方法每秒触发一次
@remarks 代理
*/
- (void)networkTxQuality:(RCCallQuality)txQuality rxQuality:(RCCallQuality)rxQuality;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param txQuality 上行网络质量
@param rxQuality 下行网络质量, 接收到的某个远端用户的网络质量
@param userID 远端用户
@discussion
当前通话网络状态的回调,该回调方法每秒触发一次
@remarks 代理
*/
- (void)networkTxQuality:(RCCallQuality)txQuality rxQuality:(RCCallQuality)rxQuality remoteUserID:(nullable NSString *)userID;
/*!
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@param leavel 声音级别: 0~9, 0为无声, 依次变大
@param userID 用户ID, 本端用户ID(发送音量) 或 远端用户ID(接收音量)
@discussion
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@remarks 代理
*/
- (void)audioLevel:(NSInteger)leavel userID:(nullable NSString *)userID;
/*!
摄像头采集视频帧数据上报
@param pixelBuffer 摄像头采集视频帧数据
@discussion
当前视频通话摄像头采集视频帧数据回调,如果修改了该视频数据,会影响显示本地和发送视频帧数据
@remarks 代理
*/
- (void)processCaptureVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
发送本地视频帧数据上报
@param pixelBuffer 发送本地视频帧数据
@discussion
当前视频通话发送本地视频帧数据回调,如果修改了该视频数据,会影响发送视频帧数据
@remarks 代理
*/
- (void)processVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
显示本地视频帧数据上报
@param pixelBuffer 显示本地视频数据
@discussion
当前视频通话显示本地视频帧数据回调,如果修改了该视频数据,会影响显示本地视频帧数据
@remarks 代理
*/
- (void)processDisplayVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
当前通话为视频通话时, 收到远端用户的第一个视频帧的回调
@param userId 远端用户ID
@remarks 代理
*/
- (void)receiveRemoteUserVideoFirstKeyFrame:(nullable NSString *)userId;
/*!
当前通话为音频或视频通话时, 收到远端用户的第一个音频帧的回调
@param userId 远端用户ID
@remarks 代理
*/
- (void)receiveRemoteUserVideoFirstAudioFrame:(nullable NSString *)userId;
/*!
对端用户视频分辨率变化的回调
@param userId 用户ID
@param size 变化后的视频分辨率
@discussion
对端用户视频分辨率变化的回调
@remarks 代理
*/
- (void)remoteUserDidChangeResolution:(nullable NSString *)userId resolution:(CGSize)size;
@end
@class RCMessagePushConfig;
@protocol RCRTCDrawer;
/*!
通话实体
*/
@interface RCCallSession : NSObject
/*!
通话的会话类型
*/
@property (nonatomic, assign, readonly) RCConversationType conversationType;
/*!
通话ID
*/
@property (nonatomic, strong, readonly, nullable) NSString *callId;
/*!
通话的目标会话ID
*/
@property (nonatomic, strong, readonly, nullable) NSString *targetId;
/*!
RTC会话唯一标识, 用于 Server API
*/
@property (nonatomic, strong, readonly, nullable) NSString *sessionId;
/*!
是否是多方通话
*/
@property (nonatomic, assign, readonly, getter=isMultiCall) BOOL multiCall;
/*!
通话的扩展信息
*/
@property (nonatomic, strong, readonly, nullable) NSString *extra;
/*!
通话的当前状态
*/
@property (nonatomic, assign, readonly) RCCallStatus callStatus;
/*!
通话的最初发起人
*/
@property (nonatomic, strong, readonly, nullable) NSString *caller;
/*!
邀请当前用户加入通话的邀请者
*/
@property (nonatomic, strong, readonly, nullable) NSString *inviter;
/*!
当前的用户列表
*/
@property (nonatomic, strong, readonly, nullable) NSArray<RCCallUserProfile *> *userProfileList;
/*!
自己的状态
*/
@property (nonatomic, strong, readonly, nullable) RCCallUserProfile *myProfile;
/*!
当前用户使用的媒体类型
*/
@property (nonatomic, assign, readonly) RCCallMediaType mediaType;
/*!
通话开始的时间
@discussion 如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, assign, readonly) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, assign, readonly) long long connectedTime;
/*!
通话挂断原因
*/
@property (nonatomic, assign) RCCallDisconnectReason disconnectReason;
/*!
设置通话状态变化的监听器
@param delegate 通话状态变化的监听器
@discussion
设置通话状态变化的监听器
@warning
已废弃, 请使用 addDelegate:
@remarks 通话设置
*/
- (void)setDelegate:(id<RCCallSessionDelegate>)delegate DEPRECATED_MSG_ATTRIBUTE("please call method addDelegate:");
/*!
添加通话状态的监听器, 支持多代理
@param delegate 通话状态变化的监听器
@discussion
添加通话状态的监听器, 支持多代理
@remarks 通话设置
*/
- (void)addDelegate:(id<RCCallSessionDelegate>)delegate;
/**
删除通话状态的监听器
@param delegate 通话状态的监听器
@discussion
删除通话状态的监听器
@remarks 通话设置
*/
- (void)removeDelegate:(id<RCCallSessionDelegate>)delegate;
/*!
获取所有的监听器
@discussion
获取所有的监听器
@remarks 通话设置
@return 所有注册的代理数组
*/
- (NSArray<id<RCCallSessionDelegate>> *)allDelegates;
/*!
接听来电
@param type 接听使用的媒体类型
@discussion
接听来电
@remarks 通话管理
*/
- (void)accept:(RCCallMediaType)type;
/*!
挂断通话
@discussion
挂断通话
@remarks 通话管理
*/
- (void)hangup;
/*!
挂断通话
@param block 挂断消息发送回调
@discussion
挂断通话
@remarks 通话管理
*/
- (void)hangup:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
观察者身份用户, 发布自己的音视频资源
@param mediaType 发布的媒体类型
@param block 发布完成的回调
@discussion
观察者身份用户, 发布自己的音视频资源
@warning
只有观察者用户可以发布音视频资源
@remarks 资源管理
*/
- (void)publishMediaResource:(RCCallMediaType)mediaType complete:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
正常身份用户, 取消发布自己的音视频资源
@param block 取消发布完成的回调
@discussion
正常身份用户, 取消发布自己的音视频资源
@warning
只有正常用户可以取消发布音视频资源
@remarks 资源管理
*/
- (void)unPublishMediaResource:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param type 建议被邀请者使用的媒体类型
@discussion
邀请用户加入通话
@remarks 通话管理
*/
- (void)inviteRemoteUsers:(nullable NSArray<NSString *> *)userIdList mediaType:(RCCallMediaType)type;
/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param observerIdList 需要以观察者身份加入房间的用户ID列表
@param type 建议被邀请者使用的媒体类型
@discussion
邀请用户加入通话
@remarks 通话管理
*/
- (void)inviteRemoteUsers:(nullable NSArray<NSString *> *)userIdList
observerIdList:(nullable NSArray<NSString *> *)observerIdList
mediaType:(RCCallMediaType)type;
/*!
设置用户所在的视频View
@param userId 用户ID自己或他人
@param view 视频的View
@discussion
设置用户所在的视频View
@remarks 视频配置
*/
- (void)setVideoView:(nullable UIView *)view userId:(nullable NSString *)userId;
/*!
设置用户所在的视频View
@param userId 用户ID自己或他人
@param view 继承RCRTCDrawer 接口 视频的View
@discussion
设置用户所在的视频View
注意:
1.此接口需要RCCallClient中enableMultiPlatformMode设置为YES方可使用
2. view 的生命周期自己处理
@remarks 视频配置
*/
- (int)setMultiPlatformVideoView:(nullable id<RCRTCDrawer>)view userId:(nullable NSString *)userId;
/**
设置用户所在的视频View
@param view userId 用户ID自己或他人)
@param userId 视频的View
@param renderMode 视频显示模式 (默认为RCCallRenderModelHidden)
@discussion
设置用户所在的视频View
@remarks 视频配置
*/
- (void)setVideoView:(nullable UIView *)view userId:(nullable NSString *)userId renderMode:(RCCallRenderModel)renderMode;
/*!
更换自己使用的媒体类型
@param type 媒体类型
@discussion
更换自己使用的媒体类型
@remarks 通话管理
*/
- (BOOL)changeMediaType:(RCCallMediaType)type;
/*!
静音状态
*/
@property (nonatomic, readonly) BOOL isMuted;
/*!
设置静音状态
@param muted 是否静音, 默认值为NO
@discussion
设置静音状态
@remarks 音频配置
@return 是否设置成功
*/
- (BOOL)setMuted:(BOOL)muted;
/*!
是否有最小化窗口
*/
@property (nonatomic, readonly) BOOL minimized;
/*!
设置是否有最小化窗口状态
@param minimized 是否最小化
@discussion
设置是否有最小化窗口状态
@remarks 通话设置
*/
- (void)setMinimized:(BOOL)minimized;
/*!
扬声器状态,是否开启扬声器
@discussion 默认值为NO。
*/
@property (nonatomic, readonly) BOOL speakerEnabled;
/*!
设置扬声器状态
@param speakerEnabled 是否开启扬声器
@discussion
设置扬声器状态
@remarks 音频配置
@return 是否设置成功
*/
- (BOOL)setSpeakerEnabled:(BOOL)speakerEnabled;
/*!
摄像头状态,是否开启摄像头
*/
@property (nonatomic, readonly) BOOL cameraEnabled;
/*!
设置摄像头状态
@param cameraEnabled 是否开启摄像头
@discussion
音频通话的默认值为NO视频通话的默认值为YES。
@remarks 视频配置
@return 是否设置成功
*/
- (BOOL)setCameraEnabled:(BOOL)cameraEnabled;
/*!
切换前后摄像头
@discussion
切换前后摄像头
@remarks 视频配置
@return 是否切换成功
*/
- (BOOL)switchCameraMode;
@end
/*!
静态通话实体
从属性依赖callEngine取值的RCCallSession中copy一个不依赖callEngine的静态对象
*/
@interface RCCallSessionSnapshot : RCCallSession
/// 从其他对象拷贝
- (instancetype)initWithSession:(RCCallSession *)session;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,98 @@
//
// RCCallSummaryMessage.h
// RongCallLib
//
// Created by RongCloud on 16/3/1.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCCallCommonDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
通话摘要消息的类型名
*/
#define RCCallSummaryMessageTypeIdentifier @"RC:VCSummary"
/*!
通话摘要消息类
@discussion 通话摘要消息类,此消息会进行存储并计入未读消息数。
*/
@interface RCCallSummaryMessage : RCMessageContent
/*!
通话的最初发起人
*/
@property (nonatomic, strong) NSString *caller;
/*!
邀请当前用户加入通话的邀请者
*/
@property (nonatomic, strong) NSString *inviter;
/*!
当前用户最后使用的媒体类型
*/
@property (nonatomic, assign) RCCallMediaType mediaType;
/*!
通话挂断时包含的用户ID列表
*/
@property (nonatomic, strong) NSArray<NSString *> *memberIdList;
/*!
通话开始时间
@discussion
如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, assign) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, assign) long long connectedTime;
/*!
通话总时长
*/
@property (nonatomic, assign) long long duration;
/*!
通话结束的原因
*/
@property (nonatomic, assign) RCCallDisconnectReason hangupReason;
/*!
初始化通话摘要消息
@param caller 通话的最初发起人
@param inviter 邀请当前用户加入通话的邀请者
@param mediaType 当前用户最后使用的媒体类型
@param memberIdList 通话挂断时包含的用户ID列表
@param startTime 通话开始时间
@param connectedTime 通话接通时间
@param duration 通话总时长
@param hangupReason 通话结束的原因
@discussion
初始化通话摘要消息
@remarks 资源管理
@return 通话摘要消息的对象
*/
- (instancetype)initWithCaller:(NSString *)caller
inviter:(NSString *)inviter
mediaType:(RCCallMediaType)mediaType
memberIdList:(NSArray<NSString *> *)memberIdList
startTime:(long long)startTime
connectedTime:(long long)connectedTime
duration:(long long)duration
hangupReason:(RCCallDisconnectReason)hangupReason;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,114 @@
//
// RCCallUserProfile.h
// RongCallLib
//
// Created by RongCloud on 16/2/29.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "RCCallCommonDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
用户的通话状态
*/
@interface RCCallUserProfile : NSObject
/*!
用户ID
*/
@property (nonatomic, strong) NSString *userId;
/*!
用户的通话媒体连接ID
*/
@property (nonatomic, strong) NSString *mediaId;
/*!
用户所使用的媒体类型
*/
@property (nonatomic, assign) RCCallMediaType mediaType;
/*!
用户的通话状态
*/
@property (nonatomic, assign) RCCallStatus callStatus;
/*!
用户的摄像头是否已经关闭
*/
@property (nonatomic, assign) BOOL cameraDisabled;
/*!
用户的麦克风是否已经关闭
*/
@property (nonatomic, assign) BOOL micDisabled;
/*!
收到通话呼入的时间
@discussion 只有当前登录用户的呼入时间是准确的,其他用户的并不准确
*/
@property (nonatomic, assign) long long startTime;
/*!
通话的接通时间
*/
@property (nonatomic, assign) long long connectedTime;
/*!
通话的挂断时间
*/
@property (nonatomic, assign) long long endTime;
/*!
用户的视频View
*/
@property (nonatomic, strong, nullable) UIView *videoView;
/*!
音视频用户类型
*/
@property (nonatomic, assign) NSInteger blinkUserType DEPRECATED_MSG_ATTRIBUTE("use userType instead") __attribute__((deprecated));
/*!
音视频用户类型
*/
@property (nonatomic, assign) RCCallUserType userType;
/*!
音频主叫接通前声音输出 Yes:外放 NO:听筒
*/
@property (nonatomic, assign) BOOL isSpeakerInAudioMode;
/*!
用户标签
*/
@property (nonatomic, strong, nullable) NSString *tag;
/*!
初始化用户的通话状态
@param userId 用户ID
@param mediaId 用户的通话媒体连接ID
@param mediaType 用户所使用的媒体类型
@param callStatus 用户的通话状态
@param startTime 收到通话呼入的时间
@discussion
初始化用户的通话状态
@remarks 通话设置
@return 用户的通话状态对象
*/
- (instancetype)initWithUserId:(NSString *)userId
mediaId:(nullable NSString *)mediaId
mediaType:(RCCallMediaType)mediaType
callStatus:(RCCallStatus)callStatus
startTime:(long long)startTime;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,24 @@
//
// RongCallLib.h
// RongCallLib
//
// Created by RongCloud on 16/4/25.
// Copyright © 2016年 Rong Cloud. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for RongCallLib.
FOUNDATION_EXPORT double RongCallLibVersionNumber;
//! Project version string for RongCallLib.
FOUNDATION_EXPORT const unsigned char RongCallLibVersionString[];
// In this header, you should import all the public headers of your framework
// using statements like #import <RongCallLib/PublicHeader.h>
#import <RongCallLib/RCCallClient.h>
#import <RongCallLib/RCCallCommonDefine.h>
#import <RongCallLib/RCCallSession.h>
#import <RongCallLib/RCCallSummaryMessage.h>
#import <RongCallLib/RCCallUserProfile.h>

View File

@@ -0,0 +1,6 @@
framework module RongCallLib {
umbrella header "RongCallLib.h"
export *
module * { export * }
}