聲網 PK 連麥功能 Android 入門實踐 | 掘金技術徵文

朝陽元年發表於2019-04-21

聲網 PK 連麥方案場景主要是針對 CDN 推流拉流場景設計。

使用場景

聲網 PK 連麥場景針對 CDN 推流場景設計,主要涉及單主播模式和雙主播 PK 模式兩種模式的切換,此外還有可選的觀眾模式。

單主播模式中,主播可以採用Agora SDK 或者第三方推流工具(比如 ijkplayer)推流到 CDN。觀眾通過 CDN 播放器拉取主播視訊流觀看直播。

雙主播 PK 模式中,兩個主播退出 CDN 推流並同時加入同一個聲網頻道,各自在聲網服務端設定雙主播的合圖(setLiveTranscoding),並通過聲網提供的推流介面(addPublishStreamUrl)將合圖後的流推送到原先的 CDN 地址。各自的 CDN 觀眾看到兩個主播開始 PK。

由於兩個 PK 主播各自的 CDN 推流地址未發生改變,CDN 觀眾端不需要切換 CDN 拉流地址。只要任意一個主播離開聲網 PK 頻道,另一主播也退出 PK 模式返回普通模式。

對於可選的觀眾模式,觀眾一般使用第三方 CDN 播放器(比如 ijkplayer)拉取視訊流觀看直播,本示例程式中並不包含觀眾模式。

官方文件中給出了聲網 PK 連麥方案的架構圖:

聲網 PK 連麥功能 Android 入門實踐 | 掘金技術徵文

實現程式碼和 apk 體驗

官方提供了 Android 平臺的實現程式碼,你可以在 GitHub 上下載並進行測試,也可以基於該程式碼進行擴充套件。

當然,官方也提供了已經實現的 apk 檔案

執行 Demo

首先,我們可以通過官方給出的程式碼連結下載 Demo:github.com/AgoraIO/ARD…

聲網 PK 連麥功能 Android 入門實踐 | 掘金技術徵文

下載後進行解壓,注意關注一下 gradle 和 gradle tools 的版本號。注意一下程式碼配置,這個位置要細緻檢查,防止出錯。

sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/jniLibs']
//            jniLibs.srcDirs = ['../../../libs']
        }
    }
複製程式碼

當然,我們想要執行示例程式,需要先去聲網註冊賬號,建立自己的測試專案,獲取到 AppID。

你也可以在 視訊通話/視訊直播 SDK 頁面進行 SDK 的下載:

聲網 PK 連麥功能 Android 入門實踐 | 掘金技術徵文

之後主要有以下三個步驟:

  1. 將 AppID 填寫進 PKConstants 的 MEDIA_APP_ID以及SIGNALING_APP_ID 中

  2. 解壓視訊通話/視訊直播 SDK 包,將其中的 jar 和 so 複製到專案對應資料夾下。

  3. 最後使用 AndroidStudio 開啟專案,連線 Android 測試裝置,編譯並執行。

示例程式主要包括以下一些功能

  1. 開始直播:在首頁輸入直播頻道名,點選“開始直播”按鈕,進入直播房間,開始直播和 CDN 推流;

  2. 發起PK:在房間內點選“PK”按鈕,並輸入“PK房間名”進入PK(需要兩個主播同時輸入相同的“PK房間名”以進入同一房間);

  3. 退出PK:點選“退出PK”按鈕,退出PK模式,返回單主播模式;

  4. 退出房間:點選右上角“離開”按鈕,離開直播房間;

  5. 拷貝拉流地址:在直播中可點選“拷貝”按鈕,拷貝拉流地址,使用 CDN 播放器(如 VLC)

對於直播拉流,給大家幾個測試地址:

  • 香港財經:rtmp://202.69.69.180:443/webcast/bshdlive-pc
  • 韓國朝鮮日報:rtmp://live.chosun.gscdn.com/live/tvchosun1.stream
  • 湖南衛視:rtmp://58.200.131.2:1935/livetv/hunantv

整合注意事項

  1. 單主播模式與 PK 模式切換時一定要先停止原先的推流,再重新開始推流,否則會推流失敗

  2. 觀眾一般需要感知主播模式的改變來更新UI,一般是通過信令通知觀眾,由於信令和 CDN 視訊流存在時間差(CDN 推流一般存在數秒的延遲),為了更好的使用者體驗,可以在切換模式時做一個延時動畫,讓使用者忽略這個時間差。也可以通過 CDN 播放器的特有回撥(如視訊尺寸改變)來感知主播狀態的變化。

整合時,我就使用了簡單 Channel Name 的方式登入,怎麼都不行。後來網上查詢解決方案,發現加入頻道正式應用中一般採用 Token 模式。

private void joinChannel() {
    // 這個null需傳入Token
    mRtcEngine.joinChannel(null, "demoChannel1", "Extra Optional Data", 0); // if you do not specify the uid, Agora will assign one.
}
複製程式碼

此處是看了這篇文章找到的問題:blog.csdn.net/zmm911zmm/a…

以上就是我的聲網 PK 連麥功能 Android 入門初體驗。下面我列一些學習資料,希望對大家有幫助。

參考學習資料


Agora SDK 使用體驗徵文大賽 | 掘金技術徵文,徵文活動正在進行中

相關文章