Поделиться через


Учебник по предоставлению приложению-функции Azure доступа к учетной записи Служб мультимедиа

Логотип Служб мультимедиа версии 3


Предупреждение

Поддержка Служб мультимедиа Azure будет прекращена 30 июня 2024 г. Дополнительные сведения см. в руководстве по прекращению поддержки AMS.

Предположим, вы хотите, чтобы посетители веб-сайта или приложения знали, что студия вещания сейчас в эфире. Определить, когда следует запускать трансляцию в Службах мультимедиа, можно с помощью интерфейса API Служб мультимедиа, однако его вызов со встроенного устройства может оказаться затруднительным. Вместо этого можно предоставить API-интерфейс HTTP для встроенного устройства с помощью службы "Функции Azure". Затем служба "Функции Azure" может вызывать Службы мультимедиа для получения состояния трансляции.

Управляемые удостоверения, предоставляющие приложение-функция доступ к учетной записи Служб мультимедиа

В этом учебнике используется API Служб мультимедиа версии 2020-05-01.

Вход в Azure

Чтобы использовать любую из команд, описанных в этой статье, сначала необходимо войти в подписку, которую необходимо использовать.

Войдите в Azure. При использовании этой команды вам будет предложено указать подписку, которую нужно использовать.

az login

Выбор подписки

Используйте эту команду, чтобы задать подписку, с которой вы собираетесь работать.

Настройка подписки Azure с помощью CLI

В приведенной ниже команде укажите идентификатор подписки Azure, который необходимо использовать в учетной записи Служб мультимедиа.

az account set --subscription <subscriptionName>

Предварительные требования

Важно!

Перед началом работы с этим учебником настоятельно рекомендуется выполнить действия, описанные в кратком руководстве Создание функции C# в Azure из командной строки. Это связано с тем, что описанные в нем шаги идентичны тем, которые требуются для выполнения приведенных здесь инструкций. Кроме того, вы получите возможность попрактиковаться на простом примере, который взят за основу в этом учебнике.

Имена ресурсов

Прежде чем приступить к работе, определите имена ресурсов, которые вы планируете создать. Они должны быть легко определяемыми в качестве набора, особенно если вы не планируете использовать их после завершения тестирования. Правила именования для многих типов ресурсов отличаются, поэтому лучше всего использовать только строчные буквы. Например, "mediatest1rg" для имени группы ресурсов и "mediatest1stor" для имени учетной записи хранения. Используйте одни и те же имена для каждого шага в этой статье.

Эти имена будут упоминаться в приведенных ниже командах. Ниже перечислены имена необходимых ресурсов:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • location
  • myFunction: use "OnAir"
  • myLiveEvent: use "live1"
  • ipaddresses use: "0.0.0./32"

Примечание

Приведенные выше дефисы используются только для разделения слов рекомендаций. Из-за несогласованности ресурсов именования в службах Azure не используйте дефисы при именовании ресурсов.

Все, что представлено в формате 00000000-0000-0000-0000000000, — это уникальный идентификатор ресурса. Это значение обычно возвращается в ответе JSON. Ответы JSON следует копировать и вставлять в Блокнот или другой текстовый редактор, так как они будут содержать значения, необходимые для выполнения последующих команд в интерфейсе командной строки.

Кроме того, не нужно создавать имя региона. Имя региона определяется службой Azure.

Вывод списка регионов Azure

Если вы не знаете фактическое имя региона, воспользуйтесь следующей командой для получения списка:

Используйте эту команду, чтобы получить список регионов, доступных для вашей учетной записи.

az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table

Последовательность

Каждый из приведенных ниже шагов выполняется в определенном порядке, так как одно или несколько значений из ответов JSON используются на следующем шаге в последовательности.

Создание учетной записи хранения

С создаваемой учетной записью Служб мультимедиа должна быть связана учетная запись хранения. Сначала создайте учетную запись хранения для учетной записи Служб мультимедиа. Вы будете использовать your-storage-account-name на последующих шагах.

Создание учетной записи хранения Azure с помощью CLI

Для создания учетной записи хранения Azure используйте указанные ниже команды.

Чтобы создать учетную запись хранения, сначала необходимо создать группу ресурсов в расположении.

Чтобы получить список доступных расположений, используйте следующую команду:

Вывод списка доступных расположений с помощью CLI

Чтобы получить список доступных расположений, используйте следующую команду:

az account list-locations

Создание группы ресурсов с помощью CLI

Чтобы создать группу ресурсов, выполните следующую команду:

az group create -n <resourceGroupName> --location chooseLocation

Выбор SKU

Также необходимо выбрать номер SKU для учетной записи хранения. Можно вывести список учетных записей хранения.

Выберите номер SKU из следующего списка: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Замените myStorageAccount на уникальное имя длиной менее 24 символов.
  • Замените chooseLocation на регион, в котором вы хотите работать.
  • Смените chooseSKU на предпочитаемый номер SKU.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Создание учетной записи служб мультимедиа

