音视频服务开通,请参考音视频开通方式说明。
由于底层引擎技术不同,2.6.0
之后的音视频 SDK 与 2.6.0
之前的 SDK 中的实时音视频不能互通。
音视频 SDK 为商用收费功能,之前的 SDK 中的实时音视频为免费测试功能,如果您还想使用之前的实时音视频,可以使用 2.5.2
版本。
有两种方式可以将 SDK 导入您的项目中:
通过 CocoaPods 管理依赖
手动导入 SDK 并管理依赖
1、 下载 SDK 您可以到融云官方网站下载SDK。
2、 融云 IM SDK
是 Call SDK
的基础。使用 CallLib
,必须同时集成使用融云 IM SDK
。 手动导入 IM SDK
,可以参考 IM SDK - 下载与导入 SDK文档。
SDK 文件说明
文件 | 说明 | 注意事项 |
---|---|---|
RongCallLib.framework | CallLib 的 framework 库 | 必须导入 |
AgoraRtcEngineKit.framework | 通话引擎 | 必须导入,否则通话功能将无法使用 |
3、 手动集成了融云 SDK 之后,您需要在您的工程中导入
RongCallLib.framewrok、AgoraRtcEngineKit.framework 以及系统库 CoreMotion.framework、VideoToolbox.framework、libresolv.tbd。
4、 在 Xcode
项目 Build Settings -> Other Linker Flags
中,增加"-ObjC"。
使用融云通话之前,必须先初始化 SDK 和连接服务器,详细内容可以参考 IMLib 快速集成文档。
您可以调用 RCCallClient
以下接口,发起通话。
// RCCallCleint Class/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID
@param userIdList 邀请的用户ID列表
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@return 呼出的通话实体
*/- (RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(NSString *)extra;
其中,您可以通过返回的通话实体,操控通话和获取通话相关信息,通话状态发生变化时会通过您传入的 delegate 进行回调。
您需要设置 RCCallClient
的全局通话监听,来监听通话呼入。
// RCCallCleint Class/*!
设置全局通话呼入的监听器
@param delegate CallLib全局通话呼入的监听器
*/- (void)setDelegate:(id<RCCallReceiveDelegate>)delegate;
目前,SDK 支持在单聊发起单人通话,在讨论组、群聊中发起多人通话。
您可以通过 RCCallClient
类的以下接口查询当前会话的通话能力。
// RCCallClient Class/*!
当前会话类型是否支持音频通话
@param conversationType 会话类型
@return 是否支持音频通话
*/- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;/*!
当前会话类型是否支持视频通话
@param conversationType 会话类型
@return 是否支持视频通话
*/- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;
您可以通过 RCCallClient 的以下接口,查询当前的通话实体。
// RCCallClient Class/*!
当前的通话会话实体
*/@property (nonatomic, strong, readonly) RCCallSession *currentCallSession;
通话实体 RCCallSession
包含当前通话的所有信息,您可以通过其中的接口,操控当前通话和获取相关信息,在发起通话和接收到呼入的通话时会获取到相应的通话实体。
如:接听当前来电。
// RCCallSession Class/*!
接听来电
@param type 接听使用的媒体类型
*/- (void)accept:(RCCallMediaType)type;
挂断当前通话。
// RCCallSession Class/*!
挂断通话
*/- (void)hangup;
邀请用户加入当前通话(仅限邀请讨论组和群组中的成员加入)。
// RCCallSession Class/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param type 建议被邀请者使用的媒体类型
*/- (void)inviteRemoteUsers:(NSArray *)userIdList
mediaType:(RCCallMediaType)type;
设置视频通话中某个用户的 View 。
// RCCallSession Class/*!
设置用户所在的视频View
@param userId 用户ID(自己或他人)
@param view 视频的View
*/- (void)setVideoView:(UIView *)view
userId:(NSString *)userId;
切换自己使用的媒体类型。
// RCCallSession Class/*!
更换自己使用的媒体类型
@param type 媒体类型
*/- (BOOL)changeMediaType:(RCCallMediaType)type;
一个通话中,允许每个用户的媒体类型不一致,也就是说可以有些人以视频接入,有些人以音频接入。
设置静音。
// RCCallSession Class/*!
设置静音状态
@param muted 是否静音
@return 是否设置成功
@discussion 默认值为NO。
*/- (BOOL)setMuted:(BOOL)muted;
设置扬声器状态。
// RCCallSession Class/*!
设置扬声器状态
@param speakerEnabled 是否开启扬声器
@return 是否设置成功
*/- (BOOL)setSpeakerEnabled:(BOOL)speakerEnabled;
开启或关闭摄像头。
// RCCallSession Class/*!
设置摄像头状态
@param cameraEnabled 是否开启摄像头
@return 是否设置成功
@discussion 音频通话的默认值为NO,视频通话的默认值为YES。
*/- (BOOL)setCameraEnabled:(BOOL)cameraEnabled;
切换前后摄像头。
// RCCallSession Class/*!
切换前后摄像头
@return 是否切换成功
*/- (BOOL)switchCameraMode;
您可以通过通话实体 RCCallSession
中获取当前通话的相关信息。
当前的通话状态。
// RCCallSession Class/*!
通话的当前状态
*/@property (nonatomic, assign, readonly) RCCallStatus callStatus;
通话的发起人和邀请者。
// RCCallSession Class/*!
通话的最初发起人
*/@property (nonatomic, strong, readonly) NSString *caller;/*!
邀请当前用户加入通话的邀请者
*/@property (nonatomic, strong, readonly) NSString *inviter;
通话的开始时间和接通时间。
// RCCallSession Class/*!
通话开始的时间
@discussion 如果是用户呼出的通话,则startTime为通话呼出时间;如果是呼入的通话,则startTime为通话呼入时间。
*/@property (nonatomic, assign, readonly) long long startTime;/*!
通话接通时间
*/@property (nonatomic, assign, readonly) long long connectedTime;
通话挂断的原因。
// RCCallSession Class/*!
通话挂断原因
*/@property (nonatomic, assign) RCCallDisconnectReason disconnectReason;
如果您实现并设置了 RCCallSessionDelegate
,当通话状态发生变化的时候,会回调相关接口。
您可以在 startCall
的时候传入或者手动设置通话状态监听。
// RCCallClient Class
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID
@param userIdList 邀请的用户ID列表
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@return 呼出的通话实体
*/
- (RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(NSString *)extra; // RCCallSession Class
/*!
设置通话状态变化的监听器
@param delegate 通话状态变化的监听器
*/
- (void)setDelegate:(id<RCCallSessionDelegate>)delegate;
当通话状态发生变化的时候,如接通、结束、对方振铃、有人加入通话、有人挂断、发生警告等都会进行回调。
// RCCallSession Class/*!
通话状态变化的监听器
*/@protocol RCCallSessionDelegate <NSObject>@optional/*!
通话已接通
*/- (void)callDidConnect;/*!
通话已结束
*/- (void)callDidDisconnect;/*!
对端用户正在振铃
@param userId 用户ID
*/- (void)remoteUserDidRing:(NSString *)userId;/*!
有用户被邀请加入通话
@param userId 被邀请的用户ID
@param mediaType 希望被邀请者使用的媒体类型
*/- (void)remoteUserDidInvite:(NSString *)userId
mediaType:(RCCallMediaType)mediaType;/*!
对端用户加入了通话
@param userId 用户ID
@param mediaType 用户的媒体类型
*/- (void)remoteUserDidJoin:(NSString *)userId
mediaType:(RCCallMediaType)mediaType;/*!
对端用户切换了媒体类型
@param userId 用户ID
@param mediaType 切换至的媒体类型
*/- (void)remoteUserDidChangeMediaType:(NSString *)userId
mediaType:(RCCallMediaType)mediaType;/*!
对端用户开启或管理了摄像头的状态
@param userId 用户ID
@param muted 是否关闭摄像头
*/- (void)remoteUserDidDisableCamera:(BOOL)disabled
byUser:(NSString *)userId;/*!
对端用户挂断
@param userId 用户ID
@param reason 挂断的原因
*/- (void)remoteUserDidLeft:(NSString *)userId
reason:(RCCallDisconnectReason)reason;/*!
通话过程中的错误回调
@param error 错误码
@warning 这个接口回调的错误码主要是为了提供必要的log以及提示用户,如果是不可恢复的错误,SDK会挂断电话并回调callDidDisconnect,App可以在callDidDisconnect中统一处理通话结束的逻辑。
*/- (void)errorDidOccur:(RCCallErrorCode)error;@end
详细请参考 VoIP 推送设置文档。
CallLib
通话不限制最大人数。如果需要限制的话,您可以在调用 startCall
和 inviteRemoteUsers
的时候加判断人数的逻辑。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。