キャッチアップ! Windows Azure メディアサービス

第2回 .NET DeveloperのためのMicrosoft Azureメディアサービスを使ったアプリケーション開発

この記事を読むのに必要な時間:およそ 4.5 分

なぜAPIなのか?

読者の皆さんの周囲でも動画を扱う機会がだいぶ増えてきていると思います。高性能なモバイルデバイスの普及で,誰でも簡単に動画撮影ができるようになってきたことが,その背景として挙げられます。また,4Gなどのインターネット回線の進化も大きな要因の1つでしょう。

動画を効率的にストリーミング配信する場合には,取り込み,エンコード,暗号化などのワークフローを組み上げる必要があります。これらは多くの場合,コンテンツ管理システムから制御されます。

商用サービス規模になると,コンテンツ管理システムは,B2C,B2Eだけでなく,B2B用のポータル,会員管理,課金,など各種システムと連携しています。つまり,HTML 1-2枚のキャンペーンサイトとは,バックエンドシステムの複雑性が増すのに,ビジネス上のパートナーリングと共に柔軟性への要求は高まるばかりです。

現在のコンテンツ管理システムと,動画配信システムの連携は,サーバやファイルの物理的な場所に依存しているケースが多く,そのためワークフローの変更と,それを簡単に実作業として行うのは大変です。

Microsoft Azureメディアサービスは,そうした問題に対応しています。

そのほとんどの機能をREST APIとして公開しています。ですので,ワークフローを柔軟に組むことができます。また,背後の物理的なインフラや,ジョブスケジューラなどを意識する必要はありません。また,そのアプリケーションの稼働場所も,Webサーバだけでなく,オンプレミスのサーバでも,PC,スマートフォンのアプリケーションでも,どこからでも呼び出せるようになっています。

つまり,スマートフォンからの動画のアップロードとプレビュー再生を制御するWebサイトのようなものから,映像コンテンツの制作から,パートナー会社とのレビューなどの共同作業。コンテンツ販売や,DRMを必要とするような配信まで,単一のプラットフォームで実にさまざまなシナリオに対応しているのです。

すでに,2014年のソチオリンピックでは,その大規模ライブ配信も無事のりきり,アメリカ対カナダのホッケーの準決勝では,210万人という史上最高の同時視聴者にも柔軟に対応してきました。

Media ServicesのAPI

ここでは,Media ServicesのAPIについて見ていきます。

図1 Azureメディアサービスの概要

図1 Azureメディアサービスの概要

すべての基盤は,図1で一番下にある世界各国にあるMicrosoft Azureのデータセンターと,その中のストレージ,コンピュートなどです。一般的には,動画配信のアプリケーションを組むと言えば,ここにエンコーダーや,ストリーミングサーバなどをインストールし,ジョブスケジューリングや高可用性のための監視ツールもインストール・構成をします。

メディアサービスでは,この部分が全て実装済みで,Microsoftによって維持・管理されており,皆さんがその作業をする必要性はありません。さらに外部から制御できるようにREST APIサーバ群を,上位層にもっています。

API呼び出しの内部では,実にさまざまな処理が行われています。

図2 Azureメディアサービスのアーキテクチャ

図2 Azureメディアサービスのアーキテクチャ

REST APIは,呼び出しプラットフォームを選びませんが,実際のコーディング作業はそれなりに増えます。そのため,REST APIをラッピングした以下のSDKが提供されています。

ここでは,それぞれのSDKの参考情報を挙げておきます。

.NET
https://www.nuget.org/packages/windowsazure.mediaservices
https://github.com/Azure/azure-sdk-for-media-services
Java
http://msdn.microsoft.com/en-us/library/azure/hh690946.aspx
PHP
https://github.com/Azure/azure-sdk-for-php
Node.js
https://github.com/fritzy/node-azure-media

オブジェクトモデル

すべてはCloudMediaContextオブジェクトから始まります。

図3 Media Services SDK for .NETの構成

図3 Media Services SDK for .NETの構成

以下の3つのオブジェクトで,映像配信のための操作をします。

  • ファイルをアップロードすることは,Assetの作成
  • エンコードなどをするためには,Jobの作成
  • 配信をするためには,Locatorの作成

2つの.NET SDK

.NET SDKでは,Media Servicesの機能のほとんどをカバーしているだけではなく,LINQなど最新の.NET環境で開発ができるようになっています。

.NET SDKの関連性

.NET SDKの関連性

Media Services .NET SDKが当初より提供されていたものです。REST API形式に比較的忠実ですので,詳細なコントロールができました。ですが,単純なファイルのアップロードだけでも,それなりのコードを記述する必要がありました。

リスト ファイルを非同期でアップロードするサンプルコード(Media Services .NET SDK)

/// 空のAsset作成
var ingestAsset = Context.Assets.Create(
    targetFile.Name,
    AssetCreationOptions.None
);
/// 空のAssetFile作成
var ingestAssetFile = ingestAsset.AssetFiles.Create(
        targetFile.Name);

 /// ファイル転送モニタリングオブジェクト作成
BlobTransferClient transferClient = new BlobTransferClient();
transferClient.TransferProgressChanged += (s, e) =>
{
    Console.WriteLine(" {0}: 経過 {1}%", e.LocalFile, e.ProgressPercentage);
};

/// ファイルがアップロード完了する間だけ,公開ポイントを作成
var uploadAccessPolicy = Context.AccessPolicies.Create(targetFile.Name,
                        TimeSpan.FromHours(3),
        AccessPermissions.Write | AccessPermissions.List);
var locator = Context.Locators.CreateLocator(LocatorType.Sas,
                ingestAsset,
                uploadAccessPolicy);

/// ファイルのアップロードを実行
var uploadTask = ingestAssetFile.UploadAsync(
        targetFile.FullName,
        transferClient,
        locator,
        System.Threading.CancellationToken.None);

ここでは,7ステップあります。

.NET SDKをさらに抽象化したものが,.NET SDK Extensionsになります。

同じ,ファイルアップロードのサンプルコードを見てみましょう。

ファイルを非同期でアップロードするサンプルコード(Media Services .NET SDK Extensions)

var asset = context.Assets.CreateFromFile(
    @"C:\Video\azure.wmv",
    AssetCreationOptions.None,
    (a, p) =>
    {
        Console.WriteLine("  経過 {0}%", p.Progress);
    });

なんと,1ステップになります。

注目をすべき点は,既存のAssetsという.NET SDKのコレクションオブジェクトはそのままで,.NET SDK Extensionでメソッドが追加されています。双方を切り替えることなく使えますので,まずは.NET SDK Extensionsのメソッドで試し,できなかった場合に,.NET SDKで,という方策で試すことができます。

著者プロフィール

畠山大有(はたけやまだいゆう)

日本マイクロソフト株式会社

テクノロジーエバンジェリスト

バックナンバー

キャッチアップ! Windows Azure メディアサービス

コメント

コメントの記入