Теперь создайте учетную запись Служб мультимедиа. Найдите `

Дополнительные сведения об этой команде приведены в справочнике по CLI Служб мультимедиа.

Настройка функции Azure

Из этого раздела вы узнаете, как настроить функцию Azure.

Получите код

Воспользуйтесь службой "Функции Azure" для создания проекта функции и получения кода из шаблона HTTP.

func init MediaServicesLiveMonitor –dotnet

Смена каталога

Обязательно смените рабочий каталог на каталог проекта. В противном случае произойдет ошибка.

cd .\MediaServicesLiveMonitor\

Имя функции

func new --name OnAir --template "HTTP trigger" --authlevel "anonymous"

Настройка проекта функций

Установка Служб мультимедиа и других расширений

Выполните команду dotnet add package в окне терминала, чтобы установить пакеты расширений, необходимые в проекте. Следующая команда устанавливает Службы мультимедиа и пакеты удостоверений Azure.

dotnet add package Microsoft.Azure.Management.Media
dotnet add package Azure.Identity

Изменение кода OnAir.cs

Измените файл OnAir.cs. Замените переменные subscriptionIdresourceGroup и mediaServicesAccountName на те, которые были выбраны ранее.

using Azure.Core;
using Azure.Identity;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Management.Media;
using Microsoft.Azure.Management.Media.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Rest;
using System.Threading.Tasks;

namespace MediaServicesLiveMonitor
{
    public static class OnAir
    {
        [FunctionName("OnAir")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            if (string.IsNullOrWhiteSpace(name))
            {
                return new BadRequestObjectResult("Missing 'name' URL parameter");
            }

            var credential = new ManagedIdentityCredential();
            var accessTokenRequest = await credential.GetTokenAsync(
                new TokenRequestContext(
                    scopes: new string[] { "https://management.core.windows.net" + "/.default" }
                    )
                );
            ServiceClientCredentials credentials = new TokenCredentials(accessTokenRequest.Token, "Bearer");

            var subscriptionId = "00000000-0000-0000-000000000000";                 // Update
            var resourceGroup = "<your-resource-group-name>";                       // Update
            var mediaServicesAccountName = "<your-media-services-account-name>";    // Update

            var mediaServices = new AzureMediaServicesClient(credentials)
            {
                SubscriptionId = subscriptionId
            };

            var liveEvent = await mediaServices.LiveEvents.GetAsync(resourceGroup, mediaServicesAccountName, name);

            if (liveEvent == null)
            {
                return new NotFoundResult();
            }

            return new OkObjectResult(liveEvent.ResourceState == LiveEventResourceState.Running ? "On air" : "Off air");
        }
    }
}

Создание приложения-функции

Создайте приложение-функцию для размещения функции. Имя будет таким же, как и у приложения-функции, которая была скачана ранее, MediaServicesLiveMonitorApp.


az functionapp create --resource-group <your-resource-group-name> --consumption-plan-location your-region --runtime dotnet --functions-version 3 --name MediaServicesLiveMonitorApp --storage-account mediatest3store --assign-identity "[system]"

Найдите principalId в ответе JSON.

{
...
"identity": {
//Note the principalId value for the following step
    "principalId": "00000000-0000-0000-000000000000",
    "tenantId": "00000000-0000-0000-000000000000",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
  }
...

Предоставление приложению функции доступа к ресурсу учетной записи Служб мультимедиа

Для данного запроса:

  • assignee — это идентификатор principalId, который находится в ответе JSON, полученном от az functionapp create;
  • scope — это идентификатор id, который находится в ответе JSON, полученном от az ams account create. См. пример ответа JSON выше.
az role assignment create --assignee 00000000-0000-0000-000000000000 --role "Media Services Account Administrator" --scope "/subscriptions/<the-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Media/mediaservices/<your-media-services-account-name>"

Публикация функции

func azure functionapp publish MediaServicesLiveMonitorApp

Проверка

В браузере перейдите по URL-адресу функции, например:

https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1

В этом случае должна быть возвращена ошибка 404 (не найдено), так как трансляции еще не существует.

Создание трансляции

az ams live-event create --resource-group test3 --account-name mediatest3 --name live1 --streaming-protocol RTMP

В браузере перейдите по URL-адресу функции, например:

https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1

Теперь должна отображаться надпись Off Air (Не в эфире).

Запуск трансляции

При запуске трансляции функция должна вернуть значение On Air (В эфире).

az ams live-event start live1

Эта функция предоставляет доступ всем. Защита доступа к функции Azure и подключение сигнала "В эфире" выходит за рамки этого документа.

Очистка ресурсов

Если вы не планируете использовать только что созданные ресурсы, удалите группу ресурсов.

Удаление группы ресурсов с помощью CLI

az group delete --name <your-resource-group-name>

Справка и поддержка

Вы можете обратиться к Службам мультимедиа с вопросами или следить за нашими обновлениями одним из следующих способов: