1. 程式人生 > 其它 >基於[聲網]開發互動直播應用的技術調研

基於[聲網]開發互動直播應用的技術調研

為滿足業務需求而調研實時互動直播應用服務的實現方式後發現,聲網 Agora 是提供實時互動 API 的專業服務商。開發者通過整合其SDK和簡單呼叫 API,可以快速建立擁有社交直播、線上教育等多種實時音視訊互動場景的應用。 本文將介紹如何在聲網平臺建立賬號和測試專案,實際演示如何編譯執行Web客戶端和安卓客戶端的示例程式碼,並加入到同一個直播間頻道中,進行音視訊互動。

摘要

為滿足業務需求而調研實時互動直播應用服務的實現方式後發現,

聲網 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原始碼的編輯器或整合開發環境建議採用:

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等所需各項依賴,幾乎可以一鍵啟動。

因此,在聲網的基礎上,開發一個完整的互動直播的應用,難度大大降低,為業務快速上線提供了可靠的基礎。

(完)

--------------
路漫漫其修遠兮