基於RTS超低延時直播最佳化強互動場景體驗

邊緣雲小編發表於2022-08-05

RTS 在阿里雲影片直播的基礎上進行底層技術最佳化,透過整合阿里雲播放器 SDK,支援在千萬級併發場景下節點間毫秒級延時直播的能力,彌補了傳統直播存在 3~6 秒延時的問題,確保了超低延時、低卡頓、秒開流暢的直播觀看體驗。本文介紹了基於 RTS 超低延遲直播最佳化強互動場景體驗的最佳實踐方案,並以阿里雲播放器 Aliplayer 為例,詳細介紹 RTS 超低延遲拉流接入、自動降級、排障資訊獲取等邏輯的實現,助力企業打造互動直播行業的產品競爭力。


適用場景


該方案適用於對超低延遲直播有訴求的客戶,尤其是業務中存在強互動場景直播的場景。強互動場景直播主要是指對主播和觀眾存在互動,或觀眾存在更高實時性觀看、畫面互動需求的情況,常見場景例如:

  • 教育直播:應用於大班課,可以支援超大數量規模的同學同時線上超低延時與老師互動教學。
  • 電商直播:賣家與買家實時互動答疑,交流商品資訊,互動效率提升轉化促進交易成單。
  • 體育直播:直播精彩體育、電競等賽事,讓觀眾實時瞭解現場情況,積極參與平臺彈幕、評論等互動。
  • 互動娛樂:主播可以在觀眾送禮物時及時反饋,增強與觀眾之間的互動體驗。
  • 會議直播:大型會議內容實時分享,讓分佈各地參會者保持同步的會議體驗,會上溝通更敏捷。


業務介紹


背景

某線上知識分享產品為核心的技術服務商,客戶期望能基於產品的原有普通直播 Paas 能力進行升級,降低終端使用者的直播延遲,提供更優質的使用者觀看體驗。推薦客戶底層接入 RTS 服務實現超低延遲的平臺直播解決方案,最終封裝後作為 Saas 產品能力提供給外部使用者付費接入使用,透過超低延遲的直播體驗打造其 SAAS 產品在市場上的核心競爭力。

本文圍繞著升級過程中客戶核心訴求進行展開。特別地,會對如何使用 RTS 解決傳統 Web 端使用 HLS 播放存在高延遲的場景進行重點介紹。


業務場景

傳統直播升級 RTS 超低延遲直播過程中,僅涉及底層對接變更,無需改造終端使用者的功能使用習慣,直播核心功能訴求主要考慮推拉流側使用者場景:

  1. 主播推流:無連麥場景下直接推流 / 連麥場景平臺合流後轉推流。
  2. 觀眾拉流:在 HTML5 頁面中直接播放內容 / 在 HTML5 頁面中參與連麥並播放內容。


當前解決方案及痛點


主要場景

推流部分透過 rtmp 直推標準直播或者 webrtc 採集後合流轉推標準直播實現;而拉流時,為了滿足使用者無需安裝app即可便捷觀看的需求,需要重點考慮移動端的瀏覽器頁面對媒體流的相容性問題,相較 FLV 和 RTMP 協議在 HTML 5 頁面中不甚理想的表現,客戶優先考慮使用 HLS 格式進行拉流。


未接入 RTS 時的核心痛點

由於 HLS 協議特性,預設 Web 端觀看直播畫面延遲在 10s 以上,儘管傳統直播中,客戶可以在直播延遲中配置 HLS 為低延遲,但此時拉流端的延遲也仍在 3-6s 左右,對存在強互動需求場景的體驗並不友好。

除 HLS 協議自身導致的高延遲痛點外,Saas 直播廠商在未接入阿里雲標準直播前,還會額外面臨以下幾個痛點:


  • 自建媒體流處理服務需要研發和維護成本,需要豐富的雲上媒體處理能力,滿足在音影片處理上的需求。
  • 直播觀眾分散,使用者觀看體驗受到網路最後一公里鏈路的質量影響較大,需要海量節點滿足分發需求。
  • 選擇 Paas 服務時,需要其具備強大的產品 API 管理能力,以便其產品能定製業務邏輯,完成快速迭代。


當前標準直播方案架構圖

8.5.1.png

當前業務整體架構圖

8.5.2.png

RTS 接入流程詳解


標準直播升級到 RTS 過程中,主要需要改造的部分為

  1. 播放器:客戶在網頁端播放時,需要使用阿里雲播放器,或者透過客戶自有播放器對接 Web RTS SDK。
  2. 直播服務端轉碼:原始推流內容進行 RTS 轉碼模板處理,滿足播放端相容性需求。
  3. 播放地址生成:在業務伺服器介面生成地址時,需要構造 RTS 地址格式、推薦一併返回播放器降級地址。


