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

问题描述 投票:2回答:1

我正在尝试使用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;

        }
    }
c# azure azure-media-services
1个回答
1
投票

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

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“name”标记的有效过滤示例。

注意:这不是资产标签

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());
    }

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.