工作,生活,休閒,專業,分享,記錄

App Insights JS

Total Pageviews

April 6, 2017

使用 Microsoft Azure Media Service 建立直播服務


安裝環境:

l   Azure Media Service (AMS) : live streaming

l   OBS : push live content (直播推流軟體 for testing)

l   VLC : RTMP player (直播播放軟體 for testing)

PS: 這個實作練習使用 Microsoft Azure 為建置環境,所以請你先確認你已經擁有 Azure subscription 帳號,才可以建立相關的服務,這個實作大約需要 1~2 小時的時間,如果你需要再測試其他相關的設定,可能需要更久的時間來實做測試。

本篇文章介紹內容主要針對「直播」串流服務做介紹(VOD服務不在此多作著墨),使用 Microsoft AMS (Azure Media Service) 雲端串流服務為工具,Step by Step 一步一步建立直播串流服務,後面會針對 AMS 提供的直播服務各項問題點以及限制做一個討論,提供大家參考!
接下來各章節的內容大致涵蓋如下:
1.   建立 AMS Live Streaming
2.   測試直播內容上傳推流
3.   串流接上 Azure CDN
4.   測試直播內容播放
5.   AMS 使用上的問題與限制

先講一下大結論,免得有些已經熟悉的人要從頭看到尾才能看到 AMS 的問題與限制:1. 如果你對直播的即時性非常要求,請不要使用 AMS 來建立你的直播服務,因為 AMS 的直播延時大約是 30 秒左右;2. AMS 直播服務有時會發生推流 reconnect 不上的問題,這會導致如果你的推流網路品質不穩,斷線之後重新連線推流上傳,有時做 reconnect RTMP push 的時候會連接不上,所以你必須時時監控直播狀態,以防止直播斷訊;3. AMS 費用的計算是以 Pay as you go 使用多少算多少的方式計算,Amazon 的媒體服務則是有月租費,所以簡單的選擇方式就是:如果你的直播是短時間一次性,那就選 Azure Live,如果你是長期直播的話,可能選 Amazon 會比較便宜,但是還是要依照你們自己的使用情形來詳細評估會比較好一點。


2017/04/13: (有關 reconnect issue,加上註解說明)

 (經過微軟傳教士 Tom 的技術解答與說明,在推流的時候,RECONNECT 問題是我們使用的測試推流軟體 OBS 重新連接時,Time stamp 改變,造成 AMS 辨識為非原來的推流,所以拒絕新的推流內容的進入) ==> 請改使用 AMS 建議的推流軟體 : Wirecast 來做內容推流(但是 Wirecast 免費版會有浮水印加在影片之上。)

以上簡單結論提供參考!如果你有興趣,可以往下看看詳細的介紹內容。如果你們需要更進一步的詳細介紹或需求評估,可以跟我們聯絡,我們可以提供相關的技術評估協助與各項解決方案。


1.   建立 AMS Live Streaming