接入RTS後直播方案架構圖

8.5.3.png


實施步驟


準備工作

在正式開始接入前,預設您已經在控制檯完成開通直播服務、新增推流域名和播流域名、配置CNAME、關聯推流域名和播流域名,並開通了超低延時直播功能等基礎準備工作。

在本案例的業務升級流程中,覆蓋了常見場景下的推薦步驟及功能說明,其中非必要的改造會在步驟中進行標註,可根據實際業務訴求選擇性應用。


步驟一:RTS 推流地址及播放地址構造


構造推拉流地址前,需要準備好直播流的推流域名、播流域名、AppName(應用)、StreamName(直播流)、鑑權串(如有)。以常用的RTMP推流,RTS拉流為例,基礎拼接規則如下:

推流地址:rtmp://demo.aliyundoc.com/app/stream?auth_key={鑑權串}

構造規則:推流協議://推流域名/AppName(應用)/StreamName(直播流)? 鑑權串

拉流地址:artc://example.aliyundoc.com/app/stream?auth_key={鑑權串}

構造規則:artc://播流域名/AppName(應用)/StreamName(直播流)? 鑑權串


步驟二:RTS 服務端轉碼配置


由於原生瀏覽器對 WebRTC 的限制,在 Web 端播放 RTS 流時存在以下限制:

  • 影片編碼:不支援包含 B 幀(會出現畫面跳躍)。
  • 音訊編碼:不支援 AAC 編碼(會出現噪音)。


相對的,在推流時推薦使用

  • 影片編碼:H.264 編碼的 baseline 級別(預設不含B幀)。
  • 音訊編碼:OPUS 編碼。


如果無法控制推流內容的編碼,或者僅無法支援 OPUS 的音訊編碼直推,可以配置轉碼模板來相容。不同轉碼配置對延遲影響略有不同,可參考如下配置說明進行選擇:


  1. 登入 ,在控制檯左側導航欄,進入域名管理頁面,選擇需要配置的播流域名,單擊域名配置。
  2. 單擊模版配置 > 轉碼模板配置,單擊RTS轉碼頁籤,單擊新增。
  3. 選擇模板型別


模板型別

使用場景

模板優勢

原畫模板

僅需要去 B 幀或 OPUS 轉碼,推流編碼不含 B 幀時僅開啟 OPUS 轉碼即可

原畫僅 OPUS 轉碼時延遲最優

窄帶高畫質™模板

同等影片質量下,最高節省 20-40%頻寬

節省頻寬,頻寬成本最優

標準轉碼模板

傳統轉碼能力,對壓縮比例和延遲無極致需求。

純音訊轉碼模板

刪除影片只輸出 OPUS 音訊流

自動去影片畫面


在當前客戶案例中,客戶優先考慮延遲因素,因此轉碼模板選擇原畫模板,僅開啟 OPUS 轉碼,減少影片處理過程中的轉碼耗時,配置示例如下。

8.5.4.png

模板配置完成後,轉碼流的播放地址需要在原播放地址的基礎上進行修改。如下圖所示,建立模板 ID 中填寫 example 時,結尾會自動補全字尾-RTS ,即此時模板ID全名為 example-RTS 。


注意:配置轉碼後,轉碼流的播放地址對應為

轉碼流地址:artc://example.aliyundoc.com/app/stream _example-RTS?auth_key={鑑權串}

構造規則:artc://播流域名/AppName(應用)/StreamName(直播流) _轉碼模板ID? 鑑權串

特別提醒:如播放域名配置鑑權,鑑權串需要針對已拼接轉碼模板ID的地址進行籤算生成。


步驟三:RTS Web播放器對接


RTS超低延時直播以WebRTC信令互動方式為基礎,需要 HTML5 播放器播放時完成信令互動及媒體資訊的編解碼,RTS拉流播放時有三種選擇:

  1. 整合阿里雲播放器SDK(推薦),建議使用V2.9.23及以上版本,接入週期最短。
  2. 其他播放器整合Web RTS SDK作為外掛,適用於強依賴其他播放器的場景。
  3. 客戶自研播放器對接開放信令標準,需要具備WebRTC基礎的開發人員接入。


當前案例中,客戶使用阿里雲播放器 Aliplayer 完成 RTS 拉流接入、拉流自動降級、排障資訊獲取等邏輯的實現。阿里雲播放器已經整合了 Web RTS SDK,可以直接用於播放 RTS 流,並且內建了 RTS 自動降級邏輯,只需要提供一個降級地址即可使用,能夠實現快速業務上線。


