なぜAPIなのか?
読者の皆さんの周囲でも動画を扱う機会がだいぶ増えてきていると思います。高性能なモバイルデバイスの普及で、
動画を効率的にストリーミング配信する場合には、
商用サービス規模になると、
現在のコンテンツ管理システムと、
Microsoft Azureメディアサービスは、
そのほとんどの機能をREST APIとして公開しています。ですので、
つまり、
すでに、
Media ServicesのAPI
ここでは、

すべての基盤は、
メディアサービスでは、
API呼び出しの内部では、

REST APIは、
ここでは、
- .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つのオブジェクトで、
- ファイルをアップロードすることは、
Assetの作成 - エンコードなどをするためには、
Jobの作成 - 配信をするためには、
Locatorの作成
2つの.NET SDK
.NET SDKでは、

Media Services .NET SDKが当初より提供されていたものです。REST API形式に比較的忠実ですので、
/// 空の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);
ここでは、
.NET SDKをさらに抽象化したものが、
同じ、
var asset = context.Assets.CreateFromFile(
@"C:\Video\azure.wmv",
AssetCreationOptions.None,
(a, p) =>
{
Console.WriteLine(" 経過 {0}%", p.Progress);
});
なんと、
注目をすべき点は、
Media Services .NET SDK extensionsでのVODアプリ開発
ここでは、
Azureメディアサービスへの接続
前回もご紹介したコードですので、
var context = new CloudMediaContext(
"accountName",
"accountKey"
);
ファイルのアップロード
指定したファイルをアップロードする、
var asset = context.Assets.CreateFromFile(
@"C:\Video\azure.wmv",
AssetCreationOptions.None,
(a, p) =>
{
Console.WriteLine(" 経過 {0}%", p.Progress);
});
とくに重要な引数を説明します。
引数 | 説明 | ||
---|---|---|---|
Asset Creation Options | ストレージ内でファイルを暗号化して保持するかどうかを指定します。 | Common Encryption Protected | PlayReadyなどのDRMなどで保護済みのもの |
Envelope Encryption Protected | AESなどの暗号化で保護されているもの | ||
None | 暗号化しない | ||
Storage Encrypted | Azureで管理しているストレージの暗号化機能を使う |
エンコード(トランスコード)実行
エンコード時には、
// 1. ジョブ作成
var job = context.Jobs.CreateWithSingleTask(
MediaProcessorNames.WindowsAzureMediaEncoder,
MediaEncoderTaskPresetStrings.H264AdaptiveBitrateMP4SetSD16x9,
asset,
asset.Name + "- output",
AssetCreationOptions.None);
Media Services .NET SDK Extensionsでは、
MediaProcessorNames:
名前 | プロセッサ ID | 説明 |
---|---|---|
Azure Media Encoder | nb:mpid:UUID:70bdc2c3-ebf4-42a9-8542-5afc1e55d217 | Media Encoderを使用してエンコードタスクを実行できます。サムネイル作成、 |
Azure Media Packager | nb:mpid:UUID:A2F9AFE9-7146-4882-A5F7-DA4A85E06A93 | .mp4からスムーズ ストリーミング形式への変換や、 Azure Media Packagerのタスクプリセット |
Azure Media Encryptor | nb:mpid:UUID:38A620D8-B8DC-4E39-BB2E-7D589587232B | PlayReady Protectionを使用して、 Azure Media Encryptorのタスクプリセット |
Storage Decryption | nb:mpid:UUID:aec03716-7c5e-4f68-b592-f4850eba9f10 | ストレージ暗号化を使用して暗号化されたメディア資産を解読することができます |
- Media Services SDK for .NETを使って資産を処理する
- http://
msdn. microsoft. com/ ja-jp/ library/ jj129580. aspx
MediaEncoderTaskPresetStrings
個々のエンコード設定については、
- Media Services Encoder用のタスクプリセット
- http://
msdn. microsoft. com/ ja-jp/ library/ dn619392. aspx
// 2. ジョブ実行.
job.Submit();
job = job.StartExecutionProgressTask(
j =>
{
Console.WriteLine(" 状態: {0}", j.State);
Console.WriteLine(" 経過: {0:0.##}%", j.GetOverallProgress());
},
System.Threading.CancellationToken.None).Result;
JobはSubmitをするまでは実行されません。
また、
- 取得間隔が一定ではない:サンプルは、
Azure Media ServicesのAPIサーバへポーリングをしており、 その結果として変更があった場合のみ状態取得ができます。 - 大量アクセス時には、
パフォーマンス劣化の可能性がある:APIサーバも十分には用意していますが、 さらなるスケールアウトのためには、 Azure Queueストレージも利用できます。詳細は以下をご確認ください。
- Media Services ジョブ通知の処理
- http://
msdn. microsoft. com/ ja-jp/ library/ dn261241. aspx
配信準備の設定
ストリーミングを行うためには、
context.Locators.CreateLocator(
LocatorType.OnDemandOrigin,
outputAsset,
context.AccessPolicies.Create(
"Streaming Access Policy",
TimeSpan.FromDays(30),
AccessPermissions.Read
)
);
ストリーミングサーバの要求後、
配信方式 | メソッド |
---|---|
Smooth | Asset. |
HLS | Asset. |
MPEG-DASH | Asset. |
MPEG-DASHは、
まとめ
.NETを使うことで、
まずは手軽に動画配信を楽しんでください。