Медиа-сервисы Azure, GetLocators с API V3 и ODataQuery - PullRequest
2 голосов
/ 08 марта 2019

Я пытаюсь получить все потоковые локаторы для данного ресурса с помощью API v3 и пакета 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 Ответ

1 голос
/ 21 марта 2019

Согласно документации по фильтрации медиа-услуг, пользователь может фильтровать «Локаторы потоков» только по «name», «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());
    }

Надеюсь, это поможет.

...