當使用者播放時使用的瀏覽器不支援 WebRTC ,或者使用者端透過 RTS 拉流失敗時,為了保證業務的可用性,播放頁面可以選擇降級至 HLS、FLV 播放,目前主要支援的降級場景包括:

  • 瀏覽器不支援 WebRTC 或 H.264。
  • 信令請求失敗(拉流地址無效、HTTPS配置無效、RTS配置無效等原因)。
  • 起播超時或中途斷流。


以下為阿里雲播放器 Aliplayer 示例程式碼,實現了基礎播放的邏輯(含降級),示例程式碼中的關鍵欄位說明:

  • source:指定RTS播放地址(填寫步驟二生成的即可)。
  • rtsFallbackSource:指定降級地址,如HLS拉流地址。
  • skipRtsSupportCheck:是否跳過客戶端瀏覽器版本相容檢查,推薦保持false即可。


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="IE=edge" >
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
<title>Aliplayer Rts Demo</title>
<link rel="stylesheet" href="
<script type="text/javascript" charset="utf-8" src="
</head>
<body>
  <div class="prism-player" id="player-con"></div>
<script>
  /**
   * 播放器預設播放 source 提供的 rts 拉流地址,如果失敗,則會自動降級至 rtsFallbackSource 提供的拉流地址(如 HLS 地址)。
   * 可能的降級場景包括:
   * 1. 瀏覽器不支援 RTS,直接降級
   * 2. RTS 信令請求失敗(拉流地址無效、https配置無效、RTS配置無效等),直接降級
   * 3. RTS 起播超時或中途斷流,按自定義策略重試失敗後降級
   **/
  // 更多播放器配置請參考 
  var options = {
    "id": "player-con",
    "source": "RTS播放地址",
    "rtsFallbackSource": "降級地址,如HLS",
    "width": "100%",
    "height": "500px",
    "autoplay": true,
    "isLive": true,
    "playsinline": true,
    "skipRtsSupportCheck": false, // 對於不在 https://help.aliyun.com/document_detail/397569.html 中的瀏覽器,可以傳 true 跳過檢查,強制使用 RTS(有風險,需要自測保證)
    /**
     * RTS 拉流超時會預設重試
     * 以下兩個引數用來控制降級之前的重試策略,比如 3000 毫秒超時,重試一次,如果再拉不到流就降級,那麼總共等待 6000 毫秒降級
     **/
    // RTS 多久拉不到流會重試,預設 3000 ms
    // rtsLoadDataTimeout: 2000,
    // RTS 拉不到流重試的次數,預設 5,此引數建議設為 1,即重試 1 次後降級,可以減少降級等待時間
    liveRetry: 1,
  };
  var player = new Aliplayer(options, function () {/* player ready */});
  // 降級時會觸發此事件
  player.on('rtsFallback', function(event) {
    console.log('[EVENT]rtsFallback', event.paramData);
    // event.paramData.reason 降級的原因
    // event.paramData.fallbackUrl 降級到的地址
  })
  player.on('error', function(event) {
    console.log('[EVENT]error', event.paramData);
  })
</script>
</body>


步驟四:低延遲推流配置


透過 RTMP 協議推流時,需要控制推流資料的關鍵幀間隔(GOP),GOP值越大,拉流延遲越高,推薦 GOP 設定為 1s。


以 OBS 軟體推流為例,需要在推流軟體的輸出設定中,設定以下影片編碼引數值。


  • 輸出模式:高階
  • 關鍵幀間隔(秒,0=自動):1
  • CPU 使用預設(高=較少的CPU佔用):veryfast
  • 配置(Profile):baseline (去除B幀)
  • 微調(Tune):zerolatency


8.5.5.png

輸出引數配置完成後,推流地址正確填寫即可開始推流。


8.5.6.png


  • 服務:選擇自定義。
  • 伺服器:輸入已經生成的鑑權推流地址,例如:rtmp://demo.aliyundoc.com/app/stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************。
  • 串流金鑰:串流金鑰為空。


步驟五:頁面播放測試及延遲觀測

完成推流和播放器對接後,可以在頁面播放器中手動輸入播放地址,或從業務後端介面獲取 RTS 播放地址進行播放。


延遲效果演示


步驟六:H5 頁面播放時獲取 TraceID


在傳統直播中遇到延遲高、卡頓或其他問題需要提交售後排障工單時,往往需要使用者協助採集多種客戶端資訊,排障效率較低,而在 RTS 接入直播時,我們只需捕獲信令互動階段中的traceid資訊,即可提供給工程師結合問題現象進行問題分析。

該步驟為可選步驟,為了線上業務在排障場景中的便捷性和資訊精準度,推薦作為接入改造步驟之一。以阿里雲播放器 Aliplayer / 其他播放器整合 RTS SDK 接入兩種場景為例,提供了排障資訊 TraceID 的獲取 Demo。


