3

Azure Media Services に保存されているメディアをスムーズにストリーミングするために、時間制限のある URL を作成しようとしています。

ここで提供されているコードに反対しています。 Windows Azure Smooth Streaming の例

動画ファイルを新しいアセットにアップロードします。そのビデオ ファイルを、プリセットの "H264 アダプティブ ビットレート MP4 セット 720p" で Azure Media Service エンコードを使用してエンコードします。結果として得られるエンコードされたアセットを使用して、ストリーミングに使用する URL を生成するために使用するアクセス ポリシーとロケーターを作成して、ストリーミング URL の作成を試みます。

コードは次のとおりです。

string urlForClientStreaming = "";

IAssetFile manifestFile = (from f in Asset.AssetFiles
                   where f.Name.EndsWith(".ism")
                   select f).FirstOrDefault();

if (manifestFile != null)
{ 
    // Create a 1 hour readonly access policy. 
    IAccessPolicy policy = _mediaContext.AccessPolicies.Create("Streaming policy",   TimeSpan.FromHours(1), AccessPermissions.Read);

    // Create a locator to the streaming content on an origin. 
    ILocator originLocator =     _mediaContext.Locators.CreateLocator(LocatorType.OnDemandOrigin, Asset,    policy, DateTime.UtcNow.AddMinutes(-5));

    urlForClientStreaming = originLocator.Path + manifestFile.Name + "/manifest";

    if (contentType == MediaContentType.HLS)
    urlForClientStreaming = String.Format("{0}{1}", urlForClientStreaming, "(format=m3u8-aapl)");
}

return urlForClientStreaming;

これはうまくいきます。同じアセットに対してそのコードを実行するのは 6 回目までです。次に、次のエラーが表示されます。

「サーバーは、1 つのコンテナーに 5 つを超える共有アクセス ポリシー識別子を設定することをサポートしていません。」

それで、それで結構です。毎回新しい AccessPolicy を作成する必要はありません。以前に作成したものを再利用し、同じポリシーを使用してロケーターを構築できます。ただし、それでも、1 つのコンテナーで 5 つの共有アクセス ポリシーに関するエラーが発生します。

以前に使用したのと同じ AccessPolicy でロケーターを作成する新しいコードを次に示します。

string urlForClientStreaming = "";

IAssetFile manifestFile = (from f in Asset.AssetFiles
                   where f.Name.EndsWith(".ism")
                   select f).FirstOrDefault();

if (manifestFile != null)
{ 
    // Create a 1 hour readonly access policy
    IAccessPolicy accessPolicy = null;
    accessPolicy =
      (from p in _mediaContext.AccessPolicies where p.Name == "myaccesspolicy" select p).FirstOrDefault();

     if (accessPolicy == null)
     {
         accessPolicy = _mediaContext.AccessPolicies.Create("myaccesspolicy", TimeSpan.FromHours(1), AccessPermissions.Read);
     }

    // Create a locator to the streaming content on an origin. 
    ILocator originLocator =     _mediaContext.Locators.CreateLocator(LocatorType.OnDemandOrigin, Asset,    policy, DateTime.UtcNow.AddMinutes(-5));

    urlForClientStreaming = originLocator.Path + manifestFile.Name + "/manifest";

    if (contentType == MediaContentType.HLS)
    urlForClientStreaming = String.Format("{0}{1}", urlForClientStreaming, "(format=m3u8-aapl)");
}

return urlForClientStreaming;

5 つの共有アクセス ポリシーを作成したと表示される理由がわかりません。2 番目のコード ブロックの場合、作成するアクセス ポリシーは 1 つだけです。のコンテンツを表示することで、AccessPolicy が 1 つだけであることを確認でき_mediaContext.AccessPoliciesます。そのリストには常に 1 つのアクセス ポリシーしかありません。

ある時点で、多くのユーザーが同じアセットへのアクセスを要求する可能性があります。これらのクライアントに提供される URL は、クライアントの要件に従って時間制限する必要があります。

これは、アセットをスムーズにストリーミングするための URL を作成する適切な手段ではありませんか?

4

3 に答える 3

2

返信遅くなりました・・・承知いたしました。

誰でも無期限に使用できる単一の URL を作成する必要がある場合は、次のことをお勧めします。

  1. アセットを作成するときに、たとえば 1 年間有効なロケーターを作成します。2 番目の例のように、毎回同じアクセス ポリシーを使用できます。
  2. ストリーミング用の URL を作成するときは、アセットからそのロケーターを取得します
  3. アセットの残り期間を確認します。一定期間 (1 か月など) に満たない場合は、ILocator.Update を使用してロケーターを延長します (たとえば、もう 1 年)。ロケーターの有効期限を更新しても、ロケーターの作成に使用した元のアクセス ポリシーには影響しません。
  4. 利益。

HTH

于 2013-03-15T17:18:33.433 に答える
1

ロケーターは、ユーザーごとのアクセス制御を行うようには設計されていません。そのためにデジタル著作権管理システムを使用します。それらには、ウィンドウの表示、永続的および非永続的なライセンスなどの概念があります。具体的には、WAMS で PlayReady 暗号化を使用し、PlayReady サーバーを使用してライセンスを構成および提供することについて話しています (Azure ポータルには EzDRM があり、BuyDRM などもあります)。

ロケーターは、ストリーミング サービスの基本的なオン/オフ切り替えを提供します。コンテナーごとに 5 つの基礎となる SAS 制限を使用しているため、最大 5 つ作成できます。

于 2013-02-21T08:53:02.177 に答える
1

Azure Media Services のコンテンツ保護機能を使用すると、メディア ファイルを AES または PlayReady で暗号化し、有効期間の長いロケーターを生成できます。同時に、コンテンツ キーの Token-Authorization ポリシーを設定すると、トークンの期間を短い時間 (プレーヤーがコンテンツ キーを取得するのに十分な時間) に設定できます。このようにして、コンテンツへのアクセスを制御できます。詳細については、私のブログを参照してください: http://azure.microsoft.com/blog/2014/09/10/announce-public-availability-of-azure-media-services-content-protection-services/

于 2015-01-13T18:09:28.340 に答える