如何使用 Microsoft Azure Media Services 進行現場直播 (Live Streaming)


感謝北科大劉建昌同學翻譯 微軟公司 Azure Media Services 團隊主管  Jason Suess 於 2014 年 9 月 10 日所發表的文章 http://azure.microsoft.com/blog/2014/09/10/getting-started-with-live-streaming-using-the-azure-management-portal/

louis_bebe_barron_greenwich_village_studio

不久之前,微軟公司宣布了 Microsoft Azure Media Services 即時直播服務 ( Live ) 開始進入技術預覽階段,公開接受用戶測試。而這些即時直播服務其實早已被 NBC 運動頻道用於多項重大運動賽事直播,包括英超聯賽、NHL、週日橄欖球之夜 ( Sunday Night Football ) 以及 2014 年索契冬季奧運會。在最近剛結束的 2014 世界盃足球賽期間,Azure Media Services 即時媒體服務同樣的也被10 家世界性的電視傳播公司用來轉播比賽。也因此,我們對於這項服務的穩定性、可擴充性以及性能都深具信心,也很高興可以讓所有使用者都可嘗試提供即時直播服務給他們的用戶。

自本周起 Azure Media Services 團隊將撰寫多篇文章,內容涵蓋了 Microsoft Azure 即時串流服務的功能以及如何使用它們。首先,我們會介紹一些基本的即時串流所需要的一些要件,並且將其應用到一個特定的場景 (網路直播桌面)。而我們只需要透過 Azure 的管理入口網站,無需任何的程式碼即可達到所需要的設定。但是在未來的幾天,將會有另外一篇文章說明如何使用 Microsoft Azure SDK 以程式控制的方式來達到相同的設定。

即時串流的基本組件 :

以下將開始介紹在進行即時串流時所需要用到的組成,並且在文章的最後,將這些組件做結合。

  • Azure 的訂閱帳戶

如果您還沒有微軟的 Azure 帳戶,您需要先到http://azure.com上建立一個新的Azure帳戶,並且在購買前,會有一段免費期可供試用。

  • Azure Media Services 媒體服務帳戶

如果您還沒有創建 Azure 媒體服務帳戶,這裡有一些相關文件,說明如何建立一個 Azure 媒體服務帳戶http://azure.microsoft.com/en-us/documentation/articles/media-services-create-account/

  • 視訊攝影機

在本篇文章中,將使用筆記型電腦上的網路攝影機,如果您要使用其它的攝影機,而您的攝影機有提供數位輸出,可直接透過 USB 將攝影機連接到 PC,並且透過軟體進行編碼。倘若您的攝影機沒有支援數位輸出,那您則需要一個視訊擷取卡 ( video capture card ) 將攝影訊號傳入至 PC。

  • 即時編碼器 (Live Encoder)

目前 Azure Media Services 媒體服務支援兩種即時內嵌 ( live ingest ) 協定 :

fragmented MP4/Smooth Streaming 和 RTMP (Real Time Message Protocol)。

目前支援 RTMP 這項協定的編碼器軟體已經變得相當普遍,包括 :

1. 免費的編碼器軟體 ( Flash Media Encoder 和 FFMPEG )

2. 平價之商用編碼器軟體 ( Telestream 的 Wirecast )

3. 生產高價值產品 ( NewTek 的 Tricaster )

4. 專業級的編碼器 ( Cisco, Elemental, Image 等 )

在本文範例中,會使用 Telestream 的 Wirecast 做為示範用的編碼器,如果您沒有此一編碼器軟體,可以從Telestream的網站去下載 Wirecast 試用版,它提供了一段免費試用期。需要注意的是,視訊編碼需要耗用相當大的 CPU 資源,因此當以下範例在做視訊編碼時,會限制只有三個編碼品質等級 ( quality level ),並且產生相對的降低位元速率 (bit rates),若您所使用的筆記型電腦或是 PC 其 CPU 運算能力較低,您需要去監視 CPU 的使用率,若一直高於 70% 的話,您需要考慮刪除一個品質等級或是降低位元率和降低影片解析度。

  • 高速的網路連接

要提供視訊直播的服務,您需要連接一個高速的網路,而這個網路需要有相當穩定的傳出速度 ( 至少要為傳送視訊的位元速率的 1.5倍 )。考慮到編碼器輸出的位元速率會有波動,因此在本例中,我們建立了三種品質等級的串流 (400、600、900 Kbps),合計總位元速率為 1900 Kbps,因此最少需要 2850 Kbps (2.85 Mbps) 的網路傳出速率。

  • Azure Media Services Channel 媒體服務通道

通道 ( Channel ) 是在 Azure 媒體服務中的功能,用來實現即時串流。通道在 Azure 媒體服務範圍內提供編碼器輸出一個內嵌點 ( ingest point )。

  • Azure Media Services Asset 媒體服務資產

在媒體服務中資產 ( Asset ) 如同一個容器 (Container),用來儲存所有與您的串流有關連的音訊、視訊、中繼資料等。

  • Azure Media Services Program 媒體服務節目

Azure Media Service Program 媒體服務節目是 Azure 媒體服務的運作實體,其運作的流程為,建立一個通道,並且開始將串流透過通道寫入資產 ( Assest ) 中。

  • Azure Media Services Streaming Locator 媒體服務串流定位器

當您想要讓資產 ( Asset )可以開始存取流時,您需要在資產中建立一個定位器。

  • Azure Media Services Streaming Endpoint and Streaming Units 媒體服務串流端點與串流單位

1. 串流端點 (Streaming Endpoint) 提供了一個URL,從中您可以得到您的即時串流或是 VOD (Video On Demand) 資產,同時,也提供了動態封裝功能以及安全的傳送串流。

2. 串流單位 (Streaming Units) 保證了一定的最大輸出量提供給串流端點,每個串流單位提供了 200 Mbps 的串流流出產量,並且根據使用上的需求,可以增加更多的容量到您的串流端點。

  • Azure CDN

在不久的將來,我們將直接整合 Azure CDN 和 Azure 媒體服務。完成之後,串流端點將可以有一個新的設定。那就是允許直接配置一個 Azure CDN 端點連接至您的串流端點。在尚未完成整合的此時,您可不使用 CDN 直接由串流端點作串流播放的動作,或是聯絡 Azure support 部門,商請微軟公司為您的串流端點設置 Azure CDN。

  • 視訊撥放器

Azure 媒體服務的串流端點提供了動態封裝的功能,因此可用來針對多種不同用戶端所使用的通訊協定,提供不同的媒體串流格式 ,例如 : iOS 使用到 HTTP 即時資料流版本3格式 ( HLS version 3 ) 。在以下範例中,我們將使用一個遵循 動態與適應性媒體串流標準 (MPEG-DASH) 的 HTML/DASH.js 撥放器來支援多個平台的影片撥放 (電腦瀏覽器、Android、Windows Phone)。

有關更多動態封裝的資訊,可以去 Channel9觀看 Nicks 的影片或是到 MSDN網站 查詢。

實際範例 : 網路直播

現在,讓我們來解釋一下本篇案例將可以達到何種效果。

在以下的步驟中,我們將建立一個網路直播,用來撥放電腦視訊鏡頭所拍攝的事件。在直播串流的專有名詞中,我們可以把這項直播想像成一個”事件”(event)並且擁有一個開始的時間和結束的時間。這個觀念和我們平常在電視上看到的直播節目(線性串流Linear streaming)為一個對比,在之後的介紹文章中,我們也會介紹如何使用Azure媒體服務來達到線性串流。

事前設定(Pre-Event Setup)

在要進行直播的事件前,我們需要透過以下的步驟來做事前設定。

注意 : 這些步驟可以在任何時間點進行,而不需要趕在開始直播前做設定。

建立一個 Azure Media Services channel 媒體服務通道和串流端點

在第一組設定步驟中,我們將使用Azure管理入口網站配置一些基礎建設,這些基礎建設將要用來接收來自編碼器(encoder)的直播串流還有來自客戶端的撥放設備所傳送的封包(packet)。

1. 點擊連結到http://azure.com,然後在最上方的選單中點選”入口網站”(Portal),登入您的Azure訂閱帳戶,您將會進入到Azure的管理網站。

clip_image002

2. 在最左側的垂直選單中,選取”媒體服務” (MEDIA SERVICES),您將可以看到在 Azure 訂閱帳戶中的所有媒體服務。

clip_image004

3. 選取你要在哪個媒體服務中建立這項範例。

在這篇文章中,將使用先前建立好的名為 barttest 的媒體服務。

您可以在媒體服務裡面看到頂端的選單,這裡可以用來建立和控制所有媒體服務的細部設定。

若您已經使用 Azure 媒體服務一段時間的話,您將會注意到,現在新增”通道”這項新功能,在這裡可以管理和控制 Azure 媒體服務的即時通道 ( Live Channel )。

4. 選取最上方選單的”通道”選項,將會列出您在這個媒體服務中所建立的通道清單(如果您有建立的話)

5. 若您還沒有建立任何的通道,則在下方會顯示”您沒有任何通道”,選取”新增通道”,將會打開一個對話寬,在這個對話框中設定您的通道屬性。

clip_image006

6. 在”建立新的即時通道”對話框中,輸入您的通道名稱。

接下來要指定通道所使用的採集內嵌協定 (ingest protocol)。在本範例中,我所使用編碼器為 Wirecast,其輸出嵌入協定為RTMP。

最底下有三個選項 :

A. 立即啟動新通道” : 選取這個選項,之後您就不需要再做額外的動作去啟動這個通道。

B. 加入一個資料流單位” : 這個選項在您的串流端點上沒有任何串流單位時,將會自動預設為選取。選取這個選項,Azure 將會自動提供一個串流單位給您,這樣您就不需要再去花時間做設定。

C. 將影片內嵌限制為我電腦的目前IP位址” : 若選取這個選項的話,它會為您的通道申請一個 IP 存取控制清單 (IP access control list , ACL ),ACL 將會鎖定這個通道只能夠在您的電腦上作輸入的動作。在本範例中我們將此選項取消。

clip_image008

7. 點擊對話框右下角的確認按鈕,則Azure媒體服務就會開始建立一個新的通道,並且將一個新的串流單位加到您預設的串流端點中。

您可以在螢幕的底部看到建立新通道的進度列,新增一個新的通道大概需要花上幾分鐘的時間。

clip_image010

配置和啟動編碼器 (Encoder)

透過上面的事前設定,我們現在擁有了進行媒體服務時所需要的基礎建設。

下一個步驟則是設置 Wirecast,並且在我們的 Azure 服務通道上啟動它。

為了加快設定的步驟,我們使用先前已經建立好的 Wirecast 配置文件,在這裡面已經設定好了即時轉播所需要的設定。但是在本文中將不會介紹這個文件的細節,在未來的幾個禮拜,另外一位作者 Cenk Dingiloglu  將會介紹更多關於編碼器的細節。

1. 下載 Wirecast 配置文件 http://jasonsueblog.blob.core.windows.net/wirecastdocument/WirecastDocument.wcst

2. 打開 Wirecast 和剛剛下載的配置文件。您很可能得到和下面圖示一樣的錯誤,那就是 Wirecast 找不到文件中所描述的媒體裝置。會顯示這項錯誤的原因是因為您並沒有使用與本文中相同的錄影設備。在這裡我們先點擊取消,在下一個步驟中我們將會解決這個問題。

clip_image012

3. 在 Wirecast 的用戶介面中,我們可以新增新的影像來源。

在用戶端的底部有三排來源,點取”+”,並且選擇相機的圖示,此時會顯示目前連接電腦的錄影裝置,選取您要的錄影裝置之後,您就可以在錄影來源上看到目前攝影機的輸出畫面。

clip_image014

clip_image016

clip_image018

clip_image020

4. 選取 Wirecast 的 ”Output” 清單,並且選擇 ”Output Setting”。

您可以在對話框上看到,目前有三種串流編碼的品質等級 (400Kbp、600Kbp、900Kbps)。

400Kbp 品質等級是使用 H.264 視訊編解碼標準中的 Baseline profile 編碼格式(H.264 Baseline profile),用來支援舊的 Andorid 播放設備,而 600Kbp 和 900Kbps 品質等級則是 Main profile編碼格式,用來提供高品質的視訊水準。

在對話框中唯一缺少的則是目標串流位址(Address),我們在稍後會填寫上去。

clip_image022

clip_image024

5. 回到Azure管理入口網站並且找到您的通道清單。

在通道清單上選取內嵌 URL (INGEST URL),並且複製這段URL。

clip_image026

6. 再次回到 Wirecast 並且選取 ”Output Setting” 對話框,將剛才複製的內嵌 URL 貼到 ”Address” 框中,在這裡要確保三種品質等級的串流編碼都有進行此項動作。

clip_image028

7. 點擊”OK”按鈕。

8. 點擊您在步驟三時所建立的錄影來源,並且讓它顯示在使用者介面上 ”Preview” 的位址

clip_image030

9. 接下來,點擊“—>”按鈕,將“Preview”的畫面移動到“Live”上,此時您在畫面上可以看到錄影的輸出

clip_image032

10. 完成以上的步驟,您已經完成了所有 Wirecast 的設定,剩下唯一的步驟就是要將您的串流”推”’到您的 Azure 媒體服務通道上。

點選左上角 ”Stream” 按鈕,若一切順利的話,您將可以看到有一個紅點在按鈕中,讓您知道您目前正在進行直播。

clip_image034

11. 現在您可以檢查串流是否正確地從預覽的發送點傳送到通道中。

回到Azure管理帳戶中,在底部的工具列選取”播放”按鈕。此時會有對話框出現,選擇”播放預覽URL”,這個動作將會打開一個視訊撥放器,並且將其連接到您通道上的預覽URL。

clip_image036

NOTE : 注意,若您有任何理由需要停止編碼器並且重新啟動的話,您首先需要在Azure管理帳戶上選取”重設通道”來重新調整您的通道設定。

開啟事件 (Event) 和播放串流

現在已經將視訊串流移動到通道之中,現在我們可以透過建立媒體服務資產(Asset)、媒體服務節目(Program)還有媒體服務串流定位器來開始我們的事件(Event),並且讓觀看者可以透過串流端點來觀看我們的直播。

我們將使用一個快速的方法來達到以上的所有目標。

建立和開啟節目

1. 回到 Azure 管理帳戶,並且進入到通道的設定頁面裡,點擊頁面最下方工具列的”啟動資料流”,一旦完成這項步驟之後,通道列表上的”發行URL”將會被填入,您可以從上方的串流端點上拉進您的串流。

clip_image038

clip_image040

播放直播串流

現在,直播串流已經被存入資產中,資產是可以從串流端點中拉出的,並且可以動態的打包目前我們所支援的協定 ( MPEG-DASH,、HLS version 3、 HLS version 4、HDS、Smooth Streaming ),我們將充分利用這項功能讓直播串流可以在桌上電腦、iOS  和Android設備上播放

1. 在 Azure 管理入口網站中,在通道列表的頁面,選取複製”發行URL”。

2. 將"發行URL"將它貼到任何一個文字編輯器上

它看起來像是

“http://<您的帳號名稱>.origin.mediaservices.windows.net/<locator_guid>/<stream_guid>.ism/manifest”

在這段URL上添加 (format=mpd-time-csf),這將告訴串流端點要把串流打包為 MPEG-DASH。若增加的是 (format=m3u8-aapl-v3)則是告訴串流端點將串流打包為 HLS (version3)。

3. 在 Windows PC 或 MAC 上,(您需要一個瀏覽器可以支援擴充軟體資源,像是最新版本的 Internet Explorer 或 Chrome ),您可以透過https://aka.ms/dashplayer,用來測試您的串流。

在頁面頂端貼上 DASH URL 並且選取 ”Load”。您可以在Android裝置或是Windows Phone重覆這項動作。

NOTE : DASH 撥放器也可以用來把 DASH URL 當成查詢的參數,換句話說,您可以建構一個如以下範例的URL,並且分配到不同的裝置上

http://dashplayer.azurewebsites.net/?URL=http://<您的帳號名稱>.origin.mediaservices.windows.net/../…ism/manifest(format=mpd-time-csf)

4. 在 iOS 設備上,打開 Safari 瀏覽器,並且輸入 HLS ( version3 ) 的URL,就可以直接獲取本機播放器的串流,您也可以建立一個帶有視頻標籤的 HTML5 頁面,並且給予它一個 HLS 的 URL 作為其視訊的來源,來達到同樣的效果。

停止事件

當要結束一個事件時,您需要停止將串流傳入到資產中,這可以透過一個簡單的步驟來達成。

回到 Azure 管理頁面,並且選擇您所使用的通道,在最底下的工具列中,選取"停止資料串流"。這個動作將會阻止節目在您的通道中運作並且會將其刪除。

clip_image042

我們的即時服務所擁有的功能之一,就是我們的資產在即時或是VOD狀態是無縫接軌的,如果您現在去連接先前的URL,您還是可以發現原先的串流還是存在,但是是VOD而不是即時的。

清除通道

若您想要在通道內運行其它的節目,您當然可以清除掉先前的串流。

1. 第一,透過選取 Wirecast 上方的"Steam"按鈕,停止傳送串流,之後就可以關閉編碼器。

2. 第二,回到Azure管理頁面,選取"通道",並且選取最下方工具列的"停止通道"。當通道狀態變為"已停止",則表示該通道並不會消耗任何的資源,當然這樣也不會有任何的費用產生。

clip_image044

clip_image046

下次您要再次使用該通道時,您可以選取"啟動通道",此時該通道會再次的啟動,並且擁有相同的內嵌URL ( ingest URL ),這樣您就不需要重新設定您的編碼器了。

3. 最後,關於串流端點,若您想要繼續提供 VOD 的紀錄,則您需要讓串流端點保持運作。但是若您不需要,則可以進入到"資料流端點"頁面中,在最底下選取"停止",則您的串流端點就不會再繼續運作。

clip_image048

結論以及下一步發展

在上面的文章內容中,我們已經透過 Azure 的管理頁面來進行設定、執行、移除一個即時的串流。在未來的幾天,我們將會發表更多文章,內容涵蓋了如何對使用 RTMP 的編碼器進行設定、如何使用我們的 SDK 來執行現場活動 ( live event )、如何保護影片內容的安全性以及如何進行線性串流 ( linear streams )。

Comments (0)

Skip to main content