Öğretici: Upload v3 ile video kodlama, kodlama ve Media Services akışla

media services logosu v3


v2 Media Services mı arayabilirsiniz?

Not

Bu öğretici .NET SDK örnekleri kullanıyor olsa da, genel adımlar REST API, CLIveya desteklenen diğer SDK'lar için aynıdır.

Azure Media Services medya dosyalarınızı çok çeşitli tarayıcılarda ve cihazlarda oynatan biçimlere kodlamanıza olanak tanır. Örneğin, içeriğinizi Apple'ın HLS veya MPEG DASH biçimlerinde akışla göndermek isteyebilirsiniz. Akışla göndermeden önce yüksek kaliteli dijital medya dosyanızı kodlamanız gerekir. Kodlamayla ilgili yardım için bkz. Kodlama kavramı. Bu öğretici yerel video dosyasını karşıya yükler ve karşıya yüklenen dosyayı kodlar. Ayrıca bir HTTPS URL'si aracılığıyla erişilebilir hale istediğiniz içeriği kodlayabilir. Daha fazla bilgi için bkz. HTTP(s) URL'sinde iş girişi oluşturma.

Azure Media Player ile video Azure Media Player

Bu öğretici şunların nasıl yapıldığını gösterir:

  • Konu başlığında açıklanan örnek uygulamayı indirin.
  • Karşıya yüklenen, kodlayan ve akışlar olan kodu inceleme.
  • Uygulamayı çalıştırın.
  • Akış URL'sini test edin.
  • Kaynakları temizleyin.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

Örneği indirme ve yapılandırma

Aşağıdaki GitHub akışı .NET örneğinin olduğu bir depoyu makinenize klonlama:

git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git

Örnek, UploadEncodeAndStreamFiles klasöründe yer alır.

İndirilen projenizde appsettings.jsaçın. Değerleri, API 'lere eriştiğinizkimlik bilgileriyle değiştirin.

Not

Ayrıca, .NET örnekleri deposundaki tüm projeler için ortam değişkenlerinizi yalnızca bir kez ayarlamak üzere, projenin kökündeki . env dosya biçimini de kullanabilirsiniz. sample. env dosyasını kopyalamanız yeterlidir ve sonra Azure portal veya Azure clı 'dan Media Services apı erişimi sayfasından aldığınız bilgileri doldurun. Sample. env dosyasını tüm projelerde kullanmak için yalnızca . env olarak yeniden adlandırın.

. Gitignore dosyası, bu dosyanın otomatik olarak yayınlanmasını engellemek için zaten yapılandırılmış.

Karşıya yüklenen, kodlanan ve akışı yapılan kodu inceleme

Bu bölümde, UploadEncodeAndStreamFiles projesinin Program.cs dosyasında tanımlı işlevler incelenmektedir.

Örnek aşağıdaki eylemleri gerçekleştirir:

  1. Yeni bir Dönüşüm oluşturur (ilk olarak, belirtilen Dönüşümün mevcut olup olamay olduğunu denetler).
  2. Kodlama işinin çıkışı olarak kullanılan bir çıkış Varlığı oluşturur.
  3. Bir giriş Varlığı oluşturun ve belirtilen yerel video dosyasını buna yükler. Varlık, işin girişi olarak kullanılır.
  4. Oluşturulan giriş ve çıkışı kullanarak kodlama işini gönderme.
  5. İşin durumunu denetler.
  6. Bir Akış Bulucu oluşturur.
  7. Akış URL'leri oluşturur.

.NET SDK Media Services API'leri kullanmaya başlama

.NET ile Media Services API'leri kullanmaya başlamak için bir nesnesi oluşturmanız AzureMediaServicesClient gerekir. Nesnesini oluşturmak için istemcinin Azure'a bağlanmak için kimlik bilgilerini Azure Active Directory. Bir diğer seçenek de içinde uygulanan etkileşimli kimlik doğrulamasını GetCredentialsInteractiveAuthAsync kullanmak.

public static async Task<IAzureMediaServicesClient> CreateMediaServicesClientAsync(ConfigWrapper config, bool interactive = false)
{
    ServiceClientCredentials credentials;
    if (interactive)
        credentials = await GetCredentialsInteractiveAuthAsync(config);
    else
        credentials = await GetCredentialsAsync(config);

    return new AzureMediaServicesClient(config.ArmEndpoint, credentials)
    {
        SubscriptionId = config.SubscriptionId,
    };
}

Makalenin başında kopyalanan kodda işlev, yerel yapılandırma dosyasında (appsettings.json ) veya deponun kökünde GetCredentialsAsync ServiceClientCredentials .env ** ortam değişkenleri dosyası aracılığıyla sağlanan kimlik bilgilerine göre nesnesini oluşturur.

private static async Task<ServiceClientCredentials> GetCredentialsAsync(ConfigWrapper config)
{
    // Use ConfidentialClientApplicationBuilder.AcquireTokenForClient to get a token using a service principal with symmetric key

    var scopes = new[] { config.ArmAadAudience + "/.default" };

    var app = ConfidentialClientApplicationBuilder.Create(config.AadClientId)
        .WithClientSecret(config.AadSecret)
        .WithAuthority(AzureCloudInstance.AzurePublic, config.AadTenantId)
        .Build();

    var authResult = await app.AcquireTokenForClient(scopes)
                                             .ExecuteAsync()
                                             .ConfigureAwait(false);

    return new TokenCredentials(authResult.AccessToken, TokenType);
}

Etkileşimli kimlik doğrulaması durumunda işlev, etkileşimli kimlik doğrulamasını ve yerel yapılandırma dosyasında (appsettings.json ) veya deponun kökünde GetCredentialsInteractiveAuthAsync ServiceClientCredentials .env ** ortam değişkenleri dosyası aracılığıyla sağlanan bağlantı parametrelerini temel alarak nesneyi oluşturur. Bu durumda, yapılandırma veya ortam değişkenleri dosyasında AADCLIENTID ve AADSECRET gerekli değildir.

private static async Task<ServiceClientCredentials> GetCredentialsInteractiveAuthAsync(ConfigWrapper config)
{
    var scopes = new[] { config.ArmAadAudience + "/user_impersonation" };

    // client application of Az Cli
    string ClientApplicationId = "04b07795-8ddb-461a-bbee-02f9e1bf7b46";

    AuthenticationResult result = null;

    IPublicClientApplication app = PublicClientApplicationBuilder.Create(ClientApplicationId)
        .WithAuthority(AzureCloudInstance.AzurePublic, config.AadTenantId)
        .WithRedirectUri("http://localhost")
        .Build();

    var accounts = await app.GetAccountsAsync();

    try
    {
        result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault()).ExecuteAsync();
    }
    catch (MsalUiRequiredException ex)
    {
        try
        {
            result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
        }
        catch (MsalException maslException)
        {
            Console.Error.WriteLine($"ERROR: MSAL interactive authentication exception with code '{maslException.ErrorCode}' and message '{maslException.Message}'.");
        }
    }
    catch (MsalException maslException)
    {
        Console.Error.WriteLine($"ERROR: MSAL silent authentication exception with code '{maslException.ErrorCode}' and message '{maslException.Message}'.");
    }

    return new TokenCredentials(result.AccessToken, TokenType);
}

Bir giriş varlığı oluşturma ve içine yerel dosya yükleme

CreateInputAsset işlevi yeni bir giriş Varlığı oluşturur ve içine belirtilen yerel video dosyasını yükler. Bu Varlık, kodlama işinize giriş olarak kullanılır. v3 Media Services de bir İş girişi, HTTPS URL'leri aracılığıyla iş hesabınız için kullanılabilir hale Media Services bir Varlık veya içerik olabilir. HTTPS URL'lerinden kodlama hakkında bilgi edinmek için bu makaleye bakın.

Media Services v3’te dosyaları karşıya yüklemek için Azure Depolama API’lerini kullanırsınız. Aşağıdaki .NET kod parçacığı bunun nasıl yapıldığını gösterir.

Aşağıdaki işlev şu eylemleri gerçekleştirir:

  • Bir Varlık oluşturur.

  • Depolamada varlığın kapsayıcısı için yazılabilir bir SAS URL'si alır.

    SAS URL'lerini almak için varlığın ListContainerSas işlevini kullanıyorsanız, her depolama hesabı için iki depolama hesabı anahtarı olduğu için işlevin birden çok SAS URL'leri döndür olduğunu unutmayın. Depolama hesabının iki anahtarı vardır çünkü depolama hesabı anahtarlarının sorunsuz bir şekilde döndürülerek döndürülebilir (örneğin, birini kullanırken diğer anahtarı değiştirerek yeni anahtarı kullanmaya başlayabilir ve diğer anahtarı döndürebilirsiniz). 1. SAS URL'si depolama anahtarı1 ve ikinci bir depolama anahtarı2'yi temsil eder.

  • SAS URL'sini kullanarak dosyayı depolama alanı içinde kapsayıcıya yükler.

private static async Task<Asset> CreateInputAssetAsync(
    IAzureMediaServicesClient client,
    string resourceGroupName,
    string accountName,
    string assetName,
    string fileToUpload)
{
    // In this example, we are assuming that the asset name is unique.
    //
    // If you already have an asset with the desired name, use the Assets.Get method
    // to get the existing asset. In Media Services v3, the Get method on entities returns null 
    // if the entity doesn't exist (a case-insensitive check on the name).

    // Call Media Services API to create an Asset.
    // This method creates a container in storage for the Asset.
    // The files (blobs) associated with the asset will be stored in this container.
    Asset asset = await client.Assets.CreateOrUpdateAsync(resourceGroupName, accountName, assetName, new Asset());

    // Use Media Services API to get back a response that contains
    // SAS URL for the Asset container into which to upload blobs.
    // That is where you would specify read-write permissions 
    // and the exparation time for the SAS URL.
    var response = await client.Assets.ListContainerSasAsync(
        resourceGroupName,
        accountName,
        assetName,
        permissions: AssetContainerPermission.ReadWrite,
        expiryTime: DateTime.UtcNow.AddHours(4).ToUniversalTime());

    var sasUri = new Uri(response.AssetContainerSasUrls.First());

    // Use Storage API to get a reference to the Asset container
    // that was created by calling Asset's CreateOrUpdate method.  
    BlobContainerClient container = new BlobContainerClient(sasUri);
    BlobClient blob = container.GetBlobClient(Path.GetFileName(fileToUpload));

    // Use Strorage API to upload the file into the container in storage.
    await blob.UploadAsync(fileToUpload);

    return asset;
}

Bir işin sonucunu depolamak için çıktı varlığı oluşturma

Çıktı Varlığı, kodlama işinizin sonucunu depolar. Proje, bu çıktı varlığının sonuçlarını "output" klasörüne indiren DownloadResults işlevini tanımlar, böylece elinizde neyin olduğunu görebilirsiniz.

private static async Task<Asset> CreateOutputAssetAsync(IAzureMediaServicesClient client, string resourceGroupName, string accountName, string assetName)
{
    bool existingAsset = true;
    Asset outputAsset;
    try
    {
        // Check if an Asset already exists
        outputAsset = await client.Assets.GetAsync(resourceGroupName, accountName, assetName);
    }
    catch (ErrorResponseException ex) when (ex.Response.StatusCode == System.Net.HttpStatusCode.NotFound)
    {
        existingAsset = false;
    }

    Asset asset = new Asset();
    string outputAssetName = assetName;

    if (existingAsset)
    {
        // Name collision! In order to get the sample to work, let's just go ahead and create a unique asset name
        // Note that the returned Asset can have a different name than the one specified as an input parameter.
        // You may want to update this part to throw an Exception instead, and handle name collisions differently.
        string uniqueness = $"-{Guid.NewGuid():N}";
        outputAssetName += uniqueness;

        Console.WriteLine("Warning – found an existing Asset with name = " + assetName);
        Console.WriteLine("Creating an Asset with this name instead: " + outputAssetName);
    }

    return await client.Assets.CreateOrUpdateAsync(resourceGroupName, accountName, outputAssetName, asset);
}

Bir Dönüşüm ve karşıya yüklenen dosyayı kodlayan İş oluşturma

İçerikleri kodlarken veya Media Services, kodlama ayarlarını bir tarif olarak ayarlamak yaygın bir desendir. Daha sonra bu tarifi bir videoya uygulamak üzere bir İş gönderirsiniz. Her yeni video için yeni işler göndererek bu tarifi kitaplığınız içinde yer alan tüm videolara uyguluyor oluruz. Verilerde tarif Media Services Dönüşüm olarak adlandırılan bir tarif. Daha fazla bilgi için Dönüşümler ve İşler konusuna bakın. Bu öğreticide açıklanan örnek, videoyu çeşitli iOS ve Android cihazlarına akışla aktarmak için kodlayan bir tarifi tanımlar.

Dönüşüm

Yeni bir Dönüşüm örneği oluştururken çıktı olarak neyi üretmesi istediğinizi belirtmeniz gerekir. Gerekli parametre, aşağıdaki kodda gösterildiği gibi bir TransformOutput nesnesidir. Her TransformOutput bir Ön ayar içerir. Ön ayar, video ve/veya ses işleme işlemlerinin istenen TransformOutput nesnesini oluşturmak üzere kullanılacak adım adım yönergelerini açıklar. Bu makalede açıklanan örnek, AdaptiveStreaming adlı yerleşik bir Ön Ayar kullanır. Ön Ayar, giriş çözünürlüğü ve bit hızını temel alarak, giriş videosunu otomatik olarak oluşturulan bir bit hızı basamağına (bit hızı-çözünürlük çiftleri) kodlar ve her bir bit hızı-çözünürlük çiftine karşılık gelen H.264 video ve AAC sesi ile ISO MP4 dosyaları üretir. Bu Ön Ayar hakkında bilgi için bkz. otomatik oluşturulan bit hızı basamağı.

Yerleşik bir EncoderNamedPreset ön ayarını veya özel ön ayarları kullanabilirsiniz. Daha fazla bilgi için bkz. Kodlayıcı önayarlarını özelleştirme.

Bir Dönüşüm oluştururken ilk olarak aşağıdaki kodda gösterildiği gibi Get yöntemi ile bir dönüşümün zaten var olup olmadığını denetlemeniz gerekir. Media Services v3’te varlıklar üzerindeki Get yöntemleri, varlığın mevcut olmaması durumunda null değerini döndürür (büyük/küçük harfe duyarlı ad denetimi).

private static async Task<Transform> GetOrCreateTransformAsync(
    IAzureMediaServicesClient client,
    string resourceGroupName,
    string accountName,
    string transformName)
{
    bool createTransform = false;
    Transform transform = null;
    try
    {
        // Does a transform already exist with the desired name? Assume that an existing Transform with the desired name
        // also uses the same recipe or Preset for processing content.
        transform = client.Transforms.Get(resourceGroupName, accountName, transformName);
    }
    catch (ErrorResponseException ex) when (ex.Response.StatusCode == System.Net.HttpStatusCode.NotFound)
    {
        createTransform = true;
    }

    if (createTransform)
    {
        // You need to specify what you want it to produce as an output
        TransformOutput[] output = new TransformOutput[]
        {
            new TransformOutput
            {
                // The preset for the Transform is set to one of Media Services built-in sample presets.
                // You can  customize the encoding settings by changing this to use "StandardEncoderPreset" class.
                Preset = new BuiltInStandardEncoderPreset()
                {
                    // This sample uses the built-in encoding preset for Adaptive Bitrate Streaming.
                    PresetName = EncoderNamedPreset.AdaptiveStreaming
                }
            }
        };

        // Create the Transform with the output defined above
        transform = await client.Transforms.CreateOrUpdateAsync(resourceGroupName, accountName, transformName, output);
    }

    return transform;
}

