
クラウドニュースをフォローしている場合は、おそらく2012年ロンドンオリンピックの放送にWindows Azure Media Servicesが使用されたことを既にご存じでしょう。
それらが何であり、どのように使用できるかを見てみましょう。
少し簡略化するために、 Windows Azure Media ServicesはMicrosoft Media Platformのテクノロジーであり、ほとんどがクラウドに移行されたパートナーのテクノロジーです。 言い換えれば、これらは実証済みの使い慣れたソリューションであり、一方で、これらのソリューションをスケーリングして、メディアコンテンツのコーディング、ブロードキャスト、および配信に統合する機能です。
Windows Azure Media Servicesは、独自のメディアサービスとアプリケーションを構築するために次のサービスを提供します。
- コンテンツをダウンロードする
- 再コーディング
- フォーマット変換、
- コンテンツ保護
- オンデマンドで放送し、
- 生放送も
- 分析と広告。
または、上記のすべてを図の形式で提示すると、Windows Azure Media Servicesのアーキテクチャは次のようになります。

図をよく見ると、Windows Azure Media Servicesの別の優れた機能を見ることができます。これらは、現在市販されているほぼすべての種類のデバイス(通常のデスクトップコンピューターからテレビのセットトップボックスまたはスマートフォンまで)のメディアコンテンツのソースになります。
そしてもちろん、この素晴らしい機能はREST APIを介して開発者が利用できます。これにより、使い慣れた、便利な、またはたとえば標準のテクノロジー組織を使用して、Windows Azure Mediaサービスに基づくソリューションを開発できます。 .NETプラットフォームの開発者は、Windows Azure Media Services SDK for .NETを使用できます。これは、提供されたREST APIを便利にラップします。
これで、Windows Azure Media Servicesの概要を把握できました。 それらについてよりよく知りましょう。
カスタマーサービス開発
MacおよびPC
これで、Microsoft Silverlightを使用してMacおよびPC用に開発できます。 しばらくして、SDKを使用してFlashでクライアントを開発できるようになります。 Silverlightで利用可能なSDK:Silverlight用のスムーズストリーミングクライアント
Microsoft Media Platform:Silverlightのプレーヤーフレームワーク
Windows 8
Windows 8でWinRTアプリケーションを開発するには、次のSDKを使用してHTML / JS、C#またはC ++で開発できます。WinRT Windows 8アプリケーション用のスムーズストリーミングクライアントSDK
Microsoft Media Platform:WinRT Windows 8アプリケーション用のプレーヤーフレームワーク
Windows Phone
Microsoftは、Windows Phoneでビデオアプリケーションを構築するためのSDKを提供しています。Silverlight用のスムーズストリーミングクライアント
Microsoft Media Platform:Silverlightのプレーヤーフレームワーク
iOSデバイス
iPhone、iPod、iPadなどのiOSデバイスの場合、MicrosoftはPlayReadyを備えたiOSデバイス用のSmooth Streaming SDKを出荷しています。PlayReadyを使用したiOSデバイス用のスムーズストリーミングSDK
Androidデバイス
マイクロソフトパートナーは、これらのデバイス用のSDKを開発および提供しています。Xbox
Xboxは、スムーズストリーミングでXbox LIVEアプリをサポートしています。 Xbox LIVEアプリケーション開発キット(ADK)の内容:Xbox LIVE ADKのスムーズストリーミングクライアント
Microsoft Media Platform:Xbox LIVE ADKのプレーヤーフレームワーク
組み込みデバイスおよびその他のデバイス
テレビ、セットトップボックス、メディアプレーヤーなどの組み込みデバイス、つまり独自の開発フレームワークを備え、メディアコンテンツを操作するデバイスの場合、移植用のパッケージのライセンスを取得できます。Smooth Streamingクライアントポーティングキット
Microsoft PlayReadyデバイスポーティングキット
サービスパーツを使用する
Windows Azure Media Servicesの使用を開始するには、まずWindows Azure管理ポータルで作成する必要があります(現在ベータ版です)。
サービスの状態がアクティブになった後、動作する準備が整いました。

その後、.NET開発者であり、既にVisual Studio 2010 SP1がインストールされている場合は、さらにインストールする必要があります。
- Web Platform Installerを使用したWindows Azure SDK 1.6
- Windows Azure Media Services SDK for .NET
- OData v3用のWCF Data Services 5.0
これで、Windows Azure Media Servicesを使用してアプリケーションを開発する準備が整いました。
Windows Azure Media Servicesと連携するシンプルなアプリケーションを作成しましょう。
Visual Studioで.NET Framework 4のコンソールアプリケーションプロジェクトを作成し、次のライブラリをリファレンスのプロジェクトに追加します。
Microsoft.WindowsAzure.MediaServices.Client.dll
\プログラムファイル(x86)\ Microsoft SDK \ Windows Azure Media Services \ Services SDK \ v1.0 \
Microsoft.WindowsAzure.StorageClient.dll
\ Program Files \ Windows Azure SDK \ v1.6 \ bin \
Microsoft.Data.Edm.dll
(\ Program Files(x86)\ Microsoft WCF Data Services \ 5.0 \ bin \ .NETFramework \
Microsoft.Data.OData.dll
(\ Program Files(x86)\ Microsoft WCF Data Services \ 5.0 \ bin \ .NETFramework \
Microsoft.Data.Services.Client.dll
(\ Program Files(x86)\ Microsoft WCF Data Services \ 5.0 \ bin \ .NETFramework \
Microsoft.Data.Services.dll
(\ Program Files(x86)\ Microsoft WCF Data Services \ 5.0 \ bin \ .NETFramework \
System.Spatial.dll
(\ Program Files(x86)\ Microsoft WCF Data Services \ 5.0 \ bin \ .NETFramework \
System.configuration
Media Servicesアカウント設定をアプリケーションのapp.configに追加します。
<?xml version="1.0"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> </startup> <appSettings> <add key="accountName" value="Add-Media-Services-Account-Name" /> <add key="accountKey" value="Add-Media-Services-Account-Key" /> </appSettings> </configuration>
作業結果のローカルビデオファイルと既存のフォルダーを指すコード変数に追加します。
private static readonly string _singleInputFilePath = Path.GetFullPath(@"C:\mediaFiles\interview.wmv"); private static readonly string _outputFilesFolder = Path.GetFullPath(@"C:\outputfiles");
ファイル内のusingブロックを次のものに置き換えます。
using System.Linq; using System; using System.Configuration; using System.IO; using System.Threading; using System.Collections.Generic; using Microsoft.WindowsAzure.MediaServices.Client;
アカウントデータを含む変数を定義します。
private static readonly string _accountKey = ConfigurationManager.AppSettings["accountKey"]; private static readonly string _accountName = ConfigurationManager.AppSettings["accountName"];
サーバーコンテキストと作業の結果を参照する変数を定義します。
private static CloudMediaContext _context = null; static string _outputAssetID = null;
Mainメソッドで、サービスコンテキストの作成を追加します。
_context = new CloudMediaContext(_accountName, _accountKey);
次に、メディアデータを作成してサービスにアップロードする必要があります。
static IAsset CreateAndUploadAsset(string inputMediaFilePath) { IAsset theAsset = _context.Assets.Create(inputMediaFilePath, AssetCreationOptions.StorageEncrypted); Console.WriteLine("Asset name: " + theAsset.Name); Console.WriteLine("Asset ID: " + theAsset.Id); Console.WriteLine("Time created: " + theAsset.Created.Date.ToString()); Console.WriteLine("Encrypted status: " + theAsset.Options.ToString()); return theAsset; } IAsset asset = CreateAndUploadAsset(_singleInputFilePath);
サーバー上のトランスコーディングタスクのために、いくつかの補助関数を作成します。
// static void CreateEncodingJob(IAsset asset, string outputFolder) { IJob job = _context.Jobs.Create("My Encoding Job"); // - IMediaProcessor processor = GetMediaProcessor("Windows Azure Media Encoder"); // ITask task = job.Tasks.AddNew("My encoding task", processor, "H.264 256k DSL CBR", TaskCreationOptions.None); // , task.InputMediaAssets.Add(asset); // Asset task.OutputMediaAssets.AddNew("Output asset", true, AssetCreationOptions.None); // . job.Submit(); // CheckJobProgress(job.Id); // Job job = GetJob(job.Id); // IAsset outputAsset = job.OutputMediaAssets[0]; // _outputAssetID = outputAsset.Id; // SAS URL string sasUrl = GetAssetSasUrl(outputAsset, TimeSpan.FromMinutes(30)); // URL string outFilePath = Path.GetFullPath(outputFolder + @"\" + "SasUrl.txt"); WriteToFile(outFilePath, sasUrl); }
補助機能。
作業の終了を待って、コンソールにステータスを表示します。
private static void CheckJobProgress(string jobId) { // bool jobCompleted = false; // const int JobProgressInterval = 20000; while (!jobCompleted) { // Job IJob theJob = GetJob(jobId); // switch (theJob.State) { case JobState.Finished: jobCompleted = true; Console.WriteLine(""); Console.WriteLine("********************"); Console.WriteLine("Job state: " + theJob.State + "."); Console.WriteLine("Please wait while local tasks complete..."); Console.WriteLine(); break; case JobState.Queued: case JobState.Scheduled: case JobState.Processing: Console.WriteLine("Job state: " + theJob.State + "."); Console.WriteLine("Please wait..."); Console.WriteLine(); break; case JobState.Error: break; default: Console.WriteLine(theJob.State.ToString()); break; } // , Thread.Sleep(JobProgressInterval); } }
メディアプロセッサをリクエストします。
private static IMediaProcessor GetMediaProcessor(string mediaProcessor) { // // MP4 to Smooth Streams Task // Windows Azure Media Encoder // PlayReady Protection Task // Smooth Streams to HLS Task // Storage Decryption // , var theProcessor = from p in _context.MediaProcessors where p.Name == mediaProcessor select p; // IMediaprocessor. IMediaProcessor processor = theProcessor.First(); if (processor == null) throw new ArgumentException(string.Format(System.Globalization.CultureInfo.CurrentCulture, "Unknown processor", mediaProcessor)); return processor; }
ジョブへのリンクを取得:
static IJob GetJob(string jobId) { // Job Id var job = from j in _context.Jobs where j.Id == jobId select j; // IJob theJob = job.FirstOrDefault(); // , Job :) if (theJob != null) return theJob; else Console.WriteLine("Job does not exist."); return null; }
結果をコーディングするためのSAS URLの取得:
static String GetAssetSasUrl(IAsset asset, TimeSpan accessPolicyTimeout) { // IAccessPolicy readPolicy = _context.AccessPolicies.Create("My Test Policy", accessPolicyTimeout, AccessPermissions.Read); // locator, asset ILocator locator = _context.Locators.CreateSasLocator(asset, readPolicy, DateTime.UtcNow.AddMinutes(-5)); Console.WriteLine("Locator path: "); Console.WriteLine(locator.Path); Console.WriteLine(); // mp4 - - xml var theOutputFile = from f in asset.Files where f.Name.EndsWith(".mp4") select f; // IQueryable IFileInfo. IFileInfo theFile = theOutputFile.FirstOrDefault(); string fileName = theFile.Name; // SAS URL var uriBuilder = new UriBuilder(locator.Path); uriBuilder.Path += "/" + fileName; Console.WriteLine("Full URL to file: "); Console.WriteLine(uriBuilder.Uri.AbsoluteUri); Console.WriteLine(); return uriBuilder.Uri.AbsoluteUri; }
ファイルへの書き込みのヘルパーメソッド:
static void WriteToFile(string outFilePath, string fileContent) { StreamWriter sr = File.CreateText(outFilePath); sr.Write(fileContent); sr.Close();
メインに追加する必要があります:
CreateEncodingJob(asset, _outputFilesFolder);
そして、あなたは私たちのプログラムを実行することができます。
プログラム結果の例
Asset name: interview Asset ID: nb:cid:UUID:xyzxyza-318a-4a47-b996-27353b23abc3 Time created: 5/24/2012 12:00:00 AM Encrypted status: StorageEncrypted Job state: Queued. Please wait... Job state: Processing. Please wait... Job state: Processing. Please wait... ******************** Job state: Finished. Please wait while local tasks complete... Locator path: https://MediaServicesServer.blob.core.windows.net/asset-zzzz374-1234-4c60-9da8-3daf 7a6dabcd?st=2012-05-24T21%3A59%3A55Z&se=2012-05-24T22%3A29%3A55Z&sr=c&si=b1a0cf8 f-45bf-4f77-a84a-a38c3f8a002d&sig=tWmPLPpNuQpEXvCd2Ik8rCfY5AqjII3gnWgi9ustBI4%3D Full URL to file: https:// MediaServicesServer.blob.core.windows.net/asset- zzzz374-1234-4c60-9da8-3daf 7a6dabcd/interview.mp4?st=2012-05-24T21%3A59%3A55Z&se=2012-05-24T22%3A29%3A55Z&s r=c&si=b1a0cf8f-45bf-4f77-a84a-a38c3f8a002d&sig=tWmPLPpNuQpEXvCd2Ik8rCfY5AqjII3g nWgi9ustBI4%3D
そのため、Windows Azure Media Servicesのサービスに精通し、サービスが提供する最も単純な機能を利用する単純なプログラムを作成することさえ試みました。 サービスの詳細については、次のリンクを参照してください。www.windowsazure.com / en-us / develop / net / how-to-guides / media-services