Windows Azure Media Services: 単一動画ファイルアップロードのサンプルコード

ここでは、SDK for .NETを使っての、単純なファイルのアップロードをするコードを解説します。
なお、それぞれのコードではエラーハンドルは行っていませんので、本番時には必ずお願いします。

事前に必要なもの

  • Windows Azure Media Services SDK for .NETの開発環境
  • 動画のファイル。なんでもいいです。

大まかな手順

以下の流れで書いていきます。SDK2.0以降となって手順が少し増えました。その代り複数シナリオへの対応力が増しました。


 

各オブジェクトの解説

オブジェクト名

解説

CloudMediaContext

Windows Azure Media ServicesAPIとの接続を行います。スレッドセーフではないので、マルチスレッド環境ではインスタンス毎にオブジェクトを作成してください。

Asset

メディアファイルの「塊」です。Smooth StreamingHLSでの配信の場合は、複数のビットレートのファイルが作成され、それらの情報をもったManifest/indexファイルなどがさらに必要となります。
実態はWindows Azure Blob Storageに保存されています。AES256 bitキーなどで暗号化することも出来ます。

AssetFile

メディアファイル一つ一つです。

AccessPolicy

公開する時間・権限の設定です。1つのAssetに対して、5つまでしか設定できません。ファイルサーバー的な個々のユーザーへのアクセス権設定ではなく、全てのユーザーへの設定と位置付けてください。

SAS Locator

ファイル公開ポイントのURLです。実態であるWindows Azure Blob Storage11でマッピングされています。

 

サンプルコード

主要ステップ毎に見ていきましょう。

0) Windows Azure Media Services 接続

var context = new
CloudMediaContext(

        ConfigurationManager.AppSettings[“accountName”],

        ConfigurationManager.AppSettings[“accountKey”]

        );

//context.ParallelTransferThreadCount = 100;

解説:

特に難しいことはありません。“accountName”, “accountKey”は、Windows Azure管理コンソールから取得ください。
ParallelTransferThreadCount
は、並列ファイル実行スレッドの上限値です。初期値は10です。

 

1) 空のAsset 作成

var targetFile = new
FileInfo(@”D:\Demo\KeepShopping_Japan_SD.wmv”);

// 1. 空のAssetを作成

var ingestAsset = context.Assets.Create(

                targetFile.Name,

                AssetCreationOptions.StorageEncrypted);

// 2. 空のAssetFileを作成

var ingestAssetFile = ingestAsset.AssetFiles.Create(targetFile.Name);

解説:

Assets.Create() では、Assetの名前と、暗号化オプションを指定しています。暗号化はクライアントライブラリ内部で実施されるため、通信中も暗号化されたままです。
その後、AssetFileを作成します。アップロードは、このAssetFileが空の器の状態であるため、「上書き」をするという考え方です。

 

2) ファイル上書き場所の作成

// 1. AccessPolicy を作成

var uploadAccessPolicy = context.AccessPolicies.Create(targetFile.Name,

                    TimeSpan.FromHours(3),

                    AccessPermissions.Write | AccessPermissions.List);

// 2. SAS Locatorを作成

var locator = context.Locators.CreateLocator(LocatorType.Sas,

                    ingestAsset,

                    uploadAccessPolicy);

解説:

このSAS Locatorは、3時間のみ書き込める状態で公開されます。ファイルアップロードの予測時間と合わせて調整ください。勿論、アップロード後に「削除」出来ます。アップロード時間の予測が難しい場合は、公開間隔を長めにして、アップロード後、即座に削除することをお勧めします。

3) ファイルアップロード (1) 同期実行

// 同期実行

ingestAssetFile.Upload(targetFile.FullName);

解説

ファイルのアップロードを行います。ファイルのパスを指定します。
このステートメントが終わるとファイルはBlob Storageの中に格納されています。アップロードの途中経過は一切わかりません。

 

3) ファイルアップロード (2) 非同期実行

// :: 非同期実行

// —- ファイル転送 途中経過取得用 —-

BlobTransferClient transferClient = new
BlobTransferClient();

transferClient.TransferProgressChanged += (s, e) =>

{

    Console.WriteLine(” ** 経過 {0}%”, e.ProgressPercentage);

};

// ———————————-

 

var uploadTask = ingestAssetFile.UploadAsync(

            targetFile.FullName,

            transferClient,

            locator,

            System.Threading.CancellationToken.None);

 

uploadTask.Wait();

// — この段階でファイルの転送が完了

 

解説:

BlobTransferClientは、ファイルのダウンロード/アップロードを行うオブジェクトです。双方で、xxxAsyncメソッドに、これを設定すると、途中経過を取得することが出来ます。
取得間隔は大よそ0.5秒程度です。
コンソールには以下の様に途中経過が出力されています。

 

コーディングはこれで終了です。
プログラムを実行してみてください!

実行結果の確認

ファイルのアップロードが正しく完了すると、以下のようにその結果を確認できます。

  • Windows Azureの管理コンソール内の [コンテンツ]

    1つのファイルが出来ていますね。


     

  • Blob Storageの中

    ここでは、CloudBerry Explorer を使って内容を確認してみます。どのツールでも構いません。
    asset-
    から始まるコンテナが一つ出来ています。


     


     

    ファイルをダウンロードしてみてください。
    ここでは、デスクトップに保存をしてみました。ファイルが開けないのを確認できると思います。「暗号化」するとこのように、それを復号化しない限り内容を見ることはできません。


     

まとめ

Windows Azure Media Services には、非常にシンプルなコーディングでセキュアにファイルのアップロードが出来る事がお分かりいただけたと思います。実は一番苦労するのが、このアップロードの手段です。特に数GBとなるような巨大なファイルを考えると様々な工夫が必要となってくる事が想像つくでしょう。
それぞれに対して、Windows Azure Media Servicesが手をうっていることを、次の機会にご紹介していきます。

広告

Windows Azure Media Services: 単一動画ファイルアップロードのサンプルコード” への2件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中