1.透過阿里雲播放器 Aliplayer 播放


需要透過 player._rts.traceid 主動獲取,使用者可以在出現卡頓時選擇上報資訊。

示例程式碼:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="IE=edge" >
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
<title>Aliplayer Online Settings</title>
<link rel="stylesheet" href="
<script type="text/javascript" charset="utf-8" src="
</head>
<body>
<div class="prism-player" id="player-con"></div>
<button id="trace">獲取TraceId</button>
<script>
var btn = document.getElementById('trace');
var player = new Aliplayer({
  "id": "player-con",
  "source": "RTS拉流地址",
  "width": "100%",
  "height": "500px",
  "autoplay": true,
}, function (player) {
    console.log("The player is created");
  }
);
btn.addEventListener('click', function() {
  // 獲取 traceId,請使用 aliplayer 2.9.22 及以上版本
  var traceId = player._rts.traceid;
  console.log('traceId', traceId)
})
</script>
</body>


2.透過其他播放器整合RTS SDK接入


RTS SDK 可以透過註冊 customReporter 函式獲取所有訊息,當 msgid 為126即訂閱成功時,可以獲取 TraceID 。


示例程式碼:

AliRTS.createClient({
  customReporter: (params) => {
    const msgIds = [126/* 訂閱成功 */, 220/* 推流成功 */];
    if (msgIds.includes(Number(params.msgid))) {
      const args = JSON.parse(params.args);
      const traceId = args.tcid;
      console.log('traceId', traceId);
    }
  }
})


RTS超低延遲直播方案優勢


優勢一:自助接入便捷

無論直接接入阿里雲 RTS ,或是基於阿里雲標準直播升級為 RTS ,技術對接流程均支援自助化的極簡操作,1周可完成業務的接入到上線。


優勢二:超低延遲的多平臺支援

端到端延時從10秒以上降低至百毫秒,且支援大部分主流平臺播放。

Native端:相容 iOS、Andriod、Mac、Windows 平臺。

Web端:終端相容率大於94%,開放 WebRTC 信令自研接入規範。


優勢三:抗弱網能力

從 TCP 協議升級至 UDP 協議,疊加媒體特性,消除視窗阻塞和延時應答,並獲得更強的抗卡頓能力,在丟包30%的情況下可以流暢播放。


優勢四:提供高可用、靈活降級方案

服務端具備完善的推拉流全鏈路監控及告警能力,客戶端支援 RTS 拉流失敗或個別瀏覽器無法相容時自動降級,從客戶端和服務端雙重對業務高可用性進行保障。


優勢五:海量節點提供高併發支援

超低延時直播複用 CDN 節點架構,透過全球2800+節點提供服務。經過實踐檢驗的千萬級高併發影片雲直播技術,有效提升私域流量的商業轉化。


優勢六:強大轉碼能力

直播服務端轉碼配置極簡,觸發便捷,滿足對多位元速率、不同解析度、不同編碼的使用者需求。阿里雲獨有的窄帶高畫質™ 特性,保證畫質的同時降低位元速率,整體上幫助使用者降低成本,同等影片質量下最高可節省20%~40%頻寬。


優勢七:豐富API可對接管理

提供 137 個豐富靈活的API介面支援,滿足業務全面訴求。客戶支援 StreamID 流維度用量統計,結合 RTS 及普通直播的域名用量統計,可以精確統計各流的用量資料,便於使用者統計下行業務具體用量。


常見問題


如何解決部分安卓手機QQ瀏覽器無法推拉流?

部分安卓手機(如 vivo iQOO)安裝QQ瀏覽器後首次開啟可能無法拉起X5核心,導致WebRTC相容問題推拉流失敗(報錯:Failed to execute 'setRemoteDescription' on 'RTCPeerConnection’)。如果遇到該場景請按照以下操作確保X5核心初始化:

  • 連線WIFI網路。
  • 重新整理當前頁面並等待大約30秒。
  • 重啟瀏覽器,再次訪問頁面即可恢復正常。


為什麼部分瀏覽器不支援Web RTS SDK?

對於Web RTS SDK暫不支援的瀏覽器,主要有以下原因:

  • 瀏覽器未實現WebRTC相關API,或實現有缺陷(如IE瀏覽器、UC瀏覽器)。
  • 瀏覽器支援WebRTC API,但不支援H.264編碼,僅支援VP8(如部分安卓手機系統自帶瀏覽器)。



更多邊緣雲產品資訊歡迎關注公眾號【阿里雲 Edge Plus】


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70018969/viewspace-2909283/,如需轉載,請註明出處,否則將追究法律責任。

相關文章