Share via


Zelfstudie: Een Azure Function-app toegang geven tot een Media Services-account

Media Services-logo v3


Waarschuwing

Azure Media Services wordt op 30 juni 2024 buiten gebruik gesteld. Zie de Handleiding voor buitengebruikstelling van AMS voor meer informatie.

Stel dat u bezoekers van uw website of toepassing wilt laten weten dat u 'On Air' bent in uw uitzendstudio. U kunt bepalen wanneer Media Services-livegebeurtenissen worden uitgevoerd met behulp van de Media Services-API, maar dit kan lastig zijn om aan te roepen vanaf een ingesloten apparaat. In plaats daarvan kunt u een HTTP-API beschikbaar maken voor uw ingesloten apparaat met behulp van Azure Functions. Azure Functions kunt vervolgens Media Services aanroepen om de status van de livegebeurtenis op te halen.

Beheerde identiteiten die een functie-app toegang geven tot een Media Services-account

In deze zelfstudie wordt de Media Services-API 2020-05-01 gebruikt.

Aanmelden bij Azure

Als u een van de opdrachten in dit artikel wilt gebruiken, moet u eerst zijn aangemeld bij het abonnement dat u wilt gebruiken.

Meld u aan bij Azure. Wanneer u deze opdracht gebruikt, wordt u gevraagd om het abonnement dat u wilt gebruiken.

az login

Abonnement instellen

Gebruik deze opdracht om het abonnement in te stellen waarmee u wilt werken.

Het Azure-abonnement instellen met de CLI

Geef in de volgende opdracht de id van het Azure-abonnement op dat u wilt gebruiken voor het Media Services-account.

az account set --subscription <subscriptionName>

Vereisten

Belangrijk

U wordt sterk aangeraden om de functie Een C#-functie maken in Azure te gebruiken vanaf de snelstartgids voor de opdrachtregel voordat u deze zelfstudie uitvoert. Dat komt omdat de opgegeven stappen voor het instellen van dezelfde stappen hier nodig zijn. Het geeft u ook de kans om te werken met een eenvoudig voorbeeld waarop deze zelfstudie is gebaseerd.

Resourcenamen

Voordat u begint, bepaalt u de namen van de resources die u gaat maken. Ze moeten gemakkelijk te herkennen zijn als een set, vooral als u niet van plan bent om ze te gebruiken nadat u klaar bent met testen. Naamgevingsregels verschillen voor veel resourcetypen, dus het is het beste om alleen kleine letters te gebruiken. Bijvoorbeeld 'mediatest1rg' voor de naam van de resourcegroep en 'mediatest1stor' voor de naam van uw opslagaccount. Gebruik dezelfde namen voor elke stap in dit artikel.

U ziet dat naar deze namen wordt verwezen in de onderstaande opdrachten. De namen van resources die u nodig hebt, zijn:

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

Notitie

De bovenstaande afbreekstreepjes worden alleen gebruikt om hulpwoorden van elkaar te scheiden. Vanwege de inconsistentie van de naamgeving van resources in Azure-services, mag u geen afbreekstreepjes gebruiken wanneer u uw resources een naam geeft.

Alles wat wordt vertegenwoordigd door 0000000-0000-0000-000000000000 is de unieke id van de resource. Deze waarde wordt meestal geretourneerd door een JSON-antwoord. Kopieer en plak de JSON-antwoorden in Kladblok of een andere teksteditor, omdat deze antwoorden waarden bevatten die u nodig hebt voor latere CLI-opdrachten.

U maakt ook geen regionaam. De regionaam wordt bepaald door Azure.

Azure-regio's weergeven

Als u niet zeker weet welke regionaam u daadwerkelijk wilt gebruiken, gebruikt u deze opdracht om een vermelding op te halen:

Gebruik deze opdracht om de regio's weer te geven die beschikbaar zijn voor uw account.

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

Reeks

Elk van de onderstaande stappen wordt uitgevoerd in een bepaalde volgorde, omdat een of meer waarden uit de JSON-antwoorden worden gebruikt in de volgende stap in de reeks.

Een opslagaccount maken

Aan het Media Services-account dat u maakt, moet een opslagaccount zijn gekoppeld. Maak eerst het opslagaccount voor het Media Services-account. U gebruikt your-storage-account-name voor de volgende stappen.

Een Azure Storage-account maken met de CLI

Gebruik de volgende opdrachten om een Azure Storage-account te maken.

Als u een opslagaccount wilt maken, moet u eerst een resourcegroep binnen een locatie maken.

Gebruik de volgende opdracht om beschikbare locaties weer te geven:

Beschikbare locaties weergeven met de CLI

Gebruik de volgende opdracht om beschikbare locaties weer te geven:

az account list-locations

Een resourcegroep maken met de CLI

Gebruik de volgende opdracht om een resourcegroep te maken:

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

Een SKU kiezen

U moet ook een SKU voor uw opslagaccount kiezen. U kunt opslagaccounts weergeven.

Kies een SKU in de volgende lijst: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Wijzig myStorageAccount in een unieke naam met een lengte van minder dan 24 tekens.
  • Wijzig chooseLocation in de regio waar u wilt werken.
  • Wijzig in chooseSKU de SKU van uw voorkeur.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Een Media Services-account kunt maken

Maak nu het Media Services-account. Zoek naar de '

Zie de Media Services CLI-naslaginformatie voor meer informatie over deze opdracht.

De Azure-functie instellen

In deze sectie stelt u uw Azure-functie in.

Code ophalen

Gebruik de Azure Functions om uw functieproject te maken en de code op te halen uit de HTTP-sjabloon.

func init MediaServicesLiveMonitor –dotnet

Map wijzigen

Zorg ervoor dat u de werkmap wijzigt in de projectmap. Anders krijgt u fouten.

cd .\MediaServicesLiveMonitor\

Een naam voor de functie opgeven

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

Het functions-project configureren

Media Services en andere extensies installeren

Voer de opdracht dotnet add package uit in het terminalvenster om de extensiepakketten te installeren die u nodig hebt in uw project. Met de volgende opdracht worden de Media Services- en Azure Identity-pakketten geïnstalleerd.

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

De OnAir.cs-code bewerken

Wijzig het OnAir.cs bestand. Wijzig subscriptionIdde variabelen , resourceGroupen mediaServicesAccountName in de variabelen die u eerder hebt gekozen.

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

De functie-app maken

Maak de functie-app om de functie te hosten. De naam is hetzelfde als de naam die u eerder hebt gedownload, 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 Zoek naar in het JSON-antwoord:

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

De functie-app toegang verlenen tot de Media Services-accountresource

Voor deze aanvraag:

  • assignee is de principalId die zich in het JSON-antwoord van az functionapp create
  • scope is de id die zich in het JSON-antwoord van az ams account createbevindt. Zie het voorbeeld van het JSON-antwoord hierboven.
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>"

De functie publiceren

func azure functionapp publish MediaServicesLiveMonitorApp

Validatie

Ga in een browser naar de functie-URL, bijvoorbeeld:

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

Hiermee wordt een 404-fout (niet gevonden) geretourneerd, omdat de livegebeurtenis nog niet bestaat.

Een livegebeurtenis maken

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

Ga in een browser naar de functie-URL, bijvoorbeeld:

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

Hier zou nu 'Uit lucht' moeten worden weergegeven.

De livegebeurtenis starten

Als u de livegebeurtenis start, moet de functie 'On Air' retourneren.

az ams live-event start live1

Met deze functie heeft iedereen toegang. Het beveiligen van de toegang tot de Azure-functie en het aansluiten van een 'On Air'-lampje vallen buiten het bereik van dit document.

Resources opschonen

Als u niet van plan bent om de resources te gebruiken die u hebt gemaakt, verwijdert u de resourcegroep.

Een resourcegroep verwijderen met de CLI

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

Help en ondersteuning

U kunt contact opnemen met Media Services met vragen of onze updates op een van de volgende manieren volgen: