Windows Azure メディアサービス ネタ その3 〜 認証プロキシ越の動画アップロード 〜
今までも以下の様に Windows Azure メディアサービスに関する情報を記載させて頂いた。
- Windows Azure メディアサービス ネタ その1 〜動画のアップロードと再生〜 id:waritohutsu:20130114:1358150068
- Windows Azure メディアサービス ネタ その2 〜 SDK 2.0 Preview のはまりどころ 〜 id:waritohutsu:20130119:1358580057
今回は、認証プロキシを経由して Windows Azure メディアサービスに動画ファイルをアップロードする方法について紹介する。
概要
Windows Azure メディアサービスは動画ファイルをブロブストレージ(Windows Azure のクラウドストレージの一種)に格納するため、API の内部でブロブコンテナに格納する REST API も利用している。内部では System.Data.Services.Client.DataServiceContext を利用しているため、http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/7e18b3c2-848a-4296-933e-983779c46de9 の記事を参考に次のサンプルコードを作成した。
サンプルコード
以下に、認証プロキシを超えて Windows Azure メディアサービスに動画をアップロードするサンプルコードを記載する。System.Net.HttpWebRequest.DefaultWebProxy を利用してデフォルトで使用するプロキシサーバを変更し、認証情報を System.Net.NetworkCredential で設定する。System.Net.HttpWebRequest.DefaultWebProxy で設定を変更すると、他のWebリクエストも同様のプロキシ設定を利用するので注意が必要だ(nullを代入するとプロキシ設定は無効化される)。
using System; using System.IO; using System.Threading; using System.Threading.Tasks; using Microsoft.WindowsAzure.MediaServices.Client; namespace ConsoleApplication1 { class Program { private readonly static string _accountName = "<メディアサービスアカウント名>"; private readonly static string _accountKey = "<メディアサービスのアカウントキー>"; static void Main(string[] args) { Console.WriteLine("Main() start"); System.Net.HttpWebRequest.DefaultWebProxy = new System.Net.WebProxy(@"<認証プロキシのURL>", true, null, new System.Net.NetworkCredential("<ユーザ名>", "<パスワード>")); UploadMediaFile(); Console.WriteLine("Main() end"); Console.ReadLine(); } public static void UploadMediaFile() { string filePath = @"C:\Temp\何かの動画.wmv"; var context = new CloudMediaContext(_accountName, _accountKey); var iAsset = context.Assets.Create("認証プロキシ経由のアセット", AssetCreationOptions.None); var assetFile = iAsset.AssetFiles.Create(Path.GetFileName(filePath)); assetFile.UploadProgressChanged += assetFile_UploadProgressChanged; Console.WriteLine("upload start"); assetFile.Upload(filePath); Console.WriteLine("upload end"); } static void assetFile_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e) { Console.WriteLine("★ {0}% uploaded. {1}/{2} bytes", e.Progress, e.BytesUploaded, e.TotalBytes); } } }