我正在尝试为 Azure 媒体服务中存储的媒体的流畅流创建限时 URL。
我正在处理此处提供的代码。 Windows Azure 平滑流示例
我将视频文件上传到新资产。我使用带有预设“H264 Adaptive Bitrate MP4 Set 720p”的 Azure 媒体服务编码对该视频文件进行编码。使用生成的编码资产,然后我尝试通过创建访问策略和定位器来创建流式 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 次针对同一资产执行该代码。然后你会收到这个错误:
“服务器不支持在单个容器上设置超过 5 个共享访问策略标识符。”
所以,没关系。我不需要每次都创建一个新的 AccessPolicy,我可以重用我之前创建的那个,使用相同的策略构建一个定位器。但是,即便如此,我仍然收到有关单个容器上的 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 个共享访问策略。在第二个代码块的情况下,我只创建了一个访问策略。我可以通过查看的内容来验证只有一个 AccessPolicy,_mediaContext.AccessPolicies
该列表中总是只有一个访问策略。
在某些时候,这可能会有许多用户请求访问同一资产。根据我们客户的要求,提供给这些客户的 URL 需要有时间限制。
这不是为资产流畅流创建 URL 的适当方法吗?