【音视频】iOS CallLib 开发指南
音视频服务开通,请参考音视频开通方式说明。
使用说明由于底层引擎技术不同,2.6.0
之后的音视频 SDK 与2.6.0
之前的 SDK 中的实时音视频不能互通。
音视频 SDK 为商用收费功能,之前的 SDK 中的实时音视频为免费测试功能,如果您还想使用之前的实时音视频,可以使用2.5.2
版本。
有两种方式可以将 SDK 导入您的项目中:
通过 CocoaPods 管理依赖
手动导入 SDK 并管理依赖
手动导入 SDK1、 下载 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 快速集成文档。
1、发起通话您可以调用RCCallClient
以下接口,发起通话。
//RCCallCleintClass/*!发起一个通话@paramconversationType会话类型@paramtargetId目标会话ID@paramuserIdList邀请的用户ID列表@paramtype发起的通话媒体类型@paramdelegate通话监听@paramextra附件信息@return呼出的通话实体*/-(RCCallSession*)startCall:(RCConversationType)conversationTypetargetId:(NSString*)targetIdto:(NSArray*)userIdListmediaType:(RCCallMediaType)typesessionDelegate:(id<RCCallSessionDelegate>)delegateextra:(NSString*)extra;
其中,您可以通过返回的通话实体,操控通话和获取通话相关信息,通话状态发生变化时会通过您传入的 delegate 进行回调。
2、接收呼入的通话您需要设置RCCallClient
的全局通话监听,来监听通话呼入。
//RCCallCleintClass/*!设置全局通话呼入的监听器@paramdelegateCallLib全局通话呼入的监听器*/-(void)setDelegate:(id<RCCallReceiveDelegate>)delegate;3、会话是否支持发起通话
目前,SDK 支持在单聊发起单人通话,在讨论组、群聊中发起多人通话。
您可以通过RCCallClient
类的以下接口查询当前会话的通话能力。
//RCCallClientClass/*!当前会话类型是否支持音频通话@paramconversationType会话类型@return是否支持音频通话*/-(BOOL)isAudioCallEnabled:(RCConversationType)conversationType;/*!当前会话类型是否支持视频通话@paramconversationType会话类型@return是否支持视频通话*/-(BOOL)isVideoCallEnabled:(RCConversationType)conversationType;4、获取当前的通话实体
您可以通过 RCCallClient 的以下接口,查询当前的通话实体。
//RCCallClientClass/*!当前的通话会话实体*/@property(nonatomic,strong,readonly)RCCallSession*currentCallSession;5、通过通话实体操控通话
通话实体RCCallSession
包含当前通话的所有信息,您可以通过其中的接口,操控当前通话和获取相关信息,在发起通话和接收到呼入的通话时会获取到相应的通话实体。
如:接听当前来电。
//RCCallSessionClass/*!接听来电@paramtype接听使用的媒体类型*/-(void)accept:(RCCallMediaType)type;
挂断当前通话。
//RCCallSessionClass/*!挂断通话*/-(void)hangup;
邀请用户加入当前通话(仅限邀请讨论组和群组中的成员加入)。
//RCCallSessionClass/*!邀请用户加入通话@paramuserIdList用户ID列表@paramtype建议被邀请者使用的媒体类型*/-(void)inviteRemoteUsers:(NSArray*)userIdListmediaType:(RCCallMediaType)type;
设置视频通话中某个用户的 View 。
//RCCallSessionClass/*!设置用户所在的视频View@paramuserId用户ID(自己或他人)@paramview视频的View*/-(void)setVideoView:(UIView*)viewuserId:(NSString*)userId;
切换自己使用的媒体类型。
//RCCallSessionClass/*!更换自己使用的媒体类型@paramtype媒体类型*/-(BOOL)changeMediaType:(RCCallMediaType)type;
一个通话中,允许每个用户的媒体类型不一致,也就是说可以有些人以视频接入,有些人以音频接入。
设置静音。
//RCCallSessionClass/*!设置静音状态@parammuted是否静音@return是否设置成功@discussion默认值为NO。*/-(BOOL)setMuted:(BOOL)muted;
设置扬声器状态。
//RCCallSessionClass/*!设置扬声器状态@paramspeakerEnabled是否开启扬声器@return是否设置成功*/-(BOOL)setSpeakerEnabled:(BOOL)speakerEnabled;
开启或关闭摄像头。
//RCCallSessionClass/*!设置摄像头状态@paramcameraEnabled是否开启摄像头@return是否设置成功@discussion音频通话的默认值为NO,视频通话的默认值为YES。*/-(BOOL)setCameraEnabled:(BOOL)cameraEnabled;
切换前后摄像头。
//RCCallSessionClass/*!切换前后摄像头@return是否切换成功*/-(BOOL)switchCameraMode;6、获取通话相关信息
您可以通过通话实体RCCallSession
中获取当前通话的相关信息。
当前的通话状态。
//RCCallSessionClass/*!通话的当前状态*/@property(nonatomic,assign,readonly)RCCallStatuscallStatus;
通话的发起人和邀请者。
//RCCallSessionClass/*!通话的最初发起人*/@property(nonatomic,strong,readonly)NSString*caller;/*!邀请当前用户加入通话的邀请者*/@property(nonatomic,strong,readonly)NSString*inviter;
通话的开始时间和接通时间。
//RCCallSessionClass/*!通话开始的时间@discussion如果是用户呼出的通话,则startTime为通话呼出时间;如果是呼入的通话,则startTime为通话呼入时间。*/@property(nonatomic,assign,readonly)longlongstartTime;/*!通话接通时间*/@property(nonatomic,assign,readonly)longlongconnectedTime;
通话挂断的原因。
//RCCallSessionClass/*!通话挂断原因*/@property(nonatomic,assign)RCCallDisconnectReasondisconnectReason;7、通话状态的回调
如果您实现并设置了RCCallSessionDelegate
,当通话状态发生变化的时候,会回调相关接口。
您可以在startCall
的时候传入或者手动设置通话状态监听。
//RCCallClientClass/*!发起一个通话@paramconversationType会话类型@paramtargetId目标会话ID@paramuserIdList邀请的用户ID列表@paramtype发起的通话媒体类型@paramdelegate通话监听@paramextra附件信息@return呼出的通话实体*/-(RCCallSession*)startCall:(RCConversationType)conversationTypetargetId:(NSString*)targetIdto:(NSArray*)userIdListmediaType:(RCCallMediaType)typesessionDelegate:(id<RCCallSessionDelegate>)delegateextra:(NSString*)extra;//RCCallSessionClass/*!设置通话状态变化的监听器@paramdelegate通话状态变化的监听器*/-(void)setDelegate:(id<RCCallSessionDelegate>)delegate;
当通话状态发生变化的时候,如接通、结束、对方振铃、有人加入通话、有人挂断、发生警告等都会进行回调。
//RCCallSessionClass/*!通话状态变化的监听器*/@protocolRCCallSessionDelegate<NSObject>@optional/*!通话已接通*/-(void)callDidConnect;/*!通话已结束*/-(void)callDidDisconnect;/*!对端用户正在振铃@paramuserId用户ID*/-(void)remoteUserDidRing:(NSString*)userId;/*!有用户被邀请加入通话@paramuserId被邀请的用户ID@parammediaType希望被邀请者使用的媒体类型*/-(void)remoteUserDidInvite:(NSString*)userIdmediaType:(RCCallMediaType)mediaType;/*!对端用户加入了通话@paramuserId用户ID@parammediaType用户的媒体类型*/-(void)remoteUserDidJoin:(NSString*)userIdmediaType:(RCCallMediaType)mediaType;/*!对端用户切换了媒体类型@paramuserId用户ID@parammediaType切换至的媒体类型*/-(void)remoteUserDidChangeMediaType:(NSString*)userIdmediaType:(RCCallMediaType)mediaType;/*!对端用户开启或管理了摄像头的状态@paramuserId用户ID@parammuted是否关闭摄像头*/-(void)remoteUserDidDisableCamera:(BOOL)disabledbyUser:(NSString*)userId;/*!对端用户挂断@paramuserId用户ID@paramreason挂断的原因*/-(void)remoteUserDidLeft:(NSString*)userIdreason:(RCCallDisconnectReason)reason;/*!通话过程中的错误回调@paramerror错误码@warning这个接口回调的错误码主要是为了提供必要的log以及提示用户,如果是不可恢复的错误,SDK会挂断电话并回调callDidDisconnect,App可以在callDidDisconnect中统一处理通话结束的逻辑。*/-(void)errorDidOccur:(RCCallErrorCode)error;@end实时音视频推送设置
详细请参考VoIP 推送设置文档。
更多说明CallLib
通话不限制最大人数。如果需要限制的话,您可以在调用startCall
和inviteRemoteUsers
的时候加判断人数的逻辑。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。