福利來了【乾貨】融雲音視訊開發 iOS CallKit 開發指南
iOS CallKit 開發指南
簡介
CallKit
是融雲音視訊通話功能的 UI 介面 SDK。包含了單人、多人音視訊通話的介面的各種場景和功能。您可以快速的整合 CallKit
來實現豐富的音視訊通話介面,並進行自己的
UI 定製開發。同時我們開源了 CallKit
,您可以根據您的需要去使用。
使用說明
由於底層引擎技術不同,2.6.0 之後的音視訊 SDK 與 2.6.0 之前的 SDK 中的 VoIP 不能互通。
音視訊 SDK 為商用收費功能,之前的 SDK 中的 VoIP 為免費測試功能,如果您還想使用之前的 VoIP,可以使用 2.5.2 版本。
整合說明
匯入 SDK
有兩種方式可以將 SDK 匯入您的專案中:
- 通過
CocoaPods
管理依賴 - 手動匯入 SDK 並管理依賴
使用 CocoaPods 匯入 SDK
1、 Cocoapods 的安裝、使用,可以參考IM SDK - 下載與匯入SDK文件。
2、 使用 CocoaPods 匯入融雲 SDK
在您的工程根目錄下新建一個 Podfile 檔案,在檔案中輸入以下內容。(在此以 2.8.0 版本為例,其中 “MyApp” 為自己工程名)
target 'MyApp' do
pod 'RongCloudIM/IMLib', '2.8.0'
pod 'RongCloudIM/IMKit' , '2.8.0'
pod 'RongCloudIM/CallLib', '2.8.0'
pod 'RongCloudIM/CallKit', '2.8.0'
end
然後在終端中執行以下命令:
pod install
完成後,CocoaPods 會在您的工程根目錄下生成一個 .xcworkspace
檔案。您需要通過此檔案開啟您的工程,而不是之前的 .xcodeproj
。
關於融雲 IM CocoaPods 功能模組的介紹和使用說明,可以參考說明文件。
如果您使用的是2.8.0之前的SDK,請參考知識庫文件
手動匯入 SDK
1、 下載 SDK
您可以到融雲官方網站下載 SDK。
2、 融雲 IM SDK
是 Call
SDK
的基礎。使用 CallKit
或 CallLib
,必須同時整合使用融雲 IM
SDK
。 手動匯入 IM SDK,可以參考 IM SDK - 下載與匯入文件。
SDK 檔案說明:
檔案 | 說明 | 注意事項 |
---|---|---|
RongCallKit.framework |
CallKit的framework 庫 | 使用 CallKit 必須匯入 |
RongCallLib.framework |
CallLib的framework 庫 | 使用 CallLib 與使用 CallKit 都必須匯入 |
AgoraRtcEngineKit.framework |
通話引擎 | 必須匯入,否則通話功能將無法使用 |
3、 手動集成了融雲 SDK 之後,您需要在您的工程中匯入 RongCallLib.framewrok、 RongCallKit.framewrok、AgoraRtcEngineKit.framework 以及系統庫 CoreMotion.framework、VideoToolbox.framework、libresolv.tbd。
4、 在 Xcode 專案 “Build Settings -> Other Linker Flags” 中,增加"-ObjC"。
快速整合
使用融雲通話之前,必須先初始化 SDK 和連線伺服器,詳細內容可以參考 IMKit SDK 整合文件。
發起通話
使用 CallKit 可以通過兩種方式發起通話:
- 在聊天介面輸入擴充套件的加號內,點選語音通話/視訊通話按鈕直接傳送通話。
-
呼叫 RCCall 類中的以下方法發起通話。
-
發起單人通話
// RCCall Class
/*!
發起單人通話
@param targetId 對方的使用者ID
@param mediaType 使用的媒體型別
*/
- (void)startSingleCall:(NSString *)targetId
mediaType:(RCCallMediaType)mediaType;
- 選擇成員併發起多人通話
// RCCall Class
/*!
選擇成員併發起多人通話
@param conversationType 會話型別
@param targetId 會話目標ID
@param mediaType 使用的媒體型別
@discussion 此方法會先彈出選擇成員介面,選擇完成後再會發起通話。目前支援的會話型別有討論組和群組。
@warning 如果您需要在群組中呼叫此介面發起多人會話,需要設定並實現groupMemberDataSource。
*/
- (void)startMultiCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
mediaType:(RCCallMediaType)mediaType;
需要注意的是,如果您需要在群組中呼叫此介面發起多人會話,需要設定並實現 groupMemberDataSource
。SDK 在選擇群組成員的時候,會呼叫
getAllMembersOfGroup:result:
介面獲取群成員列表並顯示。
- 直接發起多人通話
// RCCall Class
/*!
直接發起多人通話
@param conversationType 會話型別
@param targetId 會話目標ID
@param mediaType 使用的媒體型別
@param userIdList 邀請的使用者ID列表
@discussion 此方法會直接發起通話。目前支援的會話型別有討論組和群組。
@warning 您需要設定並實現groupMemberDataSource才能加人。
*/
- (void)startMultiCallViewController:(RCConversationType)conversationType
targetId:(NSString *)targetId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList;
通話接聽
當收到一個通話呼叫的時候,
-
當 App 處於前臺狀態的時候,SDK 會自動彈出通話介面。
-
當 App 處於後臺活動狀態的時候,SDK 會彈出本地通知並播放鈴聲。
-
當 App 處於後臺暫停狀態的時候,如果您的 App 開啟了 VoIP 後臺執行模式並在開發者後臺上傳了 VoIP 推送證書,這時候 App 會在後臺啟動並彈出本地通知;否則,App 會收到遠端推送提醒,VoIP Push 設定請參考 VoIP 推送設定文件。
關於 App 執行狀態的更多資訊,您可以參考 SDK 的執行狀態文件。
會話是否支援發起通話
目前,SDK 支援在單聊發起單人通話,在討論組、群聊中發起多人通話。
您可以通過 RCCall 類的以下介面查詢當前會話的通話能力。
// RCCall Class
/*!
當前會話型別是否支援音訊通話
@param conversationType 會話型別
@return 是否支援音訊通話
*/
- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;
/*!
當前會話型別是否支援視訊通話
@param conversationType 會話型別
@return 是否支援視訊通話
*/
- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;
設定多人最大通話人數限制
CallKit
預設音訊通話最大人數為 20 人,視訊通話最大人數為
9 人。
如果不符合您的需求,您可以通過 RCCall
以下介面設定最大人數。
// RCCall Class
/*!
音訊通話支援的最大通話人數
*/
@property (nonatomic, assign) int maxMultiAudioCallUserNumber;
/*!
視訊通話支援的最大通話人數
*/
@property (nonatomic, assign) int maxMultiVideoCallUserNumber;
建議您在設定最大人數的時候,考慮移動裝置的頻寬(主要是多路視訊通話)和UI互動友好。CallLib
的話音訊和視訊人數預設均沒有限制。
UI 介面說明
CallKit
中預設實現了一套較為通用的通話 UI,包含單人音視訊通話介面 RCCallSingleCallViewController
、多人音訊通話介面RCCallAudioMultiCallViewController
、多人視訊通話介面 RCCallVideoMultiCallViewController
、最小化的通話介面 RCCallFloatingBoard
、聊天介面的通話提示 RCCallDetailMessageCell
、RCCallTipMessageCell
等。
如果能滿足您的需求,您可以基於 CallKit
直接開發,如果您的需求較為特殊,可以直接使用 CallLib
並實現相關的介面UI,您也可以向我們商務索取CallKit
原始碼以供參考。