溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【音視頻】iOS CallLib 開發(fā)指南

發(fā)布時間:2020-07-23 13:07:20 來源:網絡 閱讀:847 作者:晨會看看 欄目:移動開發(fā)

開通方式

音視頻服務開通,請參考音視頻開通方式說明。

使用說明

由于底層引擎技術不同,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.frameworkCallLib 的 framework 庫必須導入
AgoraRtcEngineKit.framework通話引擎必須導入,否則通話功能將無法使用

3、 手動集成了融云 SDK 之后,您需要在您的工程中導入

RongCallLib.framewrok、AgoraRtcEngineKit.framework 以及系統(tǒng)庫 CoreMotion.framework、VideoToolbox.framework、libresolv.tbd。

4、 在 Xcode 項目 Build Settings -> Other Linker Flags 中,增加"-ObjC"。

快速集成

使用融云通話之前,必須先初始化 SDK 和連接服務器,詳細內容可以參考 IMLib 快速集成文檔。

1、發(fā)起通話

您可以調用 RCCallClient 以下接口,發(fā)起通話。

// RCCallCleint Class/*!
 發(fā)起一個通話

 @param conversationType 會話類型
 @param targetId         目標會話ID
 @param userIdList       邀請的用戶ID列表
 @param type             發(fā)起的通話媒體類型
 @param delegate         通話監(jiān)聽
 @param extra            附件信息

 @return 呼出的通話實體
 */- (RCCallSession *)startCall:(RCConversationType)conversationType
                    targetId:(NSString *)targetId
                          to:(NSArray *)userIdList
                   mediaType:(RCCallMediaType)type
             sessionDelegate:(id<RCCallSessionDelegate>)delegate
                       extra:(NSString *)extra;

其中,您可以通過返回的通話實體,操控通話和獲取通話相關信息,通話狀態(tài)發(fā)生變化時會通過您傳入的 delegate 進行回調。

2、接收呼入的通話

您需要設置 RCCallClient 的全局通話監(jiān)聽,來監(jiān)聽通話呼入。

// RCCallCleint Class/*!
 設置全局通話呼入的監(jiān)聽器

 @param delegate CallLib全局通話呼入的監(jiān)聽器
 */- (void)setDelegate:(id<RCCallReceiveDelegate>)delegate;

3、會話是否支持發(fā)起通話

目前,SDK 支持在單聊發(fā)起單人通話,在討論組、群聊中發(fā)起多人通話。

您可以通過 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 包含當前通話的所有信息,您可以通過其中的接口,操控當前通話和獲取相關信息,在發(fā)起通話和接收到呼入的通話時會獲取到相應的通話實體。

如:接聽當前來電。

// 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/*!
 設置靜音狀態(tài)

 @param muted 是否靜音

 @return 是否設置成功

 @discussion 默認值為NO。
 */- (BOOL)setMuted:(BOOL)muted;

設置揚聲器狀態(tài)。

// RCCallSession Class/*!
 設置揚聲器狀態(tài)

 @param speakerEnabled  是否開啟揚聲器
 @return                是否設置成功
 */- (BOOL)setSpeakerEnabled:(BOOL)speakerEnabled;

開啟或關閉攝像頭。

// RCCallSession Class/*!
 設置攝像頭狀態(tài)

 @param cameraEnabled  是否開啟攝像頭
 @return               是否設置成功

 @discussion 音頻通話的默認值為NO,視頻通話的默認值為YES。
 */- (BOOL)setCameraEnabled:(BOOL)cameraEnabled;

切換前后攝像頭。

// RCCallSession Class/*!
 切換前后攝像頭

 @return 是否切換成功
 */- (BOOL)switchCameraMode;

6、獲取通話相關信息

您可以通過通話實體 RCCallSession 中獲取當前通話的相關信息。

當前的通話狀態(tài)。

// RCCallSession Class/*!
 通話的當前狀態(tài)
 */@property (nonatomic, assign, readonly) RCCallStatus callStatus;

通話的發(fā)起人和邀請者。

// RCCallSession Class/*!
 通話的最初發(fā)起人
 */@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;

7、通話狀態(tài)的回調

如果您實現并設置了 RCCallSessionDelegate,當通話狀態(tài)發(fā)生變化的時候,會回調相關接口。

您可以在 startCall 的時候傳入或者手動設置通話狀態(tài)監(jiān)聽。

    // RCCallClient Class

    /*!
     發(fā)起一個通話

     @param conversationType 會話類型
     @param targetId         目標會話ID
     @param userIdList       邀請的用戶ID列表
     @param type             發(fā)起的通話媒體類型
     @param delegate         通話監(jiān)聽
     @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

    /*!
     設置通話狀態(tài)變化的監(jiān)聽器

     @param delegate 通話狀態(tài)變化的監(jiān)聽器
     */
    - (void)setDelegate:(id<RCCallSessionDelegate>)delegate;

當通話狀態(tài)發(fā)生變化的時候,如接通、結束、對方振鈴、有人加入通話、有人掛斷、發(fā)生警告等都會進行回調。

// RCCallSession Class/*!
 通話狀態(tài)變化的監(jiān)聽器
 */@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;/*!
 對端用戶開啟或管理了攝像頭的狀態(tài)

 @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中統(tǒng)一處理通話結束的邏輯。
 */- (void)errorDidOccur:(RCCallErrorCode)error;@end

實時音視頻推送設置

詳細請參考 VoIP 推送設置文檔。

更多說明

CallLib 通話不限制最大人數。如果需要限制的話,您可以在調用 startCall 和 inviteRemoteUsers 的時候加判斷人數的邏輯。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI