【直播串流教學】Google Cloud – Live Stream API 介紹與實作

【直播串流教學】Google Cloud – Live Stream API 介紹與實作

直播串流技術在疫情影響下蓬勃發展,Google Cloud 也針對自架直播串流門檻高的痛點推出操作簡易的 Live Stream API。一起跟著 Cloud Ace 的專業架構師認識這項服務的功能和導入教學吧。

在直播串流已不侷限於網紅直播主圈的現在,幾乎所有活動都轉而使用線上直播服務。從直播帶貨、運動賽事及演唱會轉播,再到線上講座,多領域的應用讓各種直播串流技術應運而生。而誕生於這波浪潮中的 Google Cloud – Live Stream API (以下簡稱 Live Stream API )不僅提供 Platform as a Service(PaaS)的無伺服器架構,更因為搭載於 Google 全球網路基礎設施上,讓使用者免除架設與維運困擾。而無需因使用量變化而擔心擴展速度或資源浪費的特點,也有效減少了不必要的費用,下面就讓我們一起認識這項服務吧。

直播串流教學:Google Cloud – Live Stream API 介紹

Live Stream API 可將直播訊號轉碼為即時串流(Real-time streaming)格式,支援適用於多個設備平台,且基於 HTTP 的動態自適應串流協議 (DASH/MPEG-DASH) ,和 HTTP 即時串流協議(HLS)。

Google Cloud - Live Stream API 直播架構圖
截圖自:Google Overview of the Live Stream API
©2022 Google

我們可透過 REST 請求或其他多種語言的 Google Cloud 套件操作 Live Stream API。而輸入端點可以是 SRT 或 RTMP 協定,經轉碼、輸出成 HLS 或 DASH 協定輸出流的通道資源。Live Stream API 創建的輸出流會保存到 Cloud Storage Bucket,我們可將 Cloud Storage Bucket 配置到 Cloud CDN 的後端,達到節省資源費用及降低訊號至觀看者間延遲的效果。

直播串流教學:Google Cloud – Live Stream API 實作

Live Stream API 提供高可用性的架構,而本次將示範使用帶有備援的架構。以下實作的主信號為 SRT;備援信號為 RTMP。輸出則使用雙訊號(DASH、HLS),並包含多解析度(1080p、720p)輸出,最後再由 Cloud CDN 優化使用者觀看體驗。

Google Cloud - Live Stream API 實作架構圖

實作步驟一:環境準備

首先我們需要到 Google Cloud Marketplace 搜尋 Live Stream API 並點選 Enable,稍等一下就會自動轉跳到監控管理頁面(圖1)。此監控頁面除了通道狀態外,還詳列了 Quotas 的限制與 COST 的費用(圖2)。Quotas 限制每個專案單一地區通道數量,如要擴增需額外向 Google 提出申請。 接著只要進到 Cloud Storage 設置一個 Standard 模式的 Bucket ,地區選擇欲建置直播通道的區域即可(圖3)。

實作步驟二:建立直播通道

本篇實作將以 REST API 進行,如欲使用 C# 或 Python 等其他程式語言請參考 Google Cloud 的建置範例文件。以下為 Live Stream API 實作會使用到的參數,都準備好後就可以開始操作 API 了。

Live Stream API 實作所需參數
PROJECT_ID:Google Cloud Project number 或使用 Project name 也可以
LOCATION:創建通道的位置。支援地區請參照 Live Stream API locations
INPUT_ID:輸入端點自定義名稱
CHANNEL_ID:頻道自定義名稱

建立 Input Endpoint

建立 Input Endpoint 的程式碼請參考: 1_create_inputendpoint.sh

設定相關參數及 json 檔案後,即可透過 curl POST 發送建置請求。但此次由於會建立備援架構並使用不同協定,因此需創建兩個 json 並發送兩次 POST 請求來分別帶入不同的 json,待請求送出後取得 operation 參數就代表 Input Endpoint 已建置完成!

截圖自:Google Cloud Shell 頁面
©2022 Google

在上圖最下方的紅框中我們發現 done 顯示為 false,但這部分不須擔心。因為根據官方文件內容,false 表示操作仍在進行中,一點時間後透過 operation 參數再次確認便會發現 done 狀態已為 true 且沒有 error 訊息。但如果有,則需排除問題才能進行下個步驟。

Live Stream API Check Endpoint_教學圖
截圖自:Google Cloud Shell 頁面
©2022 Google

查詢 Input Endpoint

查詢 Input Endpoint 的程式碼請參考: 2_check_inputendpoinrt.sh

如下圖所示,使用 curl GET 指令可直接獲得所有 Input Endpoint 的 SRT 或 RTMP URI。 這兩條 URI 可先複製起來,最後進行直播發送時會用到。

截圖自:Google Cloud Shell 頁面
©2022 Google

建立 Channel

建立 Channel 的程式碼請參考:3_create_channel.sh

