Öğretici: Media Services v3 ile videoları karşıya yükleme, kodlama ve akışlaTutorial: Upload, encode, and stream videos with Media Services v3

Media Services logosu v3media services logo v3


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.Even though this tutorial uses .NET SDK examples, the general steps are the same for REST API, CLI, or other supported SDKs.

Azure Media Services, medya dosyalarınızı çok çeşitli tarayıcılarda ve cihazlarda oynatacak biçimlere kodlamanızı sağlar.Azure Media Services lets you encode your media files into formats that play on a wide variety of browsers and devices. Örneğin, içeriğinizi Apple'ın HLS veya MPEG DASH biçimlerinde akışla göndermek isteyebilirsiniz.For example, you might want to stream your content in Apple's HLS or MPEG DASH formats. Akışla göndermeden önce yüksek kaliteli dijital medya dosyanızı kodlamanız gerekir.Before streaming, you should encode your high-quality digital media file. Kodlama konusunda yardım için bkz. kodlama kavramı.For help with encoding, see Encoding concept. Bu öğretici yerel video dosyasını karşıya yükler ve karşıya yüklenen dosyayı kodlar.This tutorial uploads a local video file and encodes the uploaded file. Ayrıca, bir HTTPS URL 'SI aracılığıyla erişilebilir hale gelen içeriği de kodlayabilirsiniz.You can also encode content that you make accessible via an HTTPS URL. Daha fazla bilgi için bkz. HTTP(s) URL'sinde iş girişi oluşturma.For more information, see Create a job input from an HTTP(s) URL.

Azure Media Player ile video oynatma

Bu öğretici şunların nasıl yapıldığını gösterir:This tutorial shows you how to:

  • Konusunda açıklanan örnek uygulamayı indirin.Download the sample app described in the topic.
  • Karşıya yükleyen, kodlayan ve akışların kodunu inceleyin.Examine the code that uploads, encodes, and streams.
  • Uygulamayı çalıştırın.Run the app.
  • Akış URL 'sini test edin.Test the streaming URL.
  • Kaynakları temizleyin.Clean up resources.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.If you don't have an Azure subscription, create a free account before you begin.

ÖnkoşullarPrerequisites

Örneği indirin ve ayarlayınDownload and set up the sample

Aşağıdaki komutu kullanarak, akışı .NET örneği olan bir GitHub deposunu makinenize kopyalayın:Clone a GitHub repository that has the streaming .NET sample to your machine using the following command:

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

Örnek, UploadEncodeAndStreamFiles klasöründe yer alır.The sample is located in the UploadEncodeAndStreamFiles folder.

İndirilen projenizde appsettings.js açın.Open appsettings.json in your downloaded project. Değerleri, API 'lere eriştiğinizkimlik bilgileriyle değiştirin.Replace the values with credentials that you got from accessing APIs.

Karşıya yüklenen, kodlanan ve akışı yapılan kodu incelemeExamine the code that uploads, encodes, and streams

Bu bölümde, UploadEncodeAndStreamFiles projesinin Program.cs dosyasında tanımlı işlevler incelenmektedir.This section examines functions defined in the Program.cs file of the UploadEncodeAndStreamFiles project.

Örnek aşağıdaki eylemleri gerçekleştirir:The sample performs the following actions:

  1. Yeni bir dönüşüm oluşturur (ilk olarak, belirtilen dönüştürmenin var olup olmadığını denetler).Creates a new Transform (first, checks if the specified Transform exists).
  2. Kodlama işinin çıkışı olarak kullanılan bir çıktı varlığı oluşturur.Creates an output Asset that's used as the encoding Job's output.
  3. Bir giriş varlığı oluşturun ve belirtilen yerel video dosyasını bu dosyaya yükler.Create an input Asset and uploads the specified local video file into it. Varlık, işin girişi olarak kullanılır.The asset is used as the job's input.
  4. Oluşturulan girişi ve çıktıyı kullanarak kodlama işini gönderir.Submits the encoding job using the input and output that was created.
  5. İşin durumunu denetler.Checks the job's status.
  6. Bir akış Bulucu oluşturur.Creates a Streaming Locator.
  7. Akış URL'leri oluşturur.Builds streaming URLs.

.NET SDK ile Media Services API’sini kullanmaya başlamaStart using Media Services APIs with .NET SDK

.NET ile Media Services API’lerini kullanmaya başlamak için bir AzureMediaServicesClient nesnesi oluşturmanız gerekir.To start using Media Services APIs with .NET, you need to create an AzureMediaServicesClient object. Nesneyi oluşturmak için, istemcinin Azure AD 'yi kullanarak Azure 'a bağlanması için gereken kimlik bilgilerini sağlamanız gerekir.To create the object, you must supply credentials needed for the client to connect to Azure using Azure AD. Makalenin başlangıcında kopyaladığınız kodda, GetCredentialsAsync işlevi, yerel yapılandırma dosyasında sağlanan kimlik bilgilerini temel alarak ServiceClientCredentials nesnesi oluşturur.In the code you cloned at the beginning of the article, the GetCredentialsAsync function creates the ServiceClientCredentials object based on the credentials supplied in local configuration file.

private static async Task<IAzureMediaServicesClient> CreateMediaServicesClientAsync(ConfigWrapper config)
{
    var credentials = await GetCredentialsAsync(config);

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

Bir giriş varlığı oluşturma ve içine yerel dosya yüklemeCreate an input asset and upload a local file into it

CreateInputAsset işlevi yeni bir giriş Varlığı oluşturur ve içine belirtilen yerel video dosyasını yükler.The CreateInputAsset function creates a new input Asset and uploads the specified local video file into it. Bu varlık , kodlama işinize giriş olarak kullanılır.This Asset is used as the input to your encoding job. Media Services v3 'de, bir işin GIRIŞI, https URL 'leri aracılığıyla Media Services hesabınız için kullanılabilir hale getirebileceği bir varlık ya da içerik olabilir.In Media Services v3, the input to a Job can either be an Asset or content that you make available to your Media Services account via HTTPS URLs. HTTPS URL 'sinden kodlama hakkında bilgi edinmek için Bu makaleye bakın.To learn how to encode from an HTTPS URL, see this article.

Media Services v3’te dosyaları karşıya yüklemek için Azure Depolama API’lerini kullanırsınız.In Media Services v3, you use Azure Storage APIs to upload files. Aşağıdaki .NET kod parçacığı bunun nasıl yapıldığını gösterir.The following .NET snippet shows how.

Aşağıdaki işlev şu eylemleri gerçekleştirir:The following function performs these actions:

  • Bir varlık oluşturur.Creates an Asset.

  • Depolama alanındaki varlığın kapsayıcısınayazılabilir bir SAS URL 'si alır.Gets a writable SAS URL to the asset’s container in storage.

    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 bırden çok SAS URL 'si döndürdüğünü unutmayın.If using asset’s ListContainerSas function to get SAS URLs, note that the function returns multiple SAS URLs as there are two storage account keys for each storage account. Depolama hesabı anahtarlarının sorunsuz bir şekilde değiştirilmesini sağladığından bir depolama hesabının iki anahtarı vardır (örneğin, diğerini kullanırken bir tane değiştirin, yeni anahtarı kullanmaya başlayın ve diğer anahtarı döndürün).A storage account has two keys because it allows for seamless rotation of storage account keys (for example, change one while using the other then start using the new key and rotate the other key). 1. SAS URL 'SI, Storage KEY1 ve ikinci bir Storage key2 öğesini temsil eder.The 1st SAS URL represents storage key1 and second one storage key2.

  • SAS URL 'sini kullanarak dosyayı depolama alanındaki kapsayıcıya yükler.Uploads the file into the container in storage using the SAS URL.

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şturmaCreate an output asset to store the result of a job

Çıktı Varlığı, kodlama işinizin sonucunu depolar.The output Asset stores the result of your encoding job. 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.The project defines the DownloadResults function that downloads the results from this output asset into the "output" folder, so you can see what you got.

private static async Task<Asset> CreateOutputAssetAsync(IAzureMediaServicesClient client, string resourceGroupName, string accountName, string assetName)
{
    // Check if an Asset already exists
    Asset outputAsset = await client.Assets.GetAsync(resourceGroupName, accountName, assetName);
    Asset asset = new Asset();
    string outputAssetName = assetName;

    if (outputAsset != null)
    {
        // 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şturmaCreate a Transform and a Job that encodes the uploaded file

Media Services içeriği kodlarken veya işlerken, kodlama ayarlarını tarif olarak ayarlamak için ortak bir modeldir.When encoding or processing content in Media Services, it's a common pattern to set up the encoding settings as a recipe. Daha sonra bu tarifi bir videoya uygulamak üzere bir İş gönderirsiniz.You would then submit a Job to apply that recipe to a video. Her yeni video için yeni işler göndererek, bu tarifi kitaplığınızdaki tüm videolara uygulayacağız.By submitting new jobs for each new video, you're applying that recipe to all the videos in your library. Media Services bir tarif, dönüşüm olarak adlandırılır.A recipe in Media Services is called a Transform. Daha fazla bilgi için Dönüşümler ve İşler konusuna bakın.For more information, see Transforms and Jobs. Bu öğreticide açıklanan örnek, videoyu çeşitli iOS ve Android cihazlarına akışla aktarmak için kodlayan bir tarifi tanımlar.The sample described in this tutorial defines a recipe that encodes the video in order to stream it to a variety of iOS and Android devices.

DönüşümTransform

Yeni bir Dönüşüm örneği oluştururken çıktı olarak neyi üretmesi istediğinizi belirtmeniz gerekir.When creating a new Transform instance, you need to specify what you want it to produce as an output. Gerekli parametre, aşağıdaki kodda gösterildiği gibi bir TransformOutput nesnesidir.The required parameter is a TransformOutput object, as shown in the code below. Her TransformOutput bir Ön ayar içerir.Each TransformOutput contains a Preset. Ö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.Preset describes the step-by-step instructions of video and/or audio processing operations that are to be used to generate the desired TransformOutput. Bu makalede açıklanan örnek, AdaptiveStreaming adlı yerleşik bir Ön Ayar kullanır.The sample described in this article uses a built-in Preset called AdaptiveStreaming. Ö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.The Preset encodes the input video into an auto-generated bitrate ladder (bitrate-resolution pairs) based on the input resolution and bitrate, and produces ISO MP4 files with H.264 video and AAC audio corresponding to each bitrate-resolution pair. Bu Ön Ayar hakkında bilgi için bkz. otomatik oluşturulan bit hızı basamağı.For information about this Preset, see auto-generating bitrate ladder.

Yerleşik bir EncoderNamedPreset ön ayarını veya özel ön ayarları kullanabilirsiniz.You can use a built-in EncoderNamedPreset or use custom presets. Daha fazla bilgi için bkz. Kodlayıcı önayarlarını özelleştirme.For more information, see How to customize encoder presets.

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.When creating a Transform, you should first check if one already exists using the Get method, as shown in the code that follows. 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).In Media Services v3, Get methods on entities return null if the entity doesn’t exist (a case-insensitive check on the name).

private static async Task<Transform> GetOrCreateTransformAsync(
    IAzureMediaServicesClient client,
    string resourceGroupName,
    string accountName,
    string transformName)
{
    // 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 transform = await client.Transforms.GetAsync(resourceGroupName, accountName, transformName);

    if (transform == null)
    {
        // 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;
}

İşJob

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.As mentioned above, the Transform object is the recipe and a Job is the actual request to Media Services to apply that Transform to a given input video or audio content. İş giriş videosunun konumu ve çıktının konumu gibi bilgileri belirtir.The Job specifies information like the location of the input video, and the location for the output.

Bu örnekte giriş videosu, yerel makinenizden yüklenmiştir.In this example, the input video has been uploaded from your local machine. HTTPS URL 'sinden kodlama hakkında bilgi edinmek istiyorsanız Bu makaleye bakın.If you want to learn how to encode from an HTTPS URL, see this article.

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ı bekleyinWait for the Job to complete

İşin tamamlanması biraz sürüyor ve tamamlandığında bildirim almak istiyorsunuz.The job takes some time to complete and when it does you want to be notified. Aşağıdaki kod örneği, İş’in durumu için hizmette nasıl yoklama yapılacağını gösterir.The code sample below shows how to poll the service for the status of the Job. Yoklama, olası gecikme nedeniyle üretim uygulamaları için önerilen en iyi uygulamadır.Polling isn't a recommended best practice for production apps because of potential latency. Yoklama, bir hesap üzerinde gereğinden fazla kullanılırsa kısıtlanabilir.Polling can be throttled if overused on an account. Geliştiricilerin onun yerine Event Grid kullanmalıdır.Developers should instead use Event Grid.

Event Grid yüksek kullanılabilirlik, tutarlı performans ve dinamik ölçek için tasarlanmıştır.Event Grid is designed for high availability, consistent performance, and dynamic scale. Event Grid ile uygulamalarınız neredeyse tüm Azure hizmetleri ve özel kaynaklardan gelen olayları takip edip bu olaylara yanıt verebilir.With Event Grid, your apps can listen for and react to events from virtually all Azure services, as well as custom sources. 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.Simple, HTTP-based reactive event handling helps you build efficient solutions through intelligent filtering and routing of events. Bkz. Olayları özel bir web uç noktasına yönlendirme.See Route events to a custom web endpoint.

İş genellik şu aşamalardan geçer: Zamanlandı, Kuyruğa Alındı, İşleniyor, Tamamlandı (son aşama).The Job usually goes through the following states: Scheduled, Queued, Processing, Finished (the final state). İş bir hatayla karşılaştıysa Hata durumunu alırsınız.If the job has encountered an error, you get the Error state. İş iptal edilme süreciiyorsa, tamamlandığında iptal edip Iptal etmiş olursunuz .If the job is in the process of being canceled, you get Canceling and Canceled when it's done.

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ıJob error codes

Bkz. hata kodları.See Error codes.

Akış Bulucu almaGet a Streaming Locator

Kodlama tamamlandıktan sonra sıradaki adım, çıktı Varlığındaki videoyu yürütmek için istemcilerin kullanımına sunmaktır.After the encoding is complete, the next step is to make the video in the output Asset available to clients for playback. Bunu iki adımda kullanılabilir hale getirebilirsiniz: ilk olarak, bir akış Bulucuoluşturun ve ikinci olarak, istemcilerin kullanabileceği akış URL 'lerini oluşturun.You can make it available in two steps: first, create a Streaming Locator, and second, build the streaming URLs that clients can use.

Akış Bulucu oluşturma işlemine yayımlama denir.The process of creating a Streaming Locator is called publishing. Varsayılan olarak, akış Bulucu , API çağrılarını yaptıktan hemen sonra geçerlidir ve isteğe bağlı başlangıç ve bitiş zamanlarını yapılandırmadığınız sürece silinene kadar sürer.By default, the Streaming Locator is valid immediately after you make the API calls, and lasts until it's deleted, unless you configure the optional start and end times.

Bir Streaminglocatoroluştururken, Istenen Streamingpolicyname' i belirtmeniz gerekir.When creating a StreamingLocator, you'll need to specify the desired StreamingPolicyName. Bu örnekte, açık akış ilkesinin (Predefinedstreamingpolicy. ClearStreamingOnly) kullanılması için,-Clear (veya şifrelenmemiş olmayan içerik) akışı oluşturursunuz.In this example, you'll be streaming in-the-clear (or non-encrypted content) so the predefined clear streaming policy (PredefinedStreamingPolicy.ClearStreamingOnly) is used.

Önemli

Özel bir akış ilkesikullanırken, medya hizmeti hesabınız için sınırlı sayıda ilke kümesi tasarlamalı ve aynı şifreleme seçenekleri ve protokoller gerektiğinde bunları streamingbulucular için yeniden kullanmanız gerekir.When using a custom Streaming Policy, you should design a limited set of such policies for your Media Service account, and re-use them for your StreamingLocators whenever the same encryption options and protocols are needed. Medya hizmeti hesabınızın akış Ilkesi girişi sayısı için bir kotası vardır.Your Media Service account has a quota for the number of Streaming Policy entries. Her bir akış bulucu için yeni bir akış Ilkesi oluşturmamalısınız.You shouldn't be creating a new Streaming Policy for each Streaming Locator.

Aşağıdaki kod, işlevi benzersiz bir locatorName ile çağırmanın olduğunu varsayar.The following code assumes that you're calling the function with a unique locatorName.

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 örnek akışı ele alırken, aşamalı indirme yoluyla video teslim etmek için bir akış Bulucu oluşturmak için aynı çağrıyı kullanabilirsiniz.While the sample in this topic discusses streaming, you can use the same call to create a Streaming Locator for delivering video via progressive download.

Akış URL'leri almaGet streaming URLs

Artık akış bulucunun oluşturulduğuna göre, Getstreamingurls Içinde gösterildiği gibi akış URL 'lerini alabilirsiniz.Now that the Streaming Locator has been created, you can get the streaming URLs, as shown in GetStreamingURLs. URL oluşturmak için, akış uç noktası ana bilgisayar adını ve akış Bulucu yolunu birleştirmeniz gerekir.To build a URL, you need to concatenate the Streaming Endpoint host name and the Streaming Locator path. Bu örnekte, varsayılan akış uç noktası kullanılır.In this sample, the default Streaming Endpoint is used. İlk olarak bir medya hizmeti hesabı oluşturduğunuzda, bu varsayılan akış uç noktası durdurulmuş durumda olacaktır, bu yüzden Start'ı çağırmanız gerekir.When you first create a Media Service account, this default Streaming Endpoint will be in a stopped state, so you need to call Start.

Not

Bu yöntemde, çıkış varlığı için akış bulucuyu oluştururken kullanılan locatorname öğesine ihtiyacınız vardır.In this method, you need the locatorName that was used when creating the Streaming Locator for the output Asset.

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 != null)
    {
        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ı temizlemeClean up resources in your Media Services account

Genellikle, yeniden kullanmayı planladığınız nesneler hariç her şeyi temizlemeniz gerekir (genellikle dönüşümleri yeniden kullanacaksınız ve Streamingkonumlandırıcı, vb.).Generally, you should clean up everything except objects that you're planning to reuse (typically, you'll reuse Transforms, and you'll persist StreamingLocators, etc.). Deneme sonrasında hesabınızın temiz olmasını istiyorsanız, kullanmayı planlamadığınız kaynakları silin.If you want your account to be clean after experimenting, delete the resources that you don't plan to reuse. Örneğin, aşağıdaki kod işi, oluşturulan varlıkları ve içerik anahtarı ilkesini siler:For example, the following code deletes the job, created assets and content key policy:

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ırmaRun the sample app

  1. Encodeandstreamfiles uygulamasını çalıştırmak için CTRL + F5 tuşlarına basın.Press Ctrl+F5 to run the EncodeAndStreamFiles app.
  2. Akış URL’lerinden birini konsoldan kopyalayın.Copy one of the streaming URLs from the console.

Bu örnekte, farklı protokolleri kullanarak videoyu kayıttan yürütmek için kullanılabilen URL’ler gösterilir:This example displays URLs that can be used to play back the video using different protocols:

Media Services akışı videosu için URL 'Leri gösteren örnek çıkış

Akış URL’sini test etmeTest the streaming URL

Bu makalede, akışı test etmek için Azure Media Player kullanılmaktadır.To test the stream, this article uses Azure Media Player.

Not

Oynatıcı bir https sitesinde barındırılıyorsa, "https" URL’sini güncelleştirdiğinizden emin olun.If a player is hosted on an https site, make sure to update the URL to "https".

  1. Bir Web tarayıcısı açın ve adresine gidin https://aka.ms/azuremediaplayer/ .Open a web browser and navigate to https://aka.ms/azuremediaplayer/.
  2. URL: kutusunda, uygulamayı çalıştırdığınızda ALDıĞıNıZ akış URL değerlerinden birini yapıştırın.In the URL: box, paste one of the streaming URL values you got when you ran the app.
  3. Oynatıcıyı Güncelleştir' i seçin.Select Update Player.

Azure Media Player, test için kullanılabilir ancak üretim ortamında kullanılmamalıdır.Azure Media Player can be used for testing but shouldn't be used in a production environment.

Kaynakları temizlemeClean up resources

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.If you no longer need any of the resources in your resource group, including the Media Services and storage accounts you created for this tutorial, delete the resource group you created earlier.

Aşağıdaki CLı komutunu yürütün:Execute the following CLI command:

az group delete --name amsResourceGroup

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

Azure Media Services v3 SDK 'Ları iş parçacığı açısından güvenli değildir.The Azure Media Services v3 SDKs aren't thread-safe. Çok iş parçacıklı bir uygulama geliştirirken, iş parçacığı başına yeni bir Azudüzeltici Istemci nesnesi oluşturmanız ve kullanmanız gerekir.When developing a multi-threaded app, you should generate and use a new AzureMediaServicesClient object per thread.

Soru sorun, geri bildirimde bulunun, güncelleştirmeleri alAsk questions, give feedback, get updates

Soru sormak, geri bildirimde bulunmak ve Media Services hakkında güncelleştirmeler almak için Azure Media Services Community makalesine göz atın.Check out the Azure Media Services community article to see different ways you can ask questions, give feedback, and get updates about Media Services.

Sonraki adımlarNext steps

Videonuzu karşıya yükleme, kodlama ve akışla aktarma hakkında bilgi edindiğinize göre aşağıdaki makaleye bakabilirsiniz:Now that you know how to upload, encode, and stream your video, see the following article: