本文章是由機器翻譯。

Microsoft Azure

Microsoft Azure 媒體服務

Gregory Prentice

下載代碼示例

多年來,微軟已經説明設計和大規模的即時流媒體視頻傳輸的支援。 2014 年索契奧運會就是一個例子。 這需要大量的技術資源,包括硬體伺服器,源的視頻流,編碼、 伺服器冗余 (雙資料中心),輸出自我調整的視頻流,內容傳遞網路 (Cdn),合作夥伴公司和,當然,微軟的工作人員。

所有這些資源 — — 與客戶的軟體發展 — — 需要以確保端到端即時視頻事件很少或沒有事件被執行。 精心安排這些資源的成本是規模的反光的即時流媒體事件。 還有高資本的費用來購買所需的伺服器、 交換器和相關的技術。 這會導致明顯的風險和下面的問題:

  • 是足夠或太多的硬體購買來處理規模的生活事件嗎?
  • 你做什麼說硬體直到下一個事件?
  • 多長時間收購的科技仍將有關嗎?
  • 被正確的技術合作夥伴包括以確保事件精心策劃完美嗎?

考慮到微軟的參與、 知識和成功的視頻直播,微軟 Azure 媒體服務團隊開發了即時流媒體,以減輕這些風險。 團隊成功地流出 2014年索契冬奧會,運行在微軟 Azure 媒體服務全球視頻直播。 雖然這是一個極大的事件,微軟 Azure 提供點播硬體位址的可擴充性。

根據現場視頻事件的大小,對 Azure 媒體服務的請求可能會創建一個規模單位 — — 小型、 中型或大型 — — 提供流媒體視頻直播到幾十萬或只是數百名觀眾。 定價允許現收現付模式,以採購、 使用和釋放活的流媒體服務,提供費用已知事件之前。 硬體和基礎設施正在不斷的更新和刷新。 微軟還維護相關的即時流媒體解決方案的戰略合作關係。

在這篇文章,我將重點在示例場景,將使用新直播從微軟 Azure 媒體服務團隊 (目前在私人預覽),解決上述風險,討論到現有的視頻點播 (VOD) 服務是直播流媒體提供的關係上。

概念和術語

它是重要的是瞭解一些的一般概念和術語關於 Azure 媒體服務。 "通道",指的是開發人員的角度,一個即時視頻流需要通過 Azure 媒體服務的完整的端到端路徑。 通道可以是在不同的國家,與兩個最重要的是被"停止"和"運行"。通道包括協調視頻流通過系統的下列元件:

  • 攝取的 URI:表示在其中通道接收一個或多個視頻的位元速率流交付進入點。
  • 預覽的 URI:收到的通道,應該只用于監測目的的代表即時流出進入點。
  • 程式:與通道和代表生活流的一部分保存到 Blob 存儲作為一種資產相關聯。 在一個通道上和在運行狀態下,使即時視頻流,應該創建至少一個程式。 該程式將積極捕捉視頻而在運行狀態下。
  • 資產:這與程式關聯,表示 Blob 存儲中存儲的資料。 一項資產可能包含一個或多個檔,包括視頻、 音訊、 圖像、 縮略圖集合和清單。 甚至在刪除一個程式後,資產可能仍然存在。
  • 定位器:與該資產和起源有關。 定位器提供用作疏散點的現場直播節目流的 URI。
  • 產地:這與定位器相關聯,表示從資產中多種位元速率 (MBR) 格式,如平滑、 HTTP 活流 (HLS) 和動態自我調整流式處理通過 HTTP URI 定位器視頻流的交貨的可伸縮疏散點。

Azure 媒體服務確保適當的冗余是創建和可用的可靠傳遞的視頻在規模。 那交貨可能涉及消費變流媒體格式,如平滑、 合肥和破折號的許多設備。 圖 1 顯示什麼構成一個通道。

 圖 1 傳遞通道是即時視頻流的完整的端到端路徑
圖 1 傳遞通道是即時視頻流的完整的端到端路徑

它是重要的是理解通道和在通道內創建的一個或多個程式之間的關係。 在圖 2,實況視頻事件已被映射到一個通道表示形式是在運行狀態下從 5 下午 直到 2 上午 它是重要的是注意管道的過渡時間從停止狀態到運行狀態下可以需要 10 到 20 分鐘。 間隔標記 — — Concert1、 Act1、 Act2、 Vip1 Vip2 — — 代表的程式和其計畫的開始和停止時間。 最後,名為過渡時間間隔標記代表當前程式和下一個節目,在那裡一個停止,其他開始之間的時間。

 圖 2 直播視頻事件映射到開始在 5 下午 和在 2 上午結束
圖 2 直播視頻事件映射到開始在 5 下午 和在 2 上午結束

這是一個時間表是如何可能映射到通道使用的程式的一個例子。 定義在圖 2,那裡是一個程式,跨越了整個事件。

Concert1 將會在運行狀態下從 5:15 下午 直到 2 上午,用 10 分鐘的滑動視訊緩衝區。 緩衝可以讓使用者同時查看同一個媒體播放機倒帶。 Concert1 程式提供初級的即時視頻流的整個事件。 Cdn 提供的 Uri 映射事件發生之前。

其餘的程式 — — Vip1、 Act1 和 Act2 Vip2 — — 應該是在運行狀態下期間定義啟動和停止時間,允許轉換的方差。 一個程式不會啟動或立即停止。 你需要的過渡規劃時要考慮一個活的事件。 在同一時間,所有的捕獲視頻,可以在運行狀態下有多個程式。 Concert1 和另一個程式將會啟動和停止過程中的事件。 若要顯示可以如何使用過渡,可以發出一個程式啟動請求為 Vip2 在 6:45 下午,然後程式停止請求為 Vip1 7 下午,在提供 15 分鐘過渡時間。 因此,在這 15 分鐘的過渡階段,可能有三個程式在運行狀態。

一般概念和術語描述了之後,我將重點介紹使用事件時間表所示圖 2,映射到一個使用者方案制定編碼示例使用 Azure 媒體服務 API。

主題:Contoso 的藍調酒吧

知名的美國 地點為有前途的音樂家,Contoso 的藍調酒吧有緊迫的期限,以協調為一個大型的歐洲樂隊叫 Contoso 和休克錢包即將舉行的演唱會。 樂隊的粉絲群是很大程度上是在歐洲。 在 Contoso 的展示將是樂隊的美國 首次亮相。 因此,表明管理人員需要到流演唱會所以可以看樂隊的歐洲球迷基礎在電腦和行動裝置。

Contoso CIO 的藍調酒吧調用一次會議並問他的技術團隊研究並推薦一個解決方案,將滿足以下要求:

  • 它必須易於實現。
  • 它必須大量的不同的設備配置的視頻流。
  • 它必須滿足未知的可擴充性需求。
  • 成本基於幹什麼用在活動期間,現收現付。

衝刺一

Contoso 的藍調酒吧事件策劃團隊花了幾天來定義他們的使用者故事。 這些使用者故事將衝刺規劃交付他們的現場演唱會的視頻流的基礎。 會議期間,團隊定義一些知識差距,將迫使幾個峰值 — — 或要求解決的問題 — — 在衝刺之一。 團隊還定義了以下清單較大的使用者故事,通常被稱為史詩,在標準"作為...... 我想要... 所以,......"的格式:

作為 Contoso 和休克錢包的粉絲,我想要看現場直播的音樂會我在盡可能高的視頻品質的設備上,這樣我可以享受他們的美國 首次亮相。

作為 Contoso 和休克錢包的粉絲,我想看音樂會上我的裝置,在可能的最高視頻品質的視頻,在稍後的日期和時間,這樣我可以看我在閒暇時的事件。

作為 Contoso 的藍調酒吧的代表,我想要提供的我們的音樂會現場直播並減少從我們場地提供即時視頻流,以便我們可以吸引更多的音樂家和客戶,同時存錢的費用。

使用者故事和關聯的穗調查包括:

使用者故事 1.1:作為事件生產職員,我想一個或多個攝像機,這樣我們可以捕獲的現場音樂會。

穗 1.1.1:正在使用什麼相機類型和輸出視頻流是什麼嗎?

生產員工學習他們可以購買高品質使用的攝像機來產生高清晰度 (HD) 視頻/音訊流串列數位介面 (SDI) 結束。

使用者故事 1.2:作為事件的生產員工,我想互聯網的直播視頻流這樣的球迷可以觀看一場音樂會。