İş

Yukarıda bahsedildiği gibi Transform nesnesi tarif, Job ise bu Transform nesnesini belirli bir giriş videosu veya ses içeriğine uygulamak için Media Services’e gönderilen gerçek istektir. İş giriş videosunun konumu ve çıktının konumu gibi bilgileri belirtir.

Bu örnekte giriş videosu, yerel makinenizden yüklenmiştir. HTTPS URL'lerinden kodlamayı öğrenmek için bu makaleye bakın.

private static async Task<Job> SubmitJobAsync(IAzureMediaServicesClient client,
    string resourceGroupName,
    string accountName,
    string transformName,
    string jobName,
    string inputAssetName,
    string outputAssetName)
{
    // Use the name of the created input asset to create the job input.
    JobInput jobInput = new JobInputAsset(assetName: inputAssetName);

    JobOutput[] jobOutputs =
    {
        new JobOutputAsset(outputAssetName),
    };

    // In this example, we are assuming that the job name is unique.
    //
    // If you already have a job with the desired name, use the Jobs.Get method
    // to get the existing job. In Media Services v3, the Get method on entities returns null 
    // if the entity doesn't exist (a case-insensitive check on the name).
    Job job = await client.Jobs.CreateAsync(
        resourceGroupName,
        accountName,
        transformName,
        jobName,
        new Job
        {
            Input = jobInput,
            Outputs = jobOutputs,
        });

    return job;
}

İşin tamamlanmasını bekleyin

İşin tamamlanması biraz sürüyor ve tamamlandığında bildirim almak istiyorsunuz. Aşağıdaki kod örneği, İş’in durumu için hizmette nasıl yoklama yapılacağını gösterir. Yoklama, olası gecikme süresi nedeniyle üretim uygulamaları için önerilen en iyi yöntem değildir. Yoklama, bir hesap üzerinde gereğinden fazla kullanılırsa kısıtlanabilir. Geliştiricilerin onun yerine Event Grid kullanmalıdır.

Event Grid yüksek kullanılabilirlik, tutarlı performans ve dinamik ölçek için tasarlanmıştır. Event Grid ile uygulamalarınız neredeyse tüm Azure hizmetleri ve özel kaynaklardan gelen olayları takip edip bu olaylara yanıt verebilir. Basit, HTTP tabanlı reaktif olay işleme özelliği, olayların akıllı filtrelenmesi ve yönlendirilmesi sayesinde etkili çözümler oluşturmanıza yardımcı olur. Bkz. Olayları özel bir web uç noktasına yönlendirme.

İş genellik şu aşamalardan geçer: Zamanlandı, Kuyruğa Alındı, İşleniyor, Tamamlandı (son aşama). İş bir hatayla karşılaştıysa Hata durumunu alırsınız. İş iptal etme sürecinde ise, bittiğinde İptal Ediliyor ve İptal Edildi olur.

private static async Task<Job> WaitForJobToFinishAsync(IAzureMediaServicesClient client,
    string resourceGroupName,
    string accountName,
    string transformName,
    string jobName)
{
    const int SleepIntervalMs = 20 * 1000;

    Job job;
    do
    {
        job = await client.Jobs.GetAsync(resourceGroupName, accountName, transformName, jobName);

        Console.WriteLine($"Job is '{job.State}'.");
        for (int i = 0; i < job.Outputs.Count; i++)
        {
            JobOutput output = job.Outputs[i];
            Console.Write($"\tJobOutput[{i}] is '{output.State}'.");
            if (output.State == JobState.Processing)
            {
                Console.Write($"  Progress (%): '{output.Progress}'.");
            }

            Console.WriteLine();
        }

        if (job.State != JobState.Finished && job.State != JobState.Error && job.State != JobState.Canceled)
        {
            await Task.Delay(SleepIntervalMs);
        }
    }
    while (job.State != JobState.Finished && job.State != JobState.Error && job.State != JobState.Canceled);

    return job;
}

