最近有一款應(yīng)用很火,叫Housparty,Housparty是一款視頻群聊應(yīng)用,最近它在A(yíng)pp Store上的下載排名已經(jīng)超過(guò)了Facebook。同時(shí),有媒體稱(chēng)Houseparty已經(jīng)完成了最新一輪的投資。自己就想著模仿一個(gè)玩玩,研究了下,發(fā)現(xiàn)有個(gè)叫Agora的可以實(shí)現(xiàn)部分的功能,就想試用下。
聲網(wǎng)Agora.io是一家提供穩(wěn)定,高可用,有質(zhì)量保障的實(shí)時(shí)視頻通話(huà)和實(shí)時(shí)全互動(dòng)直播技術(shù)服務(wù)的平臺(tái),支持全平臺(tái),只需要簡(jiǎn)單集成SKD,即可讓?xiě)?yīng)用實(shí)現(xiàn)高清視頻通話(huà),和多主播實(shí)時(shí)全互動(dòng)直播。
既然已經(jīng)有了SDK,就不需要自己寫(xiě)視頻以及通信部分的代碼了,這樣寫(xiě)一個(gè)Housparty的demo就更簡(jiǎn)單了,下面以iOS平臺(tái)為例,看下如何集成Agora SDK。
環(huán)境準(zhǔn)備
本文使用的環(huán)境如下:
- XCode 8.3.1
- 最小SDK iOS 9.3
- 真機(jī)
- Swift語(yǔ)言
- 最新Agora SDK
- 申請(qǐng)AppID
先要注冊(cè)agora.io,注冊(cè)完成之后再新建一個(gè)項(xiàng)目,需要拿到對(duì)應(yīng)的App ID。后面的示例代碼需要使用該App ID。
最新的Agora SDK中有兩個(gè)文件夾:
- ./libs 中含有的是所需的庫(kù)(集成到App需要的)
- ./samples 包含Open Video Call 和 Open Live的代碼示例
需要的環(huán)境準(zhǔn)備好之后,新建一個(gè)agora項(xiàng)目,就可以開(kāi)始配置和集成Agora SDK。
添加SDK
先把Agora SDK中./libs復(fù)制到agora項(xiàng)目中的agora目錄下。再把Agora SDK添加到項(xiàng)目的Libraries中。
添加Libraries的方法:
- 選中當(dāng)前Target(agora)
- Build Phases
- Link Binary With Libraries
- 點(diǎn)擊+

這個(gè)時(shí)候出現(xiàn)的界面是添加系統(tǒng)類(lèi)庫(kù)的,選擇
Add Other ...從項(xiàng)目目錄中選中./libs添加里面的內(nèi)容到Libraries中。這樣就添加了Agora SDK。在添加
Agora SDK之后,還需要添加Agora SDK所依賴(lài)的庫(kù),參考官網(wǎng)上面demo使用的libraries,添加以下類(lèi)庫(kù):
- CoreTelephony.framework
- CoreMedia.framework
- VideoToolbox.framework
- AudioToolbox.framework
- AVFoundation.framework
- libc++.tbd
build的時(shí)候出現(xiàn)錯(cuò)誤:
Showing All Messages
"_res_9_getservers", referenced from:
agora::commons::network::get_dns_list(bool) in AgoraRtcEngineKit(libmediasdk.a-arm64-master.o)
"_res_9_ninit", referenced from:
agora::commons::network::get_dns_list(bool) in AgoraRtcEngineKit(libmediasdk.a-arm64-master.o)
"_res_9_ndestroy", referenced from:
agora::commons::network::get_dns_list(bool) in AgoraRtcEngineKit(libmediasdk.a-arm64-master.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
運(yùn)行官網(wǎng)的demo也出現(xiàn)了同樣的錯(cuò)誤,說(shuō)明類(lèi)庫(kù)沒(méi)有導(dǎo)入完整,還需要導(dǎo)入類(lèi)庫(kù)是libresolv.9.tbd。
類(lèi)庫(kù)依賴(lài)問(wèn)題比較容易出現(xiàn),另一方面也說(shuō)明沒(méi)有支持Pod的麻煩,建議Agora能盡快支持CocoaPods。
再次build又出現(xiàn)了個(gè)問(wèn)題:
ld: library not found for -lcrypto
問(wèn)題的原因是:編譯時(shí)找不到需要的鏈接庫(kù)導(dǎo)致的,解決方法:
- 選中當(dāng)前Target(agora)
- Build Settings
- Search Paths
- Library Search Paths
- 新增
"${PROJECT_DIR}/agora/libs"

另外
Agora SDK并不支持bitcode,因此需要把bitcode禁止掉,禁止bitcode的方法:
- 選中當(dāng)前Target(agora)
- Build Settings
- Build Options
- Enable Bitcode ->No

這樣就配置完成了Agora SDK的支持,下面就可以開(kāi)始使用Agora SDK了。
訪(fǎng)問(wèn)OC類(lèi)庫(kù)
Agora SDK使用的是Object-c開(kāi)發(fā)的,而我們的項(xiàng)目使用的是Swift開(kāi)發(fā)的,因此就需要在Swift中訪(fǎng)問(wèn)OC的類(lèi)庫(kù),新建一個(gè)文件命名為agora-Bridging-Header.h,在該文件中引入Agora SDK:
#import <AgoraRtcEngineKit/AgoraRtcEngineKit.h>
#import <AgoraRtcCryptoLoader/AgoraRtcCryptoLoader.h>
然后把該文件設(shè)置為Objective-C Bridging Header,設(shè)置方法:
- 選中當(dāng)前Target(agora)
- Build Settings
- Swift Compiler-General
- Objective-C Bridging Header
- agora/agora-Bridging-Header.h

這樣能在
Swift中使用Agora SDK了。在開(kāi)始調(diào)用
Agora SDK之前還要知道,Agora SDK實(shí)現(xiàn)的是一套高清視頻通話(huà)或直播系統(tǒng),除了完成集成Agora SDK的工作之外,還需要給項(xiàng)目對(duì)應(yīng)的訪(fǎng)問(wèn)權(quán)限。
權(quán)限
需要給項(xiàng)目?jī)蓚€(gè)權(quán)限才能使用Agora SDK,這兩個(gè)權(quán)限是:
- 相機(jī)
- 麥克風(fēng)
在info.plist添加這兩個(gè)權(quán)限:

具體設(shè)置的內(nèi)容為:
-
Privacy - Camera Usage Description設(shè)置為:use camera to start video call -
Privacy - Microphone Usage Description設(shè)置為use microphone to start video call
這樣完成了Agora SDK的項(xiàng)目配置,后面將繼續(xù)寫(xiě)如何使用Agora SDK,包含的功能:
- 創(chuàng)建room
- 分屏,2分屏、4分屏、6分屏
- 窗口切換
- 前后攝像頭切換
項(xiàng)目地址:https://github.com/jjz/agora-swift