在此步驟中,Channel data json 內有許多細項可讓使用者設置,大家可依需求自行設定。若沒有那麼多自訂需求,以下為一定要設置的區塊和設定範例,直接按照當中的內容設定也能成功建立 Channel。

Channel data json 的必要設置
inputAttachmentsInput Endpoint 相關資訊
output檔案輸出至 Bucket 的 gs:// 路徑
elementaryStreamsChannel 相關參數設置。如影片畫質、畫面更新率、位元率等參數,以及音訊解碼器和位元率等參數
muxStreamsOutput Stream 的多工(Multiplexing)參數
manifests輸出檔案名稱、類型和 segments 參數

開啟 Channel

開啟 Channel 的程式碼請參考: 4_start_channel.sh

透過 curl Get 指令我們會發現 Channel 建置完成後,預設狀態為 STOPPED,需執行 start 指令才能啟用。執行 Start Channel 後再去 check Channel 會發現 streamingState 狀態已變為 AWAITING_INPUT,表示通道已建立完成,可以準備發送直播訊號了。這邊需特別注意的是 Channel 會依各頻道的啟用時間長度與解析度計算費用,計費詳情請參考 Live Stream API pricing

實作步驟三:傳送與觀看直播訊號

分別使用 OBS 與 ffmpeg 傳遞 srt 與 rtmp 訊號的直播成果如下方影片所示。影片中的效果為 Primary input 與 Backup input 同時傳遞訊號,當 Primary input 訊號中斷後,Web Demo 自動切換為 Backup input 訊號。當 Primary input 訊號恢復後,Web Demo 再自動轉為呈現 Primary input 的畫面。

直播串流教學_示意圖
示範影片來源:Google Cloud Tech

而如下圖所示,當 input Endpoint 接收到訊號時,我們可從 Storage Bucket 上看到 HLS 與 DASH 分片檔的主檔 m3u8 與 mpd ,其他切片檔則會被放在資料夾裡面。

Google Cloud Storage_操作教學圖
截圖自:Google Cloud Platform Console 頁面
©2022 Google

最後在影片在發布前,還須進行以下兩個步驟才算完成設定。

影片發布前的最終設定
1. Storage Bucket 要設為 Public,權限設定授予 allUsers 使用者 Storage object Viewer 的權限
2. 在 Cloud Storage Bucket 上啟用跨域資源共享(CORS)

進階實作:添加 CDN 功能

首先在 Cloud CDN 功能頁面上建立一個新的 Origin,Type 選擇 Backend bucket 並指定到我們之前在 Cloud Storage 所建立的 bucket,接著再設置一個 Load Balancer Name 如下圖所示。

創建 Cloud CDN_教學圖
截圖自:Google Cloud Platform Console 頁面
©2022 Google

Cloud CDN 建置完成後,可以到 Load Balancing 頁面取得我們的 IP。由於此次沒有設定 SSL 憑證,所以使用 VLC 工具做展示。 從圖片我們可以觀察到連線網址從原本 Storage Bucket 名稱「https://storage.googleapis.com/<bucket_name>/main.m3u8」變成「http://<LB_IP>/main.m3u8」。

Load Balancing VLC_操作示意圖
截圖自:Google Cloud Platform Console 頁面與 VLC 應用程式
©2022 Google

以上介紹雖然都是指令沒有圖形化使用者介面可以操作,但實際寫成腳本或以程式執行時,只需設定好參數就可以直接在系統上執行,歡迎大家一起來動手試試看!最後補充一個小知識,使用 rtmp 通道時,rtmp 網址中 live 後面那串是 key 喔。

直播串流教學_示意圖
截圖自:Google Cloud Shell 頁面與 OBS 設定畫面
©2022 Google

最後,若大家想使用 Live Stream API 並以圖形化使用者介面管理,跟各位介紹 Cloud Ace 針對 Live Stream API 推出的延伸直播方案:LIVE Management System(LMS)。LMS 是一個具備圖形化使用者介面與 API 的系統,可同時滿足無須管理訊號和監看即時狀態的需求。另外 LMS 也可與您既有的系統使用者資料做使用者驗證的串接,讓使用者行為分析的資訊更加完整!這邊簡單用一張圖介紹 LMS 系統在各層面的優勢,如有興趣歡迎與我們聯繫

LIVE Management System(LMS)優勢

以上就是 Google Cloud – Live Stream API 的教學實作,大家對文中內容有任何問題,或想看其他實作教學都可留言告訴我們。 最後,如果想更了解 GCP 或有技術服務相關需求也都歡迎聯絡我們獲得更進一步的資訊。

延伸閱讀:

GCP 是什麼?可以拿來吃嗎?完整介紹 Google Cloud Platform
GCP 如何計費?就像水電費一樣
CDN 是什麼?Google Cloud CDN 用途、優勢完整介紹
實作 Cloud Storage 儲存空間級別、生命週期管理、物件版本管理功能以及節省預算妙招分享
什麼是負載平衡?原理、6大 GCP Load Balancer 完整介紹

Cloud Ace 研討會主頁

發佈留言