Samouczek: przyznawanie aplikacji funkcji platformy Azure dostępu do konta usługi Media Services

Logo usługi Media Services w wersji 3


Ostrzeżenie

Usługa Azure Media Services zostanie wycofana 30 czerwca 2024 r. Aby uzyskać więcej informacji, zobacz Przewodnik po wycofaniu usługi AMS.

Załóżmy, że chcesz poinformować odwiedzających witrynę internetową lub aplikację o tym, że jesteś "Na antenie" w studio nadawców. Możesz określić, kiedy zdarzenia na żywo usługi Media Services są uruchomione przy użyciu interfejsu API usługi Media Services, ale może to być trudne do wywołania z urządzenia osadzonego. Zamiast tego możesz uwidocznić interfejs API HTTP dla urządzenia osadzonego przy użyciu Azure Functions. Azure Functions może następnie wywołać usługę Media Services, aby uzyskać stan wydarzenia na żywo.

Tożsamości zarządzane dające aplikacji funkcji dostęp do konta usługi Media Services

W tym samouczku jest używany interfejs API usługi Media Services 2020-05-01.

Logowanie do platformy Azure

Aby użyć dowolnego polecenia w tym artykule, musisz najpierw zalogować się do subskrypcji, której chcesz użyć.

Zaloguj się do platformy Azure. W przypadku korzystania z tego polecenia zostanie wyświetlony monit o subskrypcję, której chcesz użyć.

az login

Ustawianie subskrypcji

Użyj tego polecenia, aby ustawić subskrypcję, z którą chcesz pracować.

Ustawianie subskrypcji platformy Azure przy użyciu interfejsu wiersza polecenia

W poniższym poleceniu podaj identyfikator subskrypcji platformy Azure, który ma być używany dla konta usługi Media Services.

az account set --subscription <subscriptionName>

Wymagania wstępne

Ważne

Zdecydowanie zachęcamy do pracy z funkcją Create a C# in Azure (Tworzenie funkcji języka C# na platformie Azure) z poziomu przewodnika Szybki start wiersza polecenia przed podjęciem próby wykonania tej czynności. Wynika to z faktu, że kroki konfiguracji zawarte w tym miejscu są takie same kroki. Umożliwi to również pracę z prostym przykładem opartym na tym samouczku.

Nazwy zasobów

Przed rozpoczęciem zdecyduj o nazwach utworzonych zasobów. Powinny one być łatwo rozpoznawalne jako zestaw, zwłaszcza jeśli nie planujesz ich używać po zakończeniu testowania. Reguły nazewnictwa różnią się w przypadku wielu typów zasobów, dlatego najlepiej trzymać się wszystkich małych liter. Na przykład "mediatest1rg" dla nazwy grupy zasobów i "mediatest1stor" dla nazwy konta magazynu. Użyj tych samych nazw dla każdego kroku w tym artykule.

Te nazwy zostaną wyświetlone w poniższych poleceniach. Nazwy potrzebnych zasobów to:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • location
  • myFunction: użyj polecenia "OnAir"
  • myLiveEvent: użyj ciągu "live1"
  • ipaddresses używać: "0.0.0./32"

Uwaga

Powyższe łączniki są używane tylko do oddzielania słów wskazówek. Ze względu na niespójność nazewnictwa zasobów w usługach platformy Azure nie używaj łączników podczas nazywania zasobów.

Wszystko reprezentowane przez 000000000-0000-0000-000000000 jest unikatowym identyfikatorem zasobu. Ta wartość jest zwykle zwracana przez odpowiedź JSON. Należy skopiować i wkleić odpowiedzi JSON w Notatniku lub innym edytorze tekstów, ponieważ odpowiedzi będą zawierać wartości potrzebne do późniejszego polecenia interfejsu wiersza polecenia.

Ponadto nie należy tworzyć nazwy regionu. Nazwa regionu jest określana przez platformę Azure.

Wyświetlanie listy regionów platformy Azure

Jeśli nie masz pewności co do rzeczywistej nazwy regionu do użycia, użyj tego polecenia, aby uzyskać listę:

Użyj tego polecenia, aby wyświetlić listę regionów dostępnych dla twojego konta.

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

Sequence

Każdy z poniższych kroków jest wykonywany w określonej kolejności, ponieważ co najmniej jedna wartość odpowiedzi JSON jest używana w następnym kroku w sekwencji.

Tworzenie konta usługi Storage

Utworzone konto usługi Media Services musi mieć skojarzone z nim konto magazynu. Najpierw utwórz konto magazynu dla konta usługi Media Services. Użyjesz kolejnych your-storage-account-name kroków.

Tworzenie konta usługi Azure Storage za pomocą interfejsu wiersza polecenia

Użyj następujących poleceń, aby utworzyć konto usługi Azure Storage.

Aby utworzyć konto magazynu, należy najpierw utworzyć grupę zasobów w lokalizacji.

Aby wyświetlić listę dostępnych lokalizacji, użyj następującego polecenia:

Wyświetlanie listy dostępnych lokalizacji za pomocą interfejsu wiersza polecenia

Aby wyświetlić listę dostępnych lokalizacji, użyj następującego polecenia:

az account list-locations

Tworzenie grupy zasobów przy użyciu interfejsu wiersza polecenia

Aby utworzyć grupę zasobów, użyj następującego polecenia:

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

Wybieranie jednostki SKU

Należy również wybrać jednostkę SKU dla konta magazynu. Możesz wyświetlić listę kont magazynu.

Wybierz jednostkę SKU z następującej listy: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Zmień myStorageAccount na unikatową nazwę o długości mniejszej niż 24 znaki.
  • Zmień chooseLocation na region, w którym chcesz pracować.
  • Zmień chooseSKU na preferowaną jednostkę SKU.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Tworzenie konta usługi Media Services

Teraz utwórz konto usługi Media Services. Wyszukaj element "

Aby uzyskać więcej informacji na temat tego polecenia, zobacz dokumentację interfejsu wiersza polecenia usługi Media Services.

Konfigurowanie funkcji platformy Azure

W tej sekcji skonfigurujesz funkcję platformy Azure.

Uzyskiwanie kodu

Użyj Azure Functions, aby utworzyć projekt funkcji i pobrać kod z szablonu HTTP.

func init MediaServicesLiveMonitor –dotnet

Zmień katalog

Upewnij się, że katalog roboczy został zmieniony na katalog projektu. W przeciwnym razie zostaną wyświetlone błędy.

cd .\MediaServicesLiveMonitor\

Nadawanie nazwy funkcji

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

Konfigurowanie projektu funkcji

Instalowanie usług Media Services i innych rozszerzeń

Uruchom polecenie dotnet add package w oknie terminalu, aby zainstalować pakiety rozszerzeń potrzebne w projekcie. Następujące polecenie instaluje pakiety Media Services i Azure Identity.

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

Edytowanie kodu OnAir.cs

OnAir.cs Zmień plik. Zmień subscriptionIdzmienne , resourceGroupi mediaServicesAccountName na te, które podjęto wcześniej.

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

Tworzenie aplikacji funkcji

Utwórz aplikację funkcji do hostowania funkcji. Nazwa jest taka sama jak pobrana wcześniej nazwa 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 Poszukaj w odpowiedzi JSON:

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

Udzielanie aplikacji funkcji dostępu do zasobu konta usługi Media Services

Dla tego żądania:

  • assignee jest to, principalId który znajduje się w odpowiedzi JSON z az functionapp create
  • scopeid to element w odpowiedzi JSON z .az ams account create Zobacz przykładowa odpowiedź JSON powyżej.
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>"

Publikowanie funkcji

func azure functionapp publish MediaServicesLiveMonitorApp

Walidacja

W przeglądarce przejdź do adresu URL funkcji, na przykład:

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

Powinno to zwrócić błąd 404 (Nie znaleziono), ponieważ wydarzenie na żywo jeszcze nie istnieje.

Tworzenie wydarzenia na żywo

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

W przeglądarce przejdź do adresu URL funkcji, na przykład:

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

Powinno to teraz pokazywać komunikat "Off Air".

Rozpoczynanie wydarzenia na żywo

Jeśli rozpoczniesz wydarzenie na żywo, funkcja powinna zwrócić wartość "On Air".

az ams live-event start live1

Ta funkcja umożliwia dostęp do wszystkich osób. Zabezpieczanie dostępu do funkcji platformy Azure i podłączanie światła "W powietrzu" jest poza zakresem tego dokumentu.

Czyszczenie zasobów

Jeśli nie planujesz używania utworzonych zasobów, usuń grupę zasobów.

Usuwanie grupy zasobów za pomocą interfejsu wiersza polecenia

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

Uzyskiwanie pomocy i obsługi technicznej

Możesz skontaktować się z usługą Media Services z pytaniami lub postępować zgodnie z naszymi aktualizacjami, korzystając z jednej z następujących metod: