美文网首页
【音视频】iOS CallLib 开发指南

【音视频】iOS CallLib 开发指南

作者: ajiao焦 | 来源:发表于2018-04-23 15:16 被阅读0次

    开通方式

    音视频服务开通,请参考音视频开通方式说明。

    使用说明

    由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的实时音视频不能互通。

    音视频 SDK 为商用收费功能,之前的 SDK 中的实时音视频为免费测试功能,如果您还想使用之前的实时音视频,可以使用 2.5.2 版本。

    集成说明

    导入 SDK

    有两种方式可以将 SDK 导入您的项目中:

    通过 CocoaPods 管理依赖

    手动导入 SDK 并管理依赖

    手动导入 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 快速集成文档。

    1、发起通话

    您可以调用 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)delegate                                                                                                                          extra:(NSString*)extra;

    其中,您可以通过返回的通话实体,操控通话和获取通话相关信息,通话状态发生变化时会通过您传入的 delegate 进行回调。

    2、接收呼入的通话

    您需要设置 RCCallClient 的全局通话监听,来监听通话呼入。

    // RCCallCleint Class/*!

    设置全局通话呼入的监听器

    @param delegate CallLib全局通话呼入的监听器

    */- (void)setDelegate:(id)delegate;

    3、会话是否支持发起通话

    目前,SDK 支持在单聊发起单人通话,在讨论组、群聊中发起多人通话。

    您可以通过 RCCallClient 类的以下接口查询当前会话的通话能力。

    // RCCallClient Class/*!

    当前会话类型是否支持音频通话

    @param conversationType 会话类型

    @return 是否支持音频通话

    */- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;/*!

    当前会话类型是否支持视频通话

    @param conversationType 会话类型

    @return 是否支持视频通话

    */- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;

    4、获取当前的通话实体

    您可以通过 RCCallClient 的以下接口,查询当前的通话实体。

    // RCCallClient Class/*!

    当前的通话会话实体

    */@property(nonatomic,strong,readonly) RCCallSession *currentCallSession;

    5、通过通话实体操控通话

    通话实体 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;

    6、获取通话相关信息

    您可以通过通话实体 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)longlongstartTime;/*!

    通话接通时间

    */@property(nonatomic,assign,readonly)longlongconnectedTime;

    通话挂断的原因。

    // RCCallSession Class/*!

    通话挂断原因

    */@property(nonatomic,assign) RCCallDisconnectReason disconnectReason;

    7、通话状态的回调

    如果您实现并设置了 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)delegate                          extra:(NSString*)extra;// RCCallSession Class/*!

        设置通话状态变化的监听器

        @param delegate 通话状态变化的监听器

        */- (void)setDelegate:(id)delegate;

    当通话状态发生变化的时候,如接通、结束、对方振铃、有人加入通话、有人挂断、发生警告等都会进行回调。

    // RCCallSession Class/*!

    通话状态变化的监听器

    */@protocolRCCallSessionDelegate@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 的时候加判断人数的逻辑。

    相关文章

      网友评论

          本文标题:【音视频】iOS CallLib 开发指南

          本文链接:https://www.haomeiwen.com/subject/gahllftx.html