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 を作成する適切な手段ではありませんか?