Zelfstudie: Een Azure Function-app toegang geven tot een Media Services-account
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.
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 subscriptionId
de variabelen , resourceGroup
en 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 deprincipalId
die zich in het JSON-antwoord vanaz functionapp create
-
scope
is deid
die zich in het JSON-antwoord vanaz ams account create
bevindt. 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:
- Q & A
-
Stack Overflow. Tag vragen met
azure-media-services
. - @MSFTAzureMedia of gebruik @AzureSupport om ondersteuning aan te vragen.
- Open een ondersteuningsticket via de Azure Portal.