Självstudie: Ge en Azure-funktionsapp åtkomst till ett Media Services-konto
Varning
Azure Media Services dras tillbaka den 30 juni 2024. Mer information finns i AMS-pensionsguiden.
Anta att du vill att besökare på din webbplats eller ditt program ska veta att du är "On Air" i sändningsstudion. Du kan avgöra när Media Services Live Events körs med hjälp av Media Services-API:et, men det kan vara svårt att anropa från en inbäddad enhet. I stället kan du exponera ett HTTP-API för din inbäddade enhet med hjälp av Azure Functions. Azure Functions kan sedan anropa Media Services för att hämta tillståndet för livehändelsen.
I den här självstudien används Api:et för Media Services 2020-05-01.
Logga in på Azure
Om du vill använda något av kommandona i den här artikeln måste du först vara inloggad på den prenumeration som du vill använda.
Logga in i Azure. När du använder det här kommandot uppmanas du att ange den prenumeration som du vill använda.
az login
Ange prenumeration
Använd det här kommandot för att ange den prenumeration som du vill arbeta med.
Ange Azure-prenumerationen med CLI
Med följande kommando anger du ID för den Azure-prenumeration som du vill använda för Media Services-kontot.
az account set --subscription <subscriptionName>
Förutsättningar
Viktigt
Du uppmanas starkt att gå igenom snabbstarten Skapa en C#-funktion i Azure från kommandoraden innan du provar den här självstudien. Det beror på att de steg som ingår i konfigurationen innehåller samma steg som krävs här. Det ger dig också en chans att arbeta med ett enkelt exempel som den här självstudien baseras på.
Resursnamn
Innan du börjar ska du bestämma namnen på de resurser som du ska skapa. De bör vara lätta att identifiera som en uppsättning, särskilt om du inte planerar att använda dem när du är klar med testningen. Namngivningsreglerna är olika för många resurstyper, så det är bäst att hålla sig till alla gemener. Till exempel "mediatest1rg" för resursgruppens namn och "mediatest1stor" för ditt lagringskontonamn. Använd samma namn för varje steg i den här artikeln.
Dessa namn refereras till i kommandona nedan. Namnen på de resurser som du behöver är:
- myRG
- myStorageAccount
- myAmsAccount
- location
- myFunction: använd "OnAir"
- myLiveEvent: använd "live1"
- ipaddresses använder: "0.0.0./32"
Anteckning
Bindestrecken ovan används bara för att avgränsa vägledningsord. På grund av inkonsekvensen i namngivning av resurser i Azure-tjänster ska du inte använda bindestreck när du namnger dina resurser.
Allt som representeras av 00000000-0000-0000-0000000000 är resursens unika identifierare. Det här värdet returneras vanligtvis av ett JSON-svar. Du bör kopiera och klistra in JSON-svaren i Anteckningar eller någon annan textredigerare, eftersom dessa svar kommer att innehålla värden som du behöver för senare CLI-kommandon.
Du skapar inte heller regionnamnet. Regionnamnet bestäms av Azure.
Visa en lista över Azure-regioner
Om du inte är säker på vilket regionnamn som ska användas använder du det här kommandot för att hämta en lista:
Använd det här kommandot för att lista de regioner som är tillgängliga för ditt konto.
az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table
Sequence
Vart och ett av stegen nedan utförs i en viss ordning eftersom ett eller flera värden från JSON-svaren används i nästa steg i sekvensen.
Skapa ett lagringskonto
Media Services-kontot som du skapar måste ha ett associerat lagringskonto. Skapa lagringskontot för Media Services-kontot först. Du kommer att använda your-storage-account-name
för efterföljande steg.
Skapa ett Azure Storage-konto med CLI
Använd följande kommandon för att skapa ett Azure Storage-konto.
Om du vill skapa ett lagringskonto måste du först skapa en resursgrupp på en plats.
Om du vill visa en lista över tillgängliga platser använder du följande kommando:
Lista tillgängliga platser med CLI
Om du vill visa en lista över tillgängliga platser använder du följande kommando:
az account list-locations
Skapa en resursgrupp med CLI
Använd följande kommando för att skapa en resursgrupp:
az group create -n <resourceGroupName> --location chooseLocation
Välj en SKU
Du måste också välja en SKU för ditt lagringskonto. Du kan lista lagringskonton.
Välj en SKU i följande lista: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS Standard_RAGZRS.
- Ändra
myStorageAccount
till ett unikt namn med en längd på färre än 24 tecken. - Ändra
chooseLocation
till den region som du vill arbeta i. - Ändra
chooseSKU
till önskad SKU.
az storage account create -n <myStorageAccount> -g <resourceGroup> --location <chooseLocation> --sku <chooseSKU>
Skapa ett Media Services-konto
Skapa nu Media Services-kontot. Leta efter "
Mer information om det här kommandot finns i Media Services CLI-referensen.
Konfigurera Azure-funktionen
I det här avsnittet konfigurerar du din Azure-funktion.
Hämta koden
Använd Azure Functions för att skapa funktionsprojektet och hämta koden från HTTP-mallen.
func init MediaServicesLiveMonitor –dotnet
Ändra katalog
Se till att du ändrar arbetskatalogen till projektkatalogen. Annars får du fel.
cd .\MediaServicesLiveMonitor\
Namnge din funktion
func new --name OnAir --template "HTTP trigger" --authlevel "anonymous"
Konfigurera funktionsprojektet
Installera Media Services och andra tillägg
Kör kommandot dotnet add package i terminalfönstret för att installera de tilläggspaket som du behöver i projektet. Följande kommando installerar Media Services- och Azure Identity-paketen.
dotnet add package Microsoft.Azure.Management.Media
dotnet add package Azure.Identity
Redigera OnAir.cs-koden
OnAir.cs
Ändra filen. Ändra subscriptionId
variablerna , resourceGroup
och mediaServicesAccountName
till de som du bestämde dig för tidigare.
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");
}
}
}
Skapa funktionsappen
Skapa funktionsappen som värd för funktionen. Namnet är samma som det som du laddade ned tidigare, 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
Leta efter i JSON-svaret:
{
...
"identity": {
//Note the principalId value for the following step
"principalId": "00000000-0000-0000-000000000000",
"tenantId": "00000000-0000-0000-000000000000",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
...
Ge funktionsappen åtkomst till Media Services-kontoresursen
För den här begäran:
-
assignee
principalId
är det som finns i JSON-svaret frånaz functionapp create
-
scope
id
är det som finns i JSON-svaret frånaz ams account create
. Se JSON-exemplet ovan.
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>"
Publicera funktionen
func azure functionapp publish MediaServicesLiveMonitorApp
Validering
I en webbläsare går du till funktions-URL:en, till exempel:
https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1
Detta bör returnera ett 404-fel (hittades inte) eftersom livehändelsen inte finns ännu.
Skapa en livehändelse
az ams live-event create --resource-group test3 --account-name mediatest3 --name live1 --streaming-protocol RTMP
I en webbläsare går du till funktions-URL:en, till exempel:
https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1
Detta bör nu visa "Off Air".
Starta livehändelsen
Om du startar livehändelsen ska funktionen returnera "On Air".
az ams live-event start live1
Den här funktionen ger åtkomst till vem som helst. Att skydda åtkomsten till Azure-funktionen och ansluta en "On Air"-lampa ligger utanför omfånget för det här dokumentet.
Rensa resurser
Om du inte planerar att använda de resurser som du skapade tar du bort resursgruppen.
Ta bort en resursgrupp med CLI
az group delete --name <your-resource-group-name>
Få hjälp och support
Du kan kontakta Media Services med frågor eller följa våra uppdateringar med någon av följande metoder:
- Q & A
-
Stack Overflow. Tagga frågor med
azure-media-services
. - @MSFTAzureMedia eller använd @AzureSupport för att begära support.
- Öppna en supportbegäran via Azure Portal.