穗 1.2.1:如何將相機的視頻飼料送到生產站?

生產人員學習 Contoso 開關公司生產高清 SDI-到--光纖視頻開關。 配有四個攝像頭,他們可以使用此開關。

穗 1.2.2:如何將該視頻提要交付給 IT 部門?

生產人員學會纖維光學視頻切換將輸出高清 SDI 視頻/音訊流,它們可以連接到音訊/視頻切換器。 然後,他們可以控制哪些攝像機信號是通過廣播小組活動。 現場視頻飼料是最終從廣播面板高清 SDI 連接發送。

使用者故事 1.3:作為 IT 職員,我想要提供的視頻流到 Windows,iOS 和 Android 設備所以視頻音樂會有著最大的設備支援。

穗 1.3.1:為了給互聯網帶來的視頻會收到何種類型的視頻飼料?

高清 SDI 視頻飼料將發送到 IT 部門。

穗 1.3.2:目標設備需要哪種類型的視頻?

IT 人員就會發現他們可以使用以下的自我調整視頻協定提供的每個目標設備的視頻:

  • 平滑資料流:Windows 8 和 Windows Phone 8
  • 合肥光源:iOS 和安卓系統
  • 破折號:Windows 8.1,Windows Phone 8 和 Xbox 一

穗 1.3.3:我如何我對互聯網的一種可伸縮的方式提供,視頻?

IT 人員學習微軟宣佈了一項新功能在專門針對流媒體直播視頻在互聯網上的 Azure 上。 隊進行一些研究,發現了 Azure 媒體服務可以提供他們的地點和目標的設備之間的中介層。 最重要的是,他們學習 Azure 媒體服務的詳情如下:

  • 一旦你註冊了 Azure 的帳戶,並添加媒體帳戶,您可以創建一個活的流媒體頻道。 直播頻道是一個電視頻道的代名詞。 所有已分配的伺服器資源致力於為您的程式的交付該通道。 通道可能有很多的程式。 一個程式是一個時隙和關聯的資產的定義。 資產是中 Azure 媒體服務的流媒體視頻的存儲位置。
  • 伺服器分配確保冗余被內置到視頻路徑,沒有單點故障。
  • 即時視頻流可以作為 RTMP 或 MPEG TS 由 Azure 媒體服務通過接收攝入的 URI。
  • 設備可以請求一個本機支援的視頻流。 微軟 Azure 媒體服務將確保視頻打包在基於一個特定于設備的 URI 的適當格式。
  • 支援內置的直播流媒體起源伺服器的安全訪問的 CDN 供應商 Akamai 技術等。

額外的穗 1.3.1、 1.3.2 的結果:IT 人員選擇一個編碼器,可以接收高清 SDI 視頻/音訊流。 此編碼器可以使用高清 SDI 流動態生成多個位元速率流傳遞到 Azure 媒體服務,提供了入口接受 RTMP 或作為輸入格式的 MPEG TS 的 URI。

衝刺兩

以後他們每天早上喝咖啡的儀式,開發商開始開發將促進直播流媒體事件的代碼。

使用者故事 1.4.1:作為開發人員,我想要創建適當的 Azure 帳戶,以便我可以開始編寫代碼以流視頻。

轉到 Azure 網站 (azure.microsoft.com),免費在嘗試按一下按鈕,並按照步驟。 瞭解更多關於設置一個帳戶在 bit.ly/1mfacft。 在註冊過程中,您可以創建一個 Windows 帳戶,作為管理員憑據。 若要創建一個 Azure 媒體服務帳戶,必須首先創建 Azure 存儲帳戶,作為一個活的事件的視頻資產將被存儲在 Blob 存儲。 Azure 媒體服務文件還建議您在同一個資料中心從中你採購的 Azure 媒體服務帳戶中創建存儲帳戶。 例如,在美國西部資料中心中創建存儲帳戶和媒體帳戶。

使用者故事 1.4.2:作為開發人員,我想寫代碼來管理一個通道,這樣我可以提供一個即時的流媒體事件。

創建使用Visual Studio2012 基地專案。 下一步,為 Azure 媒體服務安裝 NuGet 套裝程式。 創建一個稱為 CreateContosLiveEvent 函數,並開始與一個 CloudMediaCoNtext 物件,它總是用來管理您的生活流:

