Samouczek: przyznawanie aplikacji funkcji platformy Azure dostępu do konta usługi Media Services
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.
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ń subscriptionId
zmienne , resourceGroup
i 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 zaz functionapp create
-
scope
id
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:
- Q & A
-
Stack Overflow. Tagowanie pytań przy użyciu polecenia
azure-media-services
. - @MSFTAzureMedia lub użyj @AzureSupport , aby poprosić o pomoc techniczną.
- Otwórz bilet pomocy technicznej za pośrednictwem Azure Portal.