Microsoft Azure Media Services 支援 RTMP 協定與即時編碼


感謝北科大劉建昌同學翻譯微軟公司 Azure Media Services 團隊主管  Cenk Dingiloglu 於 2014 年 9 月 18 日所發表的文章 http://azure.microsoft.com/blog/2014/09/18/azure-media-services-rtmp-support-and-live-encoders/

Mixing board 

Microsoft Azure Media Services 直播串流服務功能日前已經進入技術預覽階段,公開接受用戶測試。而在直播串流服務中所用到的RTMP 協定是 Microsoft Azure Media Services 支援的內嵌 ( ingest protocol ) 協定之一,也是目前市場上常用的協定,用來獲取與傳送多媒體資訊。

Microsoft Azure Media Services 提供了使用 RTMP 協定來內嵌串流資訊並且使用動態封裝 (Dynamic Packaging) 來傳送不同的媒體串流格式 (例如 : MPEG-DASH、Microsoft Smooth Streaming、Apple HLS、Adobe HDS )。RTMP 協定目前被廣泛應用在影音輸入與傳輸,支援 RTMP 協定讓 Microsoft Azure Media Services 直播串流服務能夠將獲取的影片;多重輸出串流至不同媒體格式的裝置與端點上,並且能夠保持與傳統撥放器的相容性。

關於在 Azure Media Service 上設定一個直播通道 ( Live Channel ) 和串流端點的資訊,請參考 Microsoft Azure 中文部落格 – 如何使用 Microsoft Azure Media Services 進行現場直播 ( Live Streaming )

本篇文章的重點將放在介紹 Azure Media Service 的 RTMP 內嵌功能,以及如何透過 Wirecast、Flash Media Live Encoder ( FMLE )、FFmpeg 等編碼器,利用 RTMP 協定將多種畫質之多重位元資訊 ( multi-bitrate ) 即時送進 Azure Media Service 的通道中 ( Channel )。

即時串流 ( Live Streaming ) 的基本資訊與架構

即時串流的架構最主要由三個主要的元件所組成:通道/節目 ( Channel/Program )、串流端點與串流單位 ( Streaming Endpoints )、儲存體 ( Storage )

Live-architecture

1. 通道/節目( Channel/Program ) :

  • 通道 ( Channel ) 用來啟用直撥服務並且支援 RTMP 和 MP4 ( Smooth Streaming ) 兩種內嵌協定。即時編碼器 ( Live Encoder ) 透過內嵌點 ( ingest point ),將串流傳送到通道中。
  • 節目 ( Program ) 為通道內的一個邏輯組件,節目會發布收到的串流資訊並且將這些資訊歸檔,轉換成 VOD ( Video On Demand ) 或是即時撥放窗口。

2. 串流端點 ( Streaming Endpoint ) 與串流單位 ( Streaming Units ):

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

3. 儲存體 ( Storage )

  • 節目 ( Program ) 利用 Azure Storage 來儲存即時檔案。而 VOD 和編碼器服務也需要使用到儲存的服務。

 

通道 ( Channel ) 支援 RTMP 協定

Azure Media Services Channel 支援 RTMP 協定將串流推向通道中,它可以支援單一 ( single bitrate ) 和多重位元輸入 ( multi-bitrates ),不過我們強烈建議使用多重位元輸入 ( multi-bitrates ) ,這樣的好處是可以讓不同單位可以使用自己最適合的串流位元。在未來的 Azure Media Services 中,將會提供即時轉碼服務,這個服務能夠將單一的位元 ( single bitrate ) 輸入轉換成多重位元輸出 ( multi-bitrates )。

要使用 RTMP 嵌入協定 ( ingest ),需要符合下列要求 :

  • 備妥支援 RTMP 輸出的編碼器 (Encoder)
  • 支援能夠輸出 H.264 標準壓縮的影片以及進階音訊編碼 ( AAC ) 的音訊編碼器
  • 圖像組 (GOP) ( Group of pictures ) 或主要畫面格 ( Key Frame ) 與能夠搭配不同影片畫質
  • 主要畫面格的間隔需達2秒 (透過特殊的設定,您可以使用最多長達 6 秒的間隔時間。請參照本文之後介紹的進階設定 )
  • 不同的串流品質名稱都是唯一的
  • 網路連接 ( 頻寬需求量為視訊與音訊位元率的總和 )
  • 建議採用 CBR ( Constant bit rate ) 編碼以優化自動適應性 ( Adaptive ) 編碼效能

在這篇文章中,將會使用三種不同的視訊輸出品質,並且內嵌 ( ingest ) 到 Azure Media Service Channel 之中。您可以使用更多的視訊輸出品質,但是要記住的是,您的輸出品質將被您的電腦編碼能力還有網路頻寬所限制,若您的網路頻寬較小,您可能會需要調整所使用的輸出品質數量,並且使用較低的編碼位元率 (bitrate)。當您嘗試輸出較多種視訊品質時,需要注意所需的網路頻寬是所有視訊品質的位元率總合。

注意 : 當您重新設定編碼器或是重新建立編碼器與通道之間的連線時,都要對通道進行 "Reset" 的動作。

使用 Wirecast 時的設定

Wirecast 是一種支援 RTMP 協定的商用編碼器軟體。它可以即時編碼直播時所獲取的即時串流。您可以到 Telestream 網站下載 Wirecast 試用版並且得到相關的資訊,目前 Wirecast 最新版本為版本 5,並且能夠用來測試 Azure Media Service。

輸入設定

  • 選取 "+" 按鈕。

clip_image002

  • 選擇相機的圖示,此時會顯示目前連接電腦的攝影裝置,您可以在此選擇自己需要的攝影裝置。

clip_image004

  • 選取完可用的攝影裝置後,您可以在錄影來源上看到目前攝影機的輸出畫面。點擊輸出畫面,並且讓它顯示在使用者介面上 ”Preview” 的位址

clip_image006

輸出設定

  • 在上方工具列選取"Output" ->"Output Setting"

clip_image008

  • 在"Select an Output Destination"對話框中選擇目標伺服器,在此選擇RTMP Server

clip_image010

此時會出現輸出設定的對話框

clip_image012

  • 為您第一個輸出品質 ( quality ) 等級作命名。本範例中取名為 "Azure Media Services Quality1"
  • 輸入一個唯一的串流名稱 ( myStream1 )。若您有多種不同的輸出品質,每一個輸出品質都需要有一個唯一的串流名稱
  • 為您第一個輸出品質建立一個新的預設編碼。
  • 在 "Output Setting dialog box" 中,選擇"New Preset",並且輸入新的預設編碼名稱 ( MyQuality1 )。

clip_image014

注意 :

1. 當您在建立自己的預設編碼時,您必須保持 “Frames per second” 和 “Key frame every” 這兩個值在不同的輸出品質之間是相同的。

2. 不同輸出品質,必須使用相同的音訊編碼設定並且確定有設置 "Keyframe Aligned",否則串流將無法運作或是無法內嵌置通道中。

  • 上述步驟結束後,您的輸出配置應該與下圖一樣

clip_image016

  • 增加其他的輸出品質等級。點擊"Add",並且按照上述步驟來添加新的輸出品質

clip_image018

注意 :

再次提醒,在建立新的預設編碼時,"Frames per second" 和 "Key frame every" 這兩個值在不同的輸出品質也要是一樣的。除此之外,也要確認有設置 "Keyframe Aligned" 並且為每個 Stream 命名一個唯一的名稱。

  • 下圖為 Wirecast 設定三種不同的輸出品質等級

clip_image020

開始編碼並且將串流資料內嵌到通道中

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

clip_image022

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

clip_image024

預覽串流

您可以透過Azure管理網站來預覽甚至是發布您的串流。

(關於預覽與發布串流的詳細資訊,請參考Microsoft Azure中文部落格如何使用 Microsoft Azure Media Services 進行現場直播 (Live Streaming))

做為替代方案,您也可以使用http://amsplayer.azurewebsites.net/來選擇不同的播放器來預覽您的串流視訊。

使用 Flash Media Live Encoder 時的設定

FMLE 為 Adobe 公司發行的一個免費軟體。您可以至 http://www.adobe.com/products/flash-media-encoder.html 下載FMLE以及了解更多相關訊息。

在預設的情況下,FMLE 支援 MP3 格式的音訊輸出。目前 Azure Media Service 並不提供即時轉碼服務,並且要求必須使用進階音訊編碼 ( AAC ) 以動態封裝串流到多種格式中 ( MPEG-DASH、Smooth Streaming、HLS )。因此,為了要在 Azure Media Service 上使用 Adobe FMLE,您會需使用額外的 ACC 插件 ( plugin ) 。在本篇文章中,我們將會使用一個由 Main Concept 所提供的 FMLE ACC 插件。(您可以從 http://www.mainconcept.com/eu/products/plug-ins/plug-ins-for-adobe/aac-encoder-fmle.html 下載與安裝此一 ACC 插件)

設定 FMLE

您需要做的第一件事情是設定讓 FMLE 使用 Network Time Protocol (NTP) 做為 RTMP 協定的時間標籤,請依照下列步驟 :

1. 關閉您的編碼器

2. 使用文字編輯器打開 FMLE 的組態檔 (config.xml)。

  1. 若您沒有更改預設的安裝路徑,則您可以在 C:\Program Files\Adobe\Flash Media Live Encoder 3.2\ 找到FMLE的組態檔。
  2. 若 Windows 作業系統為 x64 則是在 C:\Program Files (x86)\Adobe\Flash Media Live Encoder 3.2\ 找到FMLE的組態檔。
  3. 在 MAC OS 作業系統的預設安裝路徑為 HD:Applications:Adobe:Flash Media Live Encoder 3.2

3. 將 streamsynchronization/enable 設定true,如以下範例 :

<streamsynchronization>

<!– “true” to enable this feature, “false” to disable.                

<enable>true</enable>

4. 儲存檔案,並且再次打開您的編碼器。

  • 在目前連接的設備清單中,選擇您要的攝影裝備。
  • 在編碼清單中選擇您要的預設編碼,或是自己建立一個預設編碼。

若您要自己建立一個預設編碼,請參考本文 "通道支援 RTMP 協定" 章節。

在本篇範例中,將使用

"Multi Bitrate – 3 streams (1500) Kbps – H.264"

此選項將採用H.264標準的多位元率編碼,並且輸出三種不同的輸出串流。

clip_image026

  • 在視訊編碼格式的進階設定中,設定 "Key Frame frequency" 為2秒。

clip_image028

  • 設定 "Frame rate" 為 30 fps。

clip_image030

  • 選擇您的音訊輸入裝置。
  • 設定音訊輸出格式為 AAC

( 注意 : 在預設的狀況下 ACC 和 HE-AAC 不能使用,因為 FMLE 只能夠輸出 MP3 格式的音訊檔,因此您需要通過外部的插件來讓 FMLE 使用 AAC 編碼 )

  • 設定所需的音訊頻寬,在本篇範例中,將使用 96Kbps 的位元率和 44100 Hz 的取樣率。

clip_image032

  • 在 Stream 欄位中輸入 "stream%i",這項設定可以讓 FMLE 將每一個輸出品質 ( Quality ) 命名為唯一的串流名稱

clip_image034

下圖為上述完成的設定 

clip_image036

開始編碼並且將串流資料內嵌到通道中

  • 點擊 "Connect",將編碼器連接到

clip_image038

  • 選取 "start" 開始進行編碼

注意 : 您也可以使用 FMLE 的指令模式完成上述的操作。

詳細資料請參考Start Flash Media Live Encoder in command-line mode”

clip_image040

  • 下圖為直播開始的畫面

clip_image042

預覽串流

您可以透過 Azure 管理網站來預覽甚至是發布您的串流。關於預覽與發布串流的詳細資訊,請參考 Microsoft Azure中文部落格如何使用 Microsoft Azure Media Services 進行現場直播 ( Live Streaming )

做為替代方案,您也可以使用 http://amsplayer.azurewebsites.net/ 來選擇不同的播放器來預覽您的串流視訊。

在 Azure Media Services 上使用 FFmpeg 時的設定

FFmpeg 是知名的開放原始碼計畫,可以支援多種格式的音訊和視訊輸出。RTMP 也是 FFmpeg 上所支援的一項協定。您可以在FFmpeg 的官網下載與了解更多相關資訊。在這篇文章中,將不會特別介紹和說明 FFmpeg 的指令和其用處,而是使用先前已經撰寫好的指令來將本地端的檔案進行串流,並且模擬一個即時串流。您可以使用 FFmpeg 來截取來自多種不同設備 (包含攝影機、桌面截取等設備) 的輸入的資訊。您可以在 FFmpeg 的官網下載與了解更多相關資訊。

範例指令

以下為 FFmpeg 的範例指令

  • 輸出單一位元率( Single Bitrate ) :

C:\tools\ffmpeg\bin\ffmpeg.exe -v verbose -i MysampleVideo.mp4 -strict -2 -c:a aac -b:a 128k -ar 44100 -r 30 -g 60 -keyint_min 60 -b:v 400000 -c:v libx264 -preset medium -bufsize 400k -maxrate 400k -pix_fmt yuv420p -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/mystream1

  • 輸出多種位元率 ( Multi bitrates ) ( 500Kbps,300Kbps,150Kbps ):

C:\tools\ffmpeg\bin\ffmpeg.exe -threads 15 -re -i MysampleVideo.mp4 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -pix_fmt yuv420p -s svga -b:v 500k -minrate 500k -maxrate 500k -bufsize 500k  -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_500 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -pix_fmt yuv420p  -s vga -b:v 300k -minrate 300k -maxrate 300k -bufsize 300k -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_300 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -pix_fmt yuv420p -s qvga -b:v 150k -minrate 150k -maxrate 150k -bufsize 150k  -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_150

在輸出多種位元率的指令碼中,建立了三種不同的視訊輸出品質 ( 500Kbps, 300Kbps, 150Kbps ),主要畫面間隔為兩秒。並且在將串流輸出到 Azure Media Service 通道 ( Channel ) 中。請參考 Microsoft Azure中文部落格如何使用 Microsoft Azure Media Services 進行現場直播 ( Live Streaming ),裡面有關於通道內嵌URL的詳細介紹。

  • 若要使用電腦的 WebCam 以單一位元率( Single Bitrate ) 來進行直播,可以先鍵入

C:\tools\ffmpeg\bin\ffmpeg.exe -list_devices true -f dshow -i dummy

得知麥克風與攝影設備的名稱,以此範例,攝影設備名稱為 Integrated Camera 而麥克風設備名稱為 Microphone (High Definition Audio Device),以下是將電腦 WebCam 透過 ffmpeg 編碼為 H.264 送往 Azure Media Services Live Streaming Channel 的範例:

C:\tools\ffmpeg\bin\ffmpeg.exe -v verbose -f dshow -i video="Integrated Camera":audio="Microphone (High Definition Audio Device)" -strict -2 -c:a aac -b:a 128k -ar 44100 -r 30 -g 60 -keyint_min 60 -b:v 400000 -c:v libx264 -preset medium -bufsize 400k -maxrate 400k -pix_fmt yuv420p -s 640×360 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/mystream1

 

預覽串流

您可以透過 Azure 管理網站來預覽甚至是發布您的串流。關於預覽與發布串流的詳細資訊,請參考Microsoft Azure中文部落格如何使用 Microsoft Azure Media Services 進行現場直播 ( Live Streaming )

做為替代方案,您也可以使用 http://amsplayer.azurewebsites.net/ 來選擇不同的播放器來預覽您的串流視訊。

進階設定

在預設的情況下,Azure Media Service 通道被設定為每兩秒內嵌主畫面資料,並且使用 HLS 輸出 3 對 1 的對映設定 ( 3 to 1 mapping ),這代表著若您每兩秒內嵌一次主畫面資料,則您的 HLS 輸出片段則為六秒 ( 3 * 2 = 6 second )。

若您想要調整這個內嵌的時間間隔,您必須使用 SDK。因為這種進階設定無法透過 Azure 入口網站做設定。您可以透過 Creating a Live Streaming Application with the Media Services SDK for .NET 來了解更多使用SDK來進行進階設定的資訊

關於設定的參數,請參閱 :

ChannelInput/KeyFrameInterval

ChannelOutput/Hls/FragmentsPerSegment

總結與未來發展

本篇文章介紹了如何在 Azure Media Service 使用支援 RTMP 協定的多種編碼器,以及介紹了詳細的設定細節 。

除了上述的功能之外,您還可以使用 Azure Media Service 完成更多的功能,更多的資訊您可以參考官網 Azure Media Services”,也可以透過 SDK 來完成建立即時串流 Working with Azure Media Services Live Streaming”

希望您透過上述的文章可以了解如何在 Azure Media Service 上使用 RTMP 協定的編碼器,若是有任何的問題,可以透過官網讓我們知道。

這篇文章原始發佈於「Microsoft Azure 中文部落格」

Comments (0)

Skip to main content