İş hata kodları

Bkz. Hata kodları.

Akış Bulucusu Al

Kodlama tamamlandıktan sonra sıradaki adım, çıktı Varlığındaki videoyu yürütmek için istemcilerin kullanımına sunmaktır. bunu iki adımda kullanılabilir hale abilirsiniz: önce bir Akış Bulucuve ikincisi de istemcilerin kullanabileceği akış URL'lerini oluşturun.

Akış Bulucu oluşturma işlemi yayımlama olarak adlandırılan bir işlemdir. Varsayılan olarak, AKıŞ Bulucu API çağrılarını verdikten hemen sonra geçerlidir ve isteğe bağlı başlangıç ve bitiş saatlerini yapılandırmadıkça silinene kadar devam edin.

StreamingLocator oluştururkenistenen StreamingPolicyName adını belirtmeniz gerekir. Bu örnekte, önceden tanımlanmış temiz akış ilkesi (PredefinedStreamingPolicy.ClearStreamingOnly) kullanılır.

Önemli

Özel Akış İlkesi kullanırken,Media Service hesabınız için sınırlı bir ilke kümesi tasarlamanız ve aynı şifreleme seçenekleri ve protokoller gerektiğinde StreamingLocators'lar için bunları yeniden kullanmelisiniz. Media Service hesabınız, Akış İlkesi girişlerinin sayısı için bir kotaya sahip. Her Akış Bulucu için yeni bir Akış İlkesi oluşturmamalısiniz.

Aşağıdaki kod, işlevi benzersiz bir locatorName ile çağırmış olduğunu varsayıyor.

private static async Task<StreamingLocator> CreateStreamingLocatorAsync(
    IAzureMediaServicesClient client,
    string resourceGroup,
    string accountName,
    string assetName,
    string locatorName)
{
    StreamingLocator locator = await client.StreamingLocators.CreateAsync(
        resourceGroup,
        accountName,
        locatorName,
        new StreamingLocator
        {
            AssetName = assetName,
            StreamingPolicyName = PredefinedStreamingPolicy.ClearStreamingOnly
        });

    return locator;
}

Bu konudaki örnekte akış ele alınsa da, aşamalı indirme aracılığıyla video teslim etmek üzere bir Akış Bulucu oluşturmak için aynı çağrıyı kullanabilirsiniz.

Akış URL'leri alma

Artık Akış Bulucusu oluşturulduktan sonra, GetStreamingURLs içinde gösterildiği gibi akış URL'lerini elde edersiniz. URL oluşturmak için Akış Uç Noktası ana bilgisayar adını ve Akış Bulucu yolunu biriktirin. Bu örnekte varsayılan Akış Uç Noktası kullanılır. İlk kez bir Media Service hesabı sanız, bu varsayılan Akış Uç Noktası durdurulmuş durumda olur, bu nedenle Başlat'ı çağırmanız gerekir.

Not

Bu yöntemde, çıkış Varlığı için Akış Bulucu oluşturulurken kullanılan locatorName değerine ihtiyacınız vardır.

