Azure 媒体服务、GetLocators with V3 api 和 ODataQuery

Azure Media Services, GetLocators with V3 api and ODataQuery

我正在尝试使用 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 的情况下使用它时,returns 没问题。

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;

        }
    }

根据媒体服务过滤文档,用户只能通过 "name"、"properties.created" 和 "properties.endTime" 过滤 "Streaming Locators"。

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

在您的示例中,您尝试使用不受支持的 assetId/assetName 进行过滤。因此 400 Bad request 错误。请参阅 postman

中的详细错误示例

这是使用 Streaming Locator "name" 标签的有效过滤示例。

注意:这不是资产标签

用于使用 "name"

成功过滤流定位器的 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());
    }

希望对您有所帮助。