首先,我們先來建立 Azure Live Streaming 服務,當然,請先 Login Azure Portal (http://portal.azure.com),登入完畢之後,要選擇可以使用的 subscription 且有一定的額度,因為 Azure Live Streaming / Storage / CDN / Bandwidth 等都會需要使用費(實際的費用計算,可以自行先參考 Azure 計算機,我會在另一篇文章介紹雲端影音串流服務的費用比較),再來我們就可以開始建立直播影音串流服務了,在 Azure Portal 選擇 [+] 新增服務,選擇 [Media Service] 來開始建立 Azure Media Service

首先,我們還是先來說說 Azure Media Service 的使用架構,這樣各位會比較清楚接下來所建立的每個項目是做什麼用的,下列舉例說明,主要規劃方式還是可以按照公司的需求來做劃分。
l   Azure Subscription: 為什麼會提到 subscription 呢?主要是要跟各位說明如果公司內部須要分部門來拆開帳單計算成本的話,最好是使用多個訂閱各別歸屬不同部門使用,這樣才比較容易計算各部門的費用。
l   Resource Group: 資源群組主要可以用來區分權限,例如:只有行銷部門的人員可以來管理網路廣告的影片資料。
l   Media Service Account: 可以分隔不同目的的影片資源,使用不同的 AMS account 來做分辯,每個 AMS 帳號可以建立多個直播頻道,可以上傳 VoD 影片,可以建立多個播放端點,例如:網路廣告使用 advertisement 帳號,新聞行銷的影片放在 marketing AMS 帳號中。
l   Live Channel: 每一個 AMS 帳號可以建立多個直播頻道,不同的活動各自建立直播頻道,但是一個直播頻道只能接受一個影片來源推流,所以如果你同時有三個內容要直播,那就必須建立三個 Live Channel,直播頻道沒有使用時可以停用,或是一次性的活動直播完畢之後就可以刪除此 Channel
l   Live Event: 每一個 Live Channel 可以建立多個 Live Event,每一個 Live Event 可以指定一個播放端點,Live Event 可以設定直播完畢之後儲存成 VoD 影片檔案,提供日後做影片點播使用。
l   Media Endpoint: 媒體播放端點,主要是建立在 AMS 帳號上,同一個帳號的直播或影片可以使用這個帳號所建立的播放端點來做內容傳播。
l   Assets: 這是 for VoD 影片串流服務所使用的,可以在這邊做影片的上傳,編碼,串流點的管理及設定。(這不是我們這一篇的主要內容,另外找時間我們再來介紹 “Azure VoD 影片串流與管理服務

大致了解 Azure Media Service 使用架構之後,我們就開始剛剛的第一個步驟:建立 Azure Media Service 來輸入 Media Service 所需要的各項屬性和設定,首先,建立 Media Service Account,這裡的 Storage Account 主要使用在串流時所需要的儲存空間,以及 Assets 影片或是轉碼之後的檔案儲存地方。


AMS 帳號建立完成之後,我們可以看到 Media Service Overview,他會先自動幫忙先建立一個 default 的播放端點,另外還會顯示轉碼的進行中狀態(Encoding),主要是因為轉碼需要時間,影片會排隊等待轉碼,這裡主要顯示目前轉碼的處理狀態。


接下來,我們要開始建立直播串流服務,在 Media Service 的功能列表中點選 [Live Streaming],然後再點選 [Custom create] 來建立一個我們自己的直播頻道。


建立 Live Channel 有三個步驟,只要依照順序完成設定就可以建立一個 Live Channel 了,首先,第一步先輸入直播頻道的基本資料,當然要輸入一個直播頻道的名稱,這裡有一個比較重要的是需要選擇編碼方式,有兩種可以選擇:Pass Through Live Encoding,這兩種方式取決於你是否已經先把影片做好編碼,Live Encoding 指的是 AMS 會幫你把直播串流做即時編碼,這裡選擇 Pass Through 代表在直播推流時,已經在輸入端就已經做好編碼工作,所以 AMS 就直接幫我們把影片訊息 pass through 串流到使用者的設備上播放。


第二個步驟是設定推流的方式,選擇你要推流直播時所使用的通訊協定,以及可以推流的 IP 位址。(推流直播內容時,可以選擇兩種方式上傳影片內容:RTMP 或是 Fragmented MP4


第三個步驟是設定可以從哪一個 IP 做預覽觀看,因為影片的重要性,你有可能會選擇只有某一些 IP 可以先預覽直播內容,或是先做直播前的測試用。


直播頻道設定建立完成之後,我們可以看到 Media Service 裡面的直播頻道明細,前面有提到一個 Media Service 帳號裡面可以設定多個 Live Channel,如果有多個直播內容要同時上傳直播的話,就需要建立多個 Live Channel 來分別處理直播來源和播放。


我們點擊剛剛所建立的 Live Channel 可以進入直播頻道的詳細資料。


Live Channel 詳細資料畫面中,我們可以看到目前還沒有任何 Live Event,而且可以看到有三個 URL 分別是:Preview URL, Ingest URL (Primary), Ingest URL (Secondary),我們可以先把這三個 URL 的資訊存起來,放在一個文字檔,接下來我們會用到。


在建立完成 Live Channel 之後,我們就可以先針對直播頻道做測試,直接先透過 OBS 來推流直播內容,然後在直播頻道的預覽就可以先行測試是否可以正常觀看。
所以接下來你可以先到 2. 測試直播內容上傳推流,透過 OBS 把測試的直播內容推流到這個 Live Channel Ingest URL(測試步驟可以參考下一節內容),然後在 Azure Portal 上面直接點選 Media Service 裡面的 Live Channel,點選 [Watch preview] 就可以測試播放直播內容,如下圖所示。


2.   測試直播內容上傳推流:

我們使用 OBS 軟體來做測試直播內容上傳的推流,首先請先下載安裝 OBS 軟體,OBS 軟體的下載連結如下:
https://obsproject.com/download
OBS 下載安裝完成之後,開啟 OBS 軟體,然後先設定 [來源] 內容,上面視窗會顯示出你設定的來源影片內容,然後 [設置] 串流,接著就可以做 [開始串流] 了。


OBS 設置畫面如下,主要需要設定串流的 URL,其他的設定選項你可以參考網路上更為詳細的 OBS 使用說明。
串流的 URL 為上面我們所設定好的 Live Channel Ingest URL(使用 Primary),Secondary 則是讓你做備援用的,只有 Port 改為 1936
流密碼就是最後一個 / 後面的那一串文字,請先複製後貼上。
設定完成之後,就可以開始串流了。(如果出現錯誤,請檢查你的設定是否都無誤,或是你的網路環境沒有開放 1935 port,這也會造成錯誤!另外,你的個人電腦的防火牆也要檢查一下,是否 1935 port 會通)


開始串流成功之後,我們就可以先到 Azure Portal Media Service 裡面的 Live Channel Watch preview 試看看,測試看看是否可以播放你的推流直播內容。

測試完成之後,表示你的直播頻道已經可以正常運作,但是預覽只是讓我們測試用的播放方法,如果我們要正式推出直播內容,應該要透過 Live Event 來做內容傳遞,Live Event 除了會掛上播放位置,也會幫我們把直播內容錄製存放在 Storage 之中,以下我們就來介紹如何建立 Live Event

3.   串流接上 Azure CDN

我們想要把我們的直播內容串流直接接到 CDN,然後傳送到各地給使用者播放,以下就對這兩個主要步驟來做實作演練。

3-1. 建立 CDN 端點

我們想要建立一個可以透過 CDN 端點播放的 Live Event,首先,我們必須要先建立 CDN 端點,Azure Media Service 一開始就已經建立一個 default 的串流端點,但是我們這邊選擇新建一個 [Endpoint],然後選定我們所要的設定值。


建立 [Endpoint] 時,我們需要設定一些參數,在 Type 欄,如果選 Standard 則只能選擇是否 Enable/Disable CDN,如果我們選擇 Premium,就會有三種 CDN 方案可供選擇:Premium Verizon, Standard Verizon, Standard Akamai,你可以挑選自己適合的方案。


CDN 端點新增完畢之後,如果我們有勾選 Automatically start ,那麼 CDN deploy 完畢之後就會自行啟動,回到 Medai Service Overview 畫面,我們就會看到有兩個 Streaming endpoint



3-2. 建立 Live Event

CDN 端點建立完畢之後,我們接著就可以開始新增 Live Event,在 Live Channel 畫面之中,點選 [Live event] 就會進入新增的畫面。


Live Event 建立畫面中,輸入各項設定參數,在這個畫面中,如果我們想要把直播串流影片作加密,也是在這邊設定。Archive Window 指的是我們要錄製直播 VoD 影片的長度大小。


設定完畢,並且在 Live Event 啟動完成之後(需要數分鐘),我們就可以看到 Running 中的 Live Event,點選這個 Live Event 進到畫面中,可以看到這個 Live Event Streaming 狀態,如果還是紅色的燈表示尚未正常開始串流,如果是綠色的燈表示已經開始正常串流出去,這時可以點選上方的 [Watch],直接先測試播放看看。


點選 [Watch] 測試播放畫面如下。


點選 [Streaming] 則會出現這個 Live Event 的播放位置詳細資料,如果我們想要把直播內容撥放在網頁或是 APP 之中,則我們可以從下方的通訊協定相對應的 URL 複製出來使用,我們就先把 HLS(v4) URL 複製出來,下一個章節我們使用 VLC 軟體來開啟這個 HLS URL 測試播放我們的直播內容。



4.   測試直播內容播放:

我們使用 VLC 軟體來做直播內容播放的測試,VLC 軟體的下載網址如下:
 http://www.videolan.org/vlc/index.zh-TW.html
下載安裝完成之後,開啟 VLC 軟體,然後點選 [Open Network] 功能。


Network Tab 下,輸入我們剛剛複製出來的 HLS URL,然後點選 [Open]


完成之後,VLC Playlist 就會增加一筆剛剛的 Network 資料,點選該筆 Title,然後點選下方的播放按鈕。


這時候應該會正常的開始播放我們的直播內容,而且是從 CDN 直接透過 HLS 通訊協定來做直播的播放。


整個實作到這邊完成,最後 Live Event 裡面的 Streaming URL 就是最後我們要提供給使用者播放的 URL,我們可以把這些 URL 埋放在我們的公司網站中,或是把這些 URL 嵌入 APP 之中,提供給使用者觀看直播的內容,至於要選擇哪一個通訊協定來做播放,則看你們想要播放的支援 player 或是播放環境而定,可以自行選擇。(Azure CDN support 的通訊協定有:Smooth Streaming, MPEG-DASH, HLS 等,都是以 HTTP Base 的通訊協定。)


5.   AMS 使用上的問題與限制:

我們在使用 AMS 上遇到過一些問題,經過了反覆的測試,在解決問題的同時,尋找網路資訊參考,諮詢專家技術支援等,得到了一些 AMS 使用上的經驗與限制,下列資訊列舉提供大家參考!

直播即時性的問題(Latency

AMS 直播服務延遲時間約為 25 ~ 30 秒,無法再做任何調整來縮短這個時間,如果你的直播需要很短延遲的即時性,那就不應該選擇 AMS 來做你的直播服務。
PS:如果你的直播延遲需要在 5 秒之內,很要求直播的即時性,建議你使用 RTMP 的串流方式,才有可能達到這麼短的 Latency

直播推流斷線的問題(Reconnect

在測試 AMS 直播服務的時候,雖然 Live Channel 一直都是啟用中,並沒有停止,但是我們在測試的時候,常常中斷推流上傳,然後再重新做推流上傳,所以經常做 Push 端的 RTMP reconnect,我們發現有時候會無法重新正常 reconnect push RTMPOBS 推流軟體沒有出現錯誤,但是測試播放一直無法正常播放,遇到這種情形,我們必須關閉 Live Event,然後做 Live Channel Reset(大約要花一分鐘左右),然後再啟動,這時 OBS 開始推流上傳之後,也可以正常播放觀看。

直播穩定性的建議(Stable

上面的這個問題會影響到直播服務的正常運作與否,我們需要時時監控,因為 RTMP push 是長時間的 TCP 連線,非常重視網路品質,如果 TCP 斷線就必須要做重新連線的動作,但是 AMS reconnect 無法非常穩定,所以有時會造成 RTMP push 內容上傳中斷的情形發生,更為麻煩的是我們無法從 Azure Portal 查看出目前 RTMP push 上傳的狀態,只能在無法播放的情形之下,才知道上傳已經發生錯誤,這是一個很不穩定,又很麻煩的地方。
我們必須要想辦法來監控這個直播服務的內容,包括上傳,編碼,串流,播放等狀態。



1 comments:

Anonymous said...

https://www.reddit.com/r/AZURE/comments/3m1yrx/azure_media_services_stream_resuming/

"This is a known issue with OBS. When OBS disconnects and reconnects it resets its RTMP time-stamp and causes issues. We are working on a feature which will hopefully fix this issue. vMIX, I think this is also the same problem. When we have the fix it will address this as well. "