Azure媒体服务,带有V3 API和ODataQuery的GetLocators

时间:2019-03-07 21:02:04

标签: c# azure azure-media-services

我正在尝试使用v3 API和Microsoft.Azure.Management.Media包来获取给定资产的所有流媒体定位符,但是使用Odata查询却遇到了错误的请求错误:

此行失败:var locator = client.StreamingLocators.List("webinars", "webinars", new ODataQuery<StreamingLocator>(x=>x.AssetName == assetId));

Microsoft.Azure.Management.Media.Models.ApiErrorException: Operation returned an invalid status code 'BadRequest'

当我在没有ODataQuery的情况下使用它时,它返回的很好。

public IList<string> GetLocatorForAsset() {
            var assetId = "bb4953cf-4793-4b3c-aed8-ae1bec88a339";
            IList<string> streamingUrls = new List<string>();      

            var locator = client.StreamingLocators.List("webinars", "webinars", new ODataQuery<StreamingLocator>(x=>x.AssetName == assetId));
            ListPathsResponse paths = client.StreamingLocators.ListPaths("webinars", "webinars", locator.FirstOrDefault().Name);

            foreach (StreamingPath path in paths.StreamingPaths) {
                UriBuilder uriBuilder = new UriBuilder();
                uriBuilder.Scheme = "https";
                uriBuilder.Host = "webinars-use2.streaming.media.azure.net";

                uriBuilder.Path = path.Paths[0];
                streamingUrls.Add(uriBuilder.ToString());
            }

            return streamingUrls;

        }
    }

1 个答案:

答案 0 :(得分:1)

根据媒体服务过滤文档,用户只能按“名称”,“ properties.created”和“ properties.endTime”过滤“流定位器”。

https://docs.microsoft.com/en-us/azure/media-services/latest/entities-overview#streaming-locators

enter image description here

在您的示例中,您尝试使用不支持的assetId / assetName进行过滤。因此400错误的请求错误。请参阅邮递员中的详细错误示例

enter image description here

这是使用Streaming Locator“名称”标签的有效过滤示例。

注意:这不是资产标签

enter image description here

C#示例用于使用“名称”成功过滤流定位器

    try
    {
        // GUID need to be specified in single quote. using OData v 3.0
        var odataquery = new ODataQuery<StreamingLocator>("name eq '65a1cb0d-ce7c-4470-93ac-fedf66450ea0'");
        IPage<StreamingLocator> locators = client.StreamingLocators.List("mediatest", "mymediatestaccount", odataquery);

        Console.WriteLine(locators.FirstOrDefault().Name);
        Console.WriteLine(locators.FirstOrDefault().StreamingLocatorId);
        Console.WriteLine(locators.FirstOrDefault().Id);

        ListPathsResponse paths = client.StreamingLocators.ListPaths("mediatest", "mymediatestaccount", locators.FirstOrDefault().Name);

        foreach (StreamingPath path in paths.StreamingPaths)
        {
            UriBuilder uriBuilder = new UriBuilder();
            uriBuilder.Scheme = "https";
            uriBuilder.Host = "webinars-use2.streaming.media.azure.net";

            uriBuilder.Path = path.Paths[0];
            Console.WriteLine(uriBuilder.ToString());
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }

我希望这会有所帮助。