Share via


Öğretici: Azure İşlevi uygulamasına Media Services hesabına erişim verme

Media Services logosu v3


Uyarı

Azure Media Services 30 Haziran 2024'de kullanımdan kaldırılacaktır. Daha fazla bilgi için bkz. AMS Kullanımdan Kaldırma Kılavuzu.

Web sitenizin veya uygulamanızın ziyaretçilerinin yayın stüdyonuzda "Yayında" olduğunuzu bilmelerini istediğinizi varsayalım. Media Services API'sini kullanarak Media Services Live Events'in ne zaman çalıştığını belirleyebilirsiniz, ancak ekli bir cihazdan bu çağrı yapmak zor olabilir. Bunun yerine, Azure İşlevleri kullanarak katıştırılmış cihazınız için bir HTTP API'sini kullanıma sunmanız gerekir. Azure İşlevleri canlı etkinliğin durumunu almak için Media Services'ı çağırabilir.

bir İşlev Uygulamasına Media Services hesabına erişim veren Yönetilen Kimlikler

Bu öğreticide 2020-05-01 Media Services API'sini kullanır.

Azure'da oturum açma

Bu makaledeki komutlardan herhangi birini kullanmak için önce kullanmak istediğiniz abonelikte oturum açmanız gerekir.

Azure'da oturum açın. Bu komutu kullandığınızda, kullanmak istediğiniz abonelik istenir.

az login

Aboneliği ayarlama

Çalışmak istediğiniz aboneliği ayarlamak için bu komutu kullanın.

CLI ile Azure aboneliğini ayarlama

Aşağıdaki komutta, Media Services hesabı için kullanmak istediğiniz Azure abonelik kimliğini sağlayın.

az account set --subscription <subscriptionName>

Önkoşullar

Önemli

Bu öğreticiyi denemeden önce komut satırı hızlı başlangıcından Azure'da C# oluşturma işleviyle çalışmanız kesinlikle teşvik edilir. Bunun nedeni, kurulum adımlarının dahil olduğu adımların burada da gerekli olmasıdır. Ayrıca bu öğreticinin temel aldığı basit bir örnekle çalışma fırsatı da verir.

Kaynak adları

Başlamadan önce, oluşturacağınız kaynakların adlarına karar verin. Özellikle testleri tamamladıktan sonra kullanmayı planlamıyorsanız, küme olarak kolayca tanımlanabilir olmalıdır. Adlandırma kuralları birçok kaynak türü için farklıdır, bu nedenle en iyisi küçük harfle devam etmektir. Örneğin, kaynak grubu adınız için "mediatest1rg" ve depolama hesabı adınız için "mediatest1stor". Bu makaledeki her adım için aynı adları kullanın.

Aşağıdaki komutlarda bu adlara başvurulacak şekilde görürsünüz. İhtiyacınız olan kaynakların adları şunlardır:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • location
  • myFunction: "OnAir" kullanın
  • myLiveEvent: "live1" kullanın
  • ipaddresses use: "0.0.0./32"

Not

Yukarıdaki kısa çizgiler yalnızca kılavuz sözcükleri ayırmak için kullanılır. Azure hizmetlerindeki kaynakları adlandırma tutarsızlığı nedeniyle, kaynaklarınızı adlandırırken kısa çizgi kullanmayın.

000000000-0000-0000-000000000 ile temsil edilen her şey kaynağın benzersiz tanımlayıcısıdır. Bu değer genellikle bir JSON yanıtı tarafından döndürülür. JSON yanıtlarını Not Defteri'ne veya başka bir metin düzenleyicisine kopyalayıp yapıştırmalısınız, bu yanıtlar daha sonraki CLI komutları için ihtiyacınız olacak değerleri içerecektir.

Ayrıca, bölge adını oluşturmazsınız. Bölge adı Azure tarafından belirlenir.

Azure bölgelerini listeleme

Kullanılacak gerçek bölge adından emin değilseniz, bir liste almak için şu komutu kullanın:

Hesabınız için kullanılabilir bölgeleri listelemek için bu komutu kullanın.

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

Sequence

Aşağıdaki adımların her biri belirli bir sırada gerçekleştirilir çünkü JSON yanıtlarındaki bir veya daha fazla değer sıradaki bir sonraki adımda kullanılır.

Depolama hesabı oluşturma

Oluşturacağınız Media Services hesabının kendisiyle ilişkilendirilmiş bir depolama hesabı olmalıdır. Önce Media Services hesabı için depolama hesabını oluşturun. Sonraki adımlar için kullanacaksınız your-storage-account-name .

CLI ile Azure Depolama hesabı oluşturma

Azure Depolama hesabı oluşturmak için aşağıdaki komutları kullanın.

Depolama hesabı oluşturmak için önce bir konumda bir kaynak grubu oluşturmanız gerekir.

Kullanılabilir konumları listelemek için aşağıdaki komutu kullanın:

CLI ile kullanılabilir konumları listeleme

Kullanılabilir konumları listelemek için aşağıdaki komutu kullanın:

az account list-locations

CLI ile kaynak grubu oluşturma

Kaynak grubu oluşturmak için aşağıdaki komutu kullanın:

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

SKU seçme

Depolama hesabınız için bir SKU seçmeniz de gerekir. Depolama hesaplarını listeleyebilirsiniz.

Aşağıdaki listeden bir SKU seçin: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS Standard_RAGZRS.

  • Uzunluğu 24 karakterden az olan benzersiz bir adla değiştirin myStorageAccount .
  • İçinde çalışmak istediğiniz bölgeye geçin chooseLocation .
  • Tercih ettiğiniz SKU'ya geçin chooseSKU .
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Media Services hesabı oluşturma

Şimdi Media Services hesabını oluşturun. 'yi arayın

Bu komut hakkında daha fazla bilgi için bkz. Media Services CLI başvurusu.

Azure İşlevini ayarlama

Bu bölümde Azure İşlevinizi ayarlayacaksınız.

Kodu alma

İşlev projenizi oluşturmak ve KODU HTTP şablonundan almak için Azure İşlevleri kullanın.

func init MediaServicesLiveMonitor –dotnet

Dizini değiştir

Çalışma dizininizi proje dizini olarak değiştirdiğinizden emin olun. Aksi takdirde hata alırsınız.

cd .\MediaServicesLiveMonitor\

İşlevinizi adlandırma

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

İşlevler projesini yapılandırma

Media Services ve diğer uzantıları yükleme

Projenizde ihtiyacınız olan uzantı paketlerini yüklemek için Terminal penceresinde dotnet add package komutunu çalıştırın. Aşağıdaki komut Media Services ve Azure Identity paketlerini yükler.

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

OnAir.cs kodunu düzenleme

OnAir.cs Dosyayı değiştirin. , resourceGroupve mediaServicesAccountName değişkenlerini daha önce karar verdikleriyle değiştirinsubscriptionId.

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

İşlev Uygulamasını Oluşturma

İşlevi barındırmak için İşlev Uygulamasını oluşturun. Ad, daha önce MediaServicesLiveMonitorAppindirdiğiniz adla aynıdır.


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]"

JSON yanıtında arayın principalId :

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

İşlev uygulamasına Media Services hesap kaynağına erişim verme

Bu istek için:

  • assigneeprincipalId JSON yanıtında bulunanaz functionapp create
  • scopeid, JSON yanıtında bulunan değeridiraz ams account create. Yukarıdaki örnek JSON yanıtına bakın.
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>"

İşlevi yayımlama

func azure functionapp publish MediaServicesLiveMonitorApp

Doğrulama

Tarayıcıda işlev URL'sine gidin, örneğin:

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

Canlı Etkinlik henüz mevcut olmadığından bu 404 (Bulunamadı) hatası döndürmelidir.

Canlı Etkinlik Oluşturma

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

Tarayıcıda işlev URL'sine gidin, örneğin:

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

Bu artık "Hava Açık" ifadesini göstermelidir.

Canlı etkinliği başlatma

Canlı Etkinliği başlatırsanız işlev "Yayında" değerini döndürmelidir.

az ams live-event start live1

Bu işlev herkese erişim sağlar. Azure İşlevi'ne erişimin güvenliğini sağlamak ve "Yayında" ışığını bağlamak bu belgenin kapsamı dışındadır.

Kaynakları temizleme

Oluşturduğunuz kaynakları kullanmayı planlamıyorsanız kaynak grubunu silin.

CLI ile kaynak grubunu silme

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

Yardım ve destek alma

Sorularınız için Media Services ile iletişime geçebilir veya aşağıdaki yöntemlerden birini kullanarak güncelleştirmelerimizi izleyebilirsiniz: