摘要
為滿足業務需求而調研實時互動直播應用服務的實現方式后發現,
聲網 Agora 是提供實時互動 API 的專業服務商。開發者通過集成其SDK和簡單調用 API,可以快速創建擁有社交直播、在線教育等多種實時音視頻互動場景的應用。
本文將介紹如何在聲網平台創建賬號和測試項目,實際演示如何編譯執行Web客戶端和安卓客戶端的示例代碼,並加入到同一個直播間頻道中,進行音視頻互動。
1. 創建聲網賬號
登錄聲網官網首頁 ,點擊右上方的注冊登錄按鈕后,輸入手機號創建賬號,並輸入真實姓名,公司名,郵箱地址,密碼等相關信息,完成整個注冊流程。

注冊過程中有短信驗證碼和郵箱驗證碼的相關驗證操作,根據網站指示操作即可。盡量一次性完成所有信息的填寫和驗證,避免出現問題。

由於聲網每個月提供有一萬分鍾的測試流量,在真正確定采購聲網服務之前,不需要付費就可以進行技術調研和驗證。
2. 創建聲網直播項目
賬號創建並登錄成功后,進入到聲網控制台頁面 ,可以看到一個叫做項目列表的頁簽。

點擊頁簽中的“創建項目”,輸入項目名稱(應為要開發的互動直播應用的唯一標識),並選擇使用場景,以及實名認證方式。認證應選擇APP ID + Token方式,以符合生產環境需要。

項目創建完畢后,進入項目列表 可以找到已創建的項目。

聲網為每個創建的項目,提供了一個簡單的網頁預覽功能。

單擊“網頁演示”圖標,可以打開一個臨時的頻道頁面。


加入頻道后,可以看到一個類似於視頻會議的互動直播頁面,並出現本機的攝像頭畫面。
將鏈接復制給其他人訪問,可以達到實時音視頻互動的效果。網頁測試項目已經運行成功。
3. 創建測試頻道及訪問Token
下面將編譯執行聲網提供的Web客戶端和安卓客戶端的示例源碼,讓這兩個客戶端可以加入到一個直播頻道中,實現互動直播功能。為此需要做一些准備工作:
- 首先,需要決定一個頻道名,客戶端都要加入這個頻道;
- 其次,為了模擬生產環境的安全機制需求,頻道會設置一個訪問Token,想進入這個頻道的客戶端,必須持有合法的訪問Token。
在生產環境中,頻道名以及每個頻道的訪問Token由業務服務端動態生成並分配給每個客戶端。
為了快速實現主要功能的演示,暫時采用聲網控制台中提供的“音視頻臨時Token”功能,生成一個測試用的Token,並臨時寫入到客戶端的源碼中使用。

點擊鑰匙圖標,打開一個生成臨時Token的頁面。在這個頁面中,有兩個重要的字符串是客戶端連接該項目的依據:
- APP ID
- App證書
這兩個字符串的位置,都可以通過點擊進行復制,以后在客戶端的源碼中會用到。

在這個頁面中,輸入一個測試用的頻道名為:ch1,然后點擊“生成臨時Token”按鈕,得到如下的一個“臨時Token”字符串:

這個臨時Token的字符串可以復制,將在下面的客戶端源碼中使用到。
4. 下載客戶端示例代碼
聲網的官網中提供了很多業務場景的示例代碼,其中叫做Open Live的示例項目參考價值較大:

在這個項目的源碼中可以看到,它包含了多個平台下的客戶端的實現。
從github.com將該項目下載到本地,本文將選取下面兩個平台客戶端的源碼,進行簡單的修改和編譯執行,連入上文創建的測試頻道中,進行音視頻互動:

- 基於Node.js實現的Web客戶端 - OpenLive-Web
- 安卓客戶端 - OpenLive-Android
5. Web客戶端的運行示例
5.1 環境准備
要編譯和執行OpenLive-Web項目,首先需要在開發機上安裝Node.js的當前長期維護(LTS)版本。在Node官網可以下載到Windows、Mac及Linux等平台的安裝文件,按照官方文檔說明安裝即可。

Node源碼的編輯器或集成開發環境建議采用:
- Visual Studio Code(https://code.visualstudio.com/)
- IntelliJ Idea社區版(https://www.jetbrains.com/idea/download/)


5.2 修改源碼中的配置
使用VS Code(或者Idea)打開OpenLive-Web源碼文件夾,重命名文件夾中的“.env.example”文件為“.env”

然后編輯這個“.env”文件的內容:

在這個文件中,有兩個配置項:
- REACT_APP_AGORA_APP_ID的值設為從聲網控制台復制過來的“APP ID”;
- REACT_APP_AGORA_APP_TOKEN的值設為“臨時Token”。

因為示例代碼使用的是寫死到配置文件中的臨時Token,所以控制台中的“App證書”值暫時沒有用到。
在生產環境中,使用的是業務服務端動態生成的Token,在生成和驗證的過程中,需要用到“App證書”值。
5.3 啟動Node.js項目
npm是Node.js的包管理器,在OpenLive-Web源碼所在目錄下,執行npm install命令,可以安裝項目所需要的所有依賴包。

然后,執行npm run dev命令,啟動Web項目。

項目啟動成功后,本機瀏覽器將打開一個新頁面:http://localhost:3000/#/,基於瀏覽器的Web客戶端已成功打開。
5.4進入直播間

選擇身份為“host”以啟用攝像頭和麥克風,然后填入在聲網控制台創建的頻道名“ch1”,點擊“Start Live Streaming”按鈕,即可進入直播間。

如果在局域網內另外一台電腦上用瀏覽器訪問這個Web站點,或者采用同樣的源碼和配置啟動Web項目,則可以用同樣的方式,加入到ch1這個測試直播間中,以畫中畫的形式,達到實時音視頻互動的效果。

6. 安卓客戶端的運行示例
6.1 環境准備
為編譯執行首先需要下載並參考官方安裝說明,安裝Android Studio集成開發環境。

6.2修改源碼中的配置
Android Studio安裝成功后,打開OpenLive-Android源碼文件夾,修改/res/values目錄中的strings_config.xml文件,填入測試用的APP ID和臨時Token值:

6.3創建虛擬安卓設備
從Android Studio的Tools菜單中,打開“AVD Manager”,這是虛擬安卓設備的管理界面。如果還沒有虛擬設備,可以通過“Create Virtual Device”按鈕創建一個新的設備。

如果是創建新設備,需要選擇設備種類,具體型號,然后點擊“Next”按鈕。

然后選擇Android系統的版本為最新版11.0,API版本為30,繼續點擊Next

為了讓虛擬設備可以使用本機的攝像頭,需要改一下高級設計,點擊“Show Advance Settings”按鈕:

打開高級設置后,可以看到Camera設置,將前置攝像頭Front以及后置攝像頭Back都改為“Webcam0”,在虛擬設備中啟用本機的物理攝像頭。

在AVD Manager的列表中,將至少有一個可用的虛擬手機設備。

6.4在虛擬安卓設備上啟動應用
在Android Studio中選擇剛才創建的虛擬設備,並點擊“啟動APP”。

在虛擬設備中啟動APP后,輸入頻道名ch1,點擊“開始直播”按鈕,選擇“我是主播”,進入直播間。

可以看到本機的攝像頭的實時視頻畫面:

6.5和Web客戶端實時交互
在另一台電腦上,本地啟動Web項目或者用瀏覽器打開已啟動的Web項目地址,輸入ch1測試頻道名加入到直播間中。


此時可以看到,虛擬安卓客戶端的畫面分成了上下兩部分,兩個客戶端實現了實時音視頻互動。
7. 動態頻道及訪問Token的創建
示例代碼中,客戶端加入到特定頻道名所需的訪問Token,是寫死到源碼的配置文件中的。在生產過程中,應創建一個服務端應用,為不同的頻道名和用戶創建不同的訪問Token,並返給客戶端使用。其大致流程如下:

服務端如何生成Key,聲網也提供了各種語言版本的實現代碼, 以JAVA代碼實現為例:
package io.agora.sample;
import io.agora.media.RtcTokenBuilder;
import io.agora.media.RtcTokenBuilder.Role;
public class RtcTokenBuilderSample {
static String appId = "970CA35de60c44645bbae8a215061b33";
static String appCertificate = "5CFd2fd1755d40ecb72977518be15d3b";
static String channelName = "7d72365eb983485397e3e3f9d460bdda";
static String userAccount = "2082341273";
static int uid = 2082341273;
static int expirationTimeInSeconds = 3600;
public static void main(String[] args) throws Exception {
RtcTokenBuilder token = new RtcTokenBuilder();
int timestamp = (int)(System.currentTimeMillis() / 1000 + expirationTimeInSeconds);
String result = token.buildTokenWithUserAccount(appId, appCertificate,
channelName, userAccount, Role.Role_Publisher, timestamp);
System.out.println(result);
result = token.buildTokenWithUid(appId, appCertificate,
channelName, uid, Role.Role_Publisher, timestamp);
System.out.println(result);
}
}
可以看到,生成Token需要以下入參:
-
APP ID(業務應用在聲網平台創建的相應項目的唯一標識)
-
APP證書(聲網平台提供的一個特殊的認證用字符串)
-
要加入的直播頻道名
-
用戶ID(字符串或者整型數字,唯一標識參與直播的用戶)
-
用戶角色(決定是否可以發送音視頻)
-
當前時間(決定Token有效期)
對此,聲網文檔中有詳細說明:(https://docs.agora.io/cn/Interactive%20Broadcast/token_server?platform=All%20Platforms)
小結
多平台客戶端的互動直播應用示例已完整呈現,除了訪問Token的管理,后端可以不需要一行代碼的開發量。核心的音視頻后台功能,完全由聲網平台提供。
同時,聲網所提供的Open Live客戶端示例代碼,完整的集成了SDK等所需各項依賴,幾乎可以一鍵啟動。
因此,在聲網的基礎上,開發一個完整的互動直播的應用,難度大大降低,為業務快速上線提供了可靠的基礎。
(完)
