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


摘要

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

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

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

(完)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM