8

ASP.NET MVC 4を使用して、ユーザーがWebサイトからビデオとオーディオをアップロードできるようにしています。このためのバックエンドとしてAzureMediaServiceを使用したいと思います。

Azureのチュートリアルに従って、私が遭遇した問題は、Azure MediaServicesSDKがデータの生のストリームをアップロードできないように見えることです。代わりに、私が見つけた唯一のアップロードメソッドはパス文字列引数を使用します。

ファイルをディスクに保存することを避け(デフォルトではすでにディスクにストリーミングされています)、要求が投稿されたファイルをAzureに直接ストリーミングできるようにしたいと思います。

これまでの私のコードは次のとおりです。

public void SaveMedia(string fileName, System.IO.Stream stream)
{
    CloudMediaContext mediaCloud = new CloudMediaContext("account", "key");
    AssetCreationOptions assetOptions = new AssetCreationOptions();
    var asset = mediaCloud.Assets.Create(fileName, assetOptions);

    var assetFile = asset.AssetFiles.Create(fileName);

    var accessPolicy = mediaCloud.AccessPolicies.Create(fileName, TimeSpan.FromDays(3), AccessPermissions.Write | AccessPermissions.List);

    var locator = mediaCloud.Locators.CreateLocator(LocatorType.Sas, asset, accessPolicy);

    assetFile.Upload("????????????");

    locator.Delete();
    accessPolicy.Delete();
}

これをどのように達成しますか?これは、ASP.NET MVC4およびAzureMediaServicesを使用してアップロードを処理するための「ベストプラクティス」と競合しますか?

4

1 に答える 1

11

アップロードにはAzureMediaServicesを使用しないでください。これは、説明しているinbound-stream-to-azure-storage-blob用に設計されていません。

Azure Storage SDKを直接使用します(再バインドの問題を回避するには、v1.7を使用します)。Storage SDKを使用すると、blobへのストリーム書き込みが可能になります。これを行うには、最初にSAS書き込みロケーター(そこにいるように見えます)を取得してから、locator.Path.Segmentsを使用してアセットコンテナーを見つける必要があります。次に、これを使用して、Storage SDKのCloubBlobClientを使用して直接アップロードします。これは、どこかにストリーム書き込み機能を提供します。

上記のコードでは、AssetCreationOptions.Noneを指定していないことに注意してください。そのため、ストレージ内のファイルはストレージで暗号化されていると見なされます(デフォルトの転送メカニズムは安全であり、安全ではありません)。アップロードする前にファイルストリームでストレージの暗号化を行うとは思わないので、AssetCreationOptions.Noneに設定することをお勧めします。

個人的には、このルートには行きません。「独自のYouTubeを作成する」に関する私のブログ投稿を読んでください:http: //blog-ndrouin.azurewebsites.net/ ?p = 1471

その中には、サーバー側から提供されたSAS URLを使用してクライアントがアップロードしたコンテンツの完全な例があります(アカウントの資格情報があり、クライアント側に浮かんでいたくないでしょう!)。

ただし、クライアントは、そのSASURLを使用してストレージにPUTを実行できる必要があります。私の場合、C#コマンドラインアプリを使用しました。Webページがターゲットストレージアカウントと同じドメインでホストされていない限り、HTML5でこれを行うことはできません。Webページ(またはアップロードを管理するI-Frame)がストレージアカウントと同じドメインにない場合、これにより、HTML5でAzureStorageRESTレイヤーへのCORS「OPTIONS」呼び出しがトリガーされます。これはまだCORSをサポートしていません。 。

ストレージアカウントでホストされているHTML5I-Frameの代替手段は、次のとおりです。ストレージアカウントの$ rootにクロスドメインファイルを含むSliverlightまたはFlashアップロードシム(または、クロスドメインを回避するためにストレージアカウントでホストされているプラ​​グインオブジェクト) -ファイルリクエスト)。

POSTでファイルストリームをサーバーにアップロードすることはお勧めしません。これにより、Webサービスがすべてのインバウンドファイルのボトルネックになります。長いPOSTは特に安定していません。アップロードの途中でアプリプールがリサイクルされ、乾杯する可能性があります。

PS。私たちのチーム(Windows Azure Media Services)は、主にこのフォーラムを監視しています。

http://social.msdn.microsoft.com/Forums/en-US/MediaServices/threads

于 2013-02-21T08:09:53.993 に答える