【音视频】iOS CallLib 开发指南

开通方式

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

使用说明

由于底层引擎技术不同,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 的时候加判断人数的逻辑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容