private void CreateContosLiveEvent()
{
  string liveAccount = "yourAzureMediaAccount";
  string liveKey = "yourAzureMediaAccountKey";
  CloudMediaContext LiveServices = new CloudMediaContext(
    liveAccount,  // URI created earlier
    liveKey );    // Account name

編寫代碼以確保起源服務正在運行。 起源服務將直播流給 CDN 供應商,如中所示圖 3

圖 3 起源服務提供即時視頻流內容交付網路供應商

string originName = "abcdefg";
IOrigin origin = LiveServices.FindOrigin(originName);
if (origin == null)
{
  Task<IOrigin> originTask = 
    LiveServices.Origins.CreateAsync(originName, 2);
  originTask.Wait();
  origin = originTask.Result;
}
if (origin.State == OriginState.Stopped)
{
  origin.StartAsync().Wait();
}

然後您需要編寫代碼來創建一個通道 (所示圖 4)。 一個通道需要安全配置為允許入站的視頻流源的身份驗證。 源通常是將人類發展指數 SDI 信號轉換成所需的 MBR 視頻流的 IP 配置編碼器。

圖 4 創建一個頻道為你視頻的飼料

string channelName = "ContsoBluesChannel";
IChannel channel = LiveServices.FindChannel(channelName);
if (channel != null)
{
  Debug.WriteLine("Channel already exists!");
  return;
}
ChannelSettings settings = new ChannelSettings();
Ipv4 ipv4 = new Ipv4();
// Currently setting IP to 0.0.0.0/0 allows all connections
//  Don't do this for production events
ipv4.IP = "0.0.0.0/0";
ipv4.Name = "Allow all connections";
// Protect the ingest URI
settings.Ingest = new IngestEndpointSettings();
settings.Ingest.Security = new SecuritySettings();
settings.Ingest.Security.IPv4AllowList = new List<Ipv4>();
settings.Ingest.Security.IPv4AllowList.Add(ipv4);
// Protect the preview URI
settings.Preview = new PreviewEndpointSettings();
settings.Preview.Security = new SecuritySettings();
settings.Preview.Security.IPv4AllowList = new List<Ipv4>();
settings.Preview.Security.IPv4AllowList.Add(ipv4);
// Create the channel
Task<IChannel> taskChannel = LiveServices.Channels.CreateAsync(
  channelName, "video streaming", ChannelSize.Large, settings);
taskChannel.Wait();
channel = taskChannel. Result;

示例代碼配置攝取和預覽與無類別域間路由 (CIDR) 的 Uri 的格式 IP 位址設置為"0.0.0.0/0"。這允許所有 IP 位址訪問的攝入和預覽的 Uri。 對於生產管道,建議您通過使用已知的值,如您的編碼器的或身份驗證權杖 IP 位址限制訪問。 使用唯一的通道名稱。 將引發的異常是否已存在具有相同名稱的一個通道。

編寫代碼,以便創建程式、 相關的資產和定位器,如中所示圖 5。 所使用的名稱和時間表的值與有關的中顯示的值圖 2。 EnableArchive 標誌設置為 true 在程式創建的任何東西,除了 Concert1 過程中。 True 值指示即時視頻流捕獲期間該程式的運行狀態,仍然堅持為以後消費作為 VOD 關聯的資產。 30 天內訪問策略定位器創建與該資產的清單檔。 這提供了對視頻流的 URI。

圖 5 創建Will在您的飼料期間運行的程式

// Define the program name, DVR window and estimated duration in minutes.
// NOTE: DVR window value most likely will be removed when service 
// reaches public preview.
Tuple<string, int, int>[] programSettings = new Tuple<string, int, int>[]
{
  new Tuple<string,int,int>( "Concert1", 60, 60 ),
  new Tuple<string,int,int>( "Vip1", 75, 75 ),
  new Tuple<string,int,int>( "Act1", 90, 90 ),
  new Tuple<string,int,int>( "Act2", 165, 165 ),
  new Tuple<string,int,int>( "Vip2", 120, 120 ),
};
foreach (Tuple<string, int, int> programSetting in programSettings)
{
  IAsset asset = null;
  // To persist specific program's asset for Video on Demand (VOD) this
  // code tests if the DVR window and Event duration equal in length.
  // If true it sets the enable archive flag to true, which tells the
  // system a program's asset should not be deleted automatically.
  bool enableArchive = programSetting.Item2 == programSetting.Item3;
  try
  {
    // Create the asset that is used to persist the video streamed
    // while the program is running and VOD.
    asset = LiveServices.Assets.Create(programSetting.Item1 + "_asset",
      AssetCreationOptions.None);
    Task<IProgram> taskProgram = channel.Programs.CreateAsync(
      programSetting.Item1,
      "program description",
      // Enable archive note forcing to true for now
      true, // enableArchive,
    // NOTE: DVR window value most likely will be removed
    // This is not used
    TimeSpan.FromMinutes(programSetting.Item2),
    // Estimated duration time
    TimeSpan.FromMinutes(programSetting.Item3),
      asset.Id);
    taskProgram.Wait();
    LiveServices.CreateLocators(asset, TimeSpan.FromDays(30));
  }
  catch (Exception exp)
  {
    Debug.WriteLine(exp.Message);
  }
}

與 Azure 媒體服務 VOD 資產一樣,您可以從一個定位器,獲得起源的 URI。 然後,您將會對選擇的 CDN 供應商提供這問題的發生。 因為 enableArchive 標誌被設置,一旦一個程式已停止,你可以使用相同的起源 URI 提供即時流作為 VOD 資產。

剩下的任務是編寫代碼來啟動一個管道和程式在需要時。 請求啟動一個通道的信號 Azure 媒體服務開始分配資源的入口服務、 冗余和負載平衡。 當一個通道開始時,之間的啟動和運行狀態的時間可以採取 10 至 20 分鐘。

你應該開始通道足夠早之前的事件,不幹擾查看即時視頻流的能力。 它也是重要的是注意到一旦開始您的頻道,計費收費開始積累。 如果你不打算運行 24 x 7 直播頻道,你應該停止通道,當他們在不使用關聯的程式。 啟動一個通道所需的實際代碼是非常簡單的:

// Start channel
Task start = channel.StartAsync();
start.Wait();

你需要啟動的程式的代碼也是簡單明瞭的:

start = program.StartAsync();
start.Wait();

為事件的一個主要要求是控制通道和每個程式啟動和停止的能力。 因此,準備發展的下一個專案是一個簡單的使用者介面,將創建該事件在其全部通過調用 CreateContosLiveEvent 方法。 這就允許啟動和停止通道和每個相應的程式,根據需要。

若要關閉出這個場景中,當您開發使用 Azure 媒體服務的應用程式,團隊的其他成員一直忙著設置攝影機、 運行電纜,安裝的視頻編碼器和配置 Cdn。 最後,工作人員執行一系列的測試,以確保端到端方案作品。

一旦實際音樂會即將發生,即時視頻流開始和不同的使用者設備,桌面電腦,平板電腦連接到 Azure 媒體服務查看視頻直播。 總是有在測試回合期間發現的幾個問題,但員工工作去,和所有的辛勤工作完成時間顯示視頻直播的音樂會。

一項艱巨的任務,更容易

舉辦一定規模的即時視訊活動是個令人卻步的工作。 在 Azure 媒體服務等解決方案之前, 經常提供流媒體視頻直播所需重大資本支出基礎設施設備。 其他關鍵的決策包括系統需要支援不同的事件,不同的大小和規模的數量。 這種購買往往是要麼結束-或下-調配。 微軟 Azure 媒體服務回應的複雜性和成本。 活祭是建立在 Azure 媒體服務 VOD 功能集,提供一個單一的、 統一的平臺和 Api,可用於提供這兩個直播和點播內容到該行業在規模上面。


Gregory Prentice 是一位經驗豐富的軟體建築師與超過 25 年的經驗,設計和創建應用程式的各種啟動公司。他開始致力於微軟開發了以下專案:Locadio、 Microsoft Hohm 和 Microsoft 公用程式率的服務。最近他説明微軟 Azure 媒體服務和三角洲 Tre 團隊交付 2014年索契冬奧會的即時視頻流。他目前是福音傳教士在微軟開發者和平臺福音事工組中。讀他的博客 blogs.msdn.com/b/greg-prentice

感謝以下微軟技術專家對本文的審閱:Steven.古利特,校長 PM線上服務:和Jason休斯,奧運會上的線上服務