private static async Task<IList<string>> GetStreamingUrlsAsync(
    IAzureMediaServicesClient client,
    string resourceGroupName,
    string accountName,
    String locatorName)
{
    const string DefaultStreamingEndpointName = "default";

    IList<string> streamingUrls = new List<string>();

    StreamingEndpoint streamingEndpoint = await client.StreamingEndpoints.GetAsync(resourceGroupName, accountName, DefaultStreamingEndpointName);

    if (streamingEndpoint.ResourceState != StreamingEndpointResourceState.Running)
    {
        await client.StreamingEndpoints.StartAsync(resourceGroupName, accountName, DefaultStreamingEndpointName);
    }

    ListPathsResponse paths = await client.StreamingLocators.ListPathsAsync(resourceGroupName, accountName, locatorName);

    foreach (StreamingPath path in paths.StreamingPaths)
    {
        UriBuilder uriBuilder = new UriBuilder
        {
            Scheme = "https",
            Host = streamingEndpoint.HostName,

            Path = path.Paths[0]
        };
        streamingUrls.Add(uriBuilder.ToString());
    }
    return streamingUrls;
}

Media Services hesabınızdaki kaynakları temizleme

Genel olarak, yeniden kullanmayı planladığınız nesneler dışında her şeyi temizlemeniz gerekir (genellikle Dönüşümleri yeniden kullanırsınız ve StreamingLocators,vb. kalıcı olur). Denemeden sonra hesabınızı temizlemeyi planlıyorsanız, yeniden kullanmayı planlamadan kaynakları silin. Örneğin, aşağıdaki kod işi siler, varlıklar ve içerik anahtarı ilkesi oluşturulur:

private static async Task CleanUpAsync(
   IAzureMediaServicesClient client,
   string resourceGroupName,
   string accountName,
   string transformName,
   string jobName,
   List<string> assetNames,
   string contentKeyPolicyName = null
   )
{
    await client.Jobs.DeleteAsync(resourceGroupName, accountName, transformName, jobName);

    foreach (var assetName in assetNames)
    {
        await client.Assets.DeleteAsync(resourceGroupName, accountName, assetName);
    }

    if (contentKeyPolicyName != null)
    {
        client.ContentKeyPolicies.Delete(resourceGroupName, accountName, contentKeyPolicyName);
    }
}

Örnek uygulamayı çalıştırma

  1. EncodeAndStreamFiles uygulamasını çalıştırmak için Ctrl+F5 tuşlarına basın.
  2. Akış URL’lerinden birini konsoldan kopyalayın.

Bu örnekte, farklı protokolleri kullanarak videoyu kayıttan yürütmek için kullanılabilen URL’ler gösterilir:

Video akışı için URL'Media Services örnek çıktı

Akış URL’sini test etme

Bu makalede, akışı test etmek için Azure Media Player kullanılmaktadır.

Not

Oynatıcı bir https sitesinde barındırılıyorsa, "https" URL’sini güncelleştirdiğinizden emin olun.

  1. Bir web tarayıcısı açın ve 'a https://aka.ms/azuremediaplayer/ gidin.
  2. URL: kutusuna, uygulamayı akarken sahip olduğunuz akış URL'si değerlerinden birini yapıştırın.
  3. Oynatıcıyı Güncelleştir'i seçin.

Azure Media Player test için kullanılabilir ancak üretim ortamında kullanılmamalıdır.

Kaynakları temizleme

Bu öğreticide oluşturduğunuz Media Services ve depolama hesapları dahil olmak üzere, kaynak grubunuzdaki kaynaklardan herhangi birine artık ihtiyacınız yoksa kaynak grubunu silebilirsiniz.

Aşağıdaki CLI komutunu yürütün:

az group delete --name amsResourceGroup

Çoklu iş parçacığı kullanımı

Azure Media Services v3 VM'leri iş parçacığı güvenli değildir. Çok iş parçacıklı bir uygulama geliştirerek iş parçacığı başına yeni bir AzureMediaServicesClient nesnesi oluşturmalı ve kullanabilirsiniz.

Soru sorun, geri bildirim gönderin, güncelleştirmeleri alın

Soru sormanın, Azure Media Services vermenin ve farklı yöntemlerle ilgili güncelleştirmeleri almak için Azure Media Services topluluk makalesine Media Services.

Sonraki adımlar

Videonuzu karşıya yükleme, kodlama ve akışla aktarma hakkında bilgi edindiğinize göre aşağıdaki makaleye bakabilirsiniz: