Zelf studie: Video's uploaden, coderen en streamen met Media Services v3Tutorial: Upload, encode, and stream videos with Media Services v3

Notitie

Hoewel deze zelf studie .NET SDK -voor beelden gebruikt, zijn de algemene stappen hetzelfde voor rest API, cliof andere ondersteunde sdk's.Even though this tutorial uses .NET SDK examples, the general steps are the same for REST API, CLI, or other supported SDKs.

Met Azure Media Services kunt u uw media bestanden coderen in indelingen die op een groot aantal verschillende browsers en apparaten worden afgespeeld.Azure Media Services lets you encode your media files into formats that play on a wide variety of browsers and devices. Zo kunt u bijvoorbeeld inhoud streamen in de indelingen Apple HLS of MPEG DASH.For example, you might want to stream your content in Apple's HLS or MPEG DASH formats. Voordat u gaat streamen, moet u uw digitale mediabestand van hoge kwaliteit coderen.Before streaming, you should encode your high-quality digital media file. Zie voor hulp bij code ring concept code ring.For help with encoding, see Encoding concept. In deze zelfstudie wordt een lokaal videobestand geüpload en wordt het geüploade bestand gecodeerd.This tutorial uploads a local video file and encodes the uploaded file. U kunt ook inhoud coderen die u toegankelijk maakt via een HTTPS-URL.You can also encode content that you make accessible via an HTTPS URL. Zie Taakinvoer maken via een HTTP(s)-URL voor meer informatie.For more information, see Create a job input from an HTTP(s) URL.

Een video afspelen met Azure Media Player

In deze zelfstudie ontdekt u hoe u:This tutorial shows you how to:

  • Down load de voor beeld-app die wordt beschreven in het onderwerp.Download the sample app described in the topic.
  • Bekijk de code die uploadt, codeert en stromen.Examine the code that uploads, encodes, and streams.
  • Voer de app uit.Run the app.
  • De streaming-URL testen.Test the streaming URL.
  • Resources opschonen.Clean up resources.

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.If you don't have an Azure subscription, create a free account before you begin.

VereistenPrerequisites

Het voor beeld downloaden en instellenDownload and set up the sample

Kloon een GitHub-opslag plaats met het streaming .NET-voor beeld naar uw computer met behulp van de volgende opdracht: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

Het voorbeeld bevindt zich de map UploadEncodeAndStreamFiles.The sample is located in the UploadEncodeAndStreamFiles folder.

Open appSettings. json in het gedownloade project.Open appsettings.json in your downloaded project. Vervang de waarden door referenties die u hebt verkregen via toegang tot API's.Replace the values with credentials that you got from accessing APIs.

De code controleren die wordt geüpload, gecodeerd en gestreamdExamine the code that uploads, encodes, and streams

In dit gedeelte worden de functies bekeken die zijn gedefinieerd in het bestand Program.cs van het project UploadEncodeAndStreamFiles.This section examines functions defined in the Program.cs file of the UploadEncodeAndStreamFiles project.

In het voorbeeld worden de volgende acties uitgevoerd:The sample performs the following actions:

  1. Er wordt een nieuwe transformatie gemaakt (eerst wordt gecontroleerd of de opgegeven transformatie bestaat).Creates a new Transform (first, checks if the specified Transform exists).
  2. Hiermee maakt u een uitvoer activum dat wordt gebruikt als uitvoer van de coderings taak.Creates an output Asset that's used as the encoding Job's output.
  3. Er wordt een invoerasset gemaakt en het opgegeven lokale videobestand wordt erin geladen.Create an input Asset and uploads the specified local video file into it. De asset wordt gebruikt als de invoer voor de taak.The asset is used as the job's input.
  4. De coderingstaak wordt met behulp van de gemaakte invoer en uitvoer verzonden.Submits the encoding job using the input and output that was created.
  5. De status van de taak controleren.Checks the job's status.
  6. Er wordt een streaming-locator gemaakt.Creates a Streaming Locator.
  7. Er worden streaming-URL's samengesteld.Builds streaming URLs.

Starten met het gebruik van Media Services API's met .NET SDKStart using Media Services APIs with .NET SDK

Als u wilt starten met Media Services API's met .NET, moet u een AzureMediaServicesClient-object maken.To start using Media Services APIs with .NET, you need to create an AzureMediaServicesClient object. Als u het object wilt maken, moet u referenties opgeven die nodig zijn om de client verbinding te laten maken met Azure met behulp van Azure AD.To create the object, you must supply credentials needed for the client to connect to Azure using Azure AD. In de code die u aan het begin van het artikel hebt gekloond, wordt met de functie GetCredentialsAsync het object ServiceClientCredentials gemaakt op basis van de referenties die zijn opgegeven in het lokale configuratiebestand.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,
    };
}

Een invoerasset maken en er een lokaal bestand in uploadenCreate an input asset and upload a local file into it

Met de functie CreateInputAsset wordt een nieuwe invoerasset gemaakt en het opgegeven lokale videobestand wordt hierin geladen.The CreateInputAsset function creates a new input Asset and uploads the specified local video file into it. Deze Asset wordt gebruikt als invoer voor uw coderings taak.This Asset is used as the input to your encoding job. In Media Services v3 kan de invoer van een taak een activum of inhoud zijn die u via https-url's beschikbaar maakt voor uw Media Services-account.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. Zie Dit artikel voor meer informatie over het coderen van een HTTPS-URL.To learn how to encode from an HTTPS URL, see this article.

In Media Services v3 kunt u Azure Storage-API's gebruiken om bestanden te uploaden.In Media Services v3, you use Azure Storage APIs to upload files. Het volgende .NET-fragment laat zien hoe.The following .NET snippet shows how.

De volgende functie voert deze acties uit:The following function performs these actions:

  • Hiermee maakt u een Asset.Creates an Asset.
  • Hiermee wordt een Beschrijf bare SAS-URL opgehaald naar de container van het activum in de opslag.Gets a writable SAS URL to the asset’s container in storage.
  • Hiermee wordt het bestand geüpload naar de container in Storage met behulp van de SAS-URL.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.  
    CloudBlobContainer container = new CloudBlobContainer(sasUri);
    var blob = container.GetBlockBlobReference(Path.GetFileName(fileToUpload));

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

    return asset;
}

Een uitvoerasset maken voor het opslaan van het resultaat van een taakCreate an output asset to store the result of a job

In de uitvoerasset wordt het resultaat van de coderingstaak opgeslagen.The output Asset stores the result of your encoding job. Het project definieert de functie DownloadResults die de resultaten van deze uitvoerasset naar de uitvoermap downloadt zodat u kunt zien wat u hebt gekregen.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().ToString("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);
}

Een transformatie en een taak maken die het geüploade bestand codeertCreate a Transform and a Job that encodes the uploaded file

Wanneer u inhoud codeert of verwerkt in Media Services, is dit een gemeen schappelijk patroon voor het instellen van de coderings instellingen als een recept.When encoding or processing content in Media Services, it's a common pattern to set up the encoding settings as a recipe. U dient vervolgens een taak in te dienen om het recept toe te passen op een video.You would then submit a Job to apply that recipe to a video. Door nieuwe taken voor elke nieuwe video in te dienen, past u dat recept toe op alle Video's in uw bibliotheek.By submitting new jobs for each new video, you're applying that recipe to all the videos in your library. Een recept in Media Services wordt een trans formatiegenoemd.A recipe in Media Services is called a Transform. Zie Transformaties en taken voor meer informatie.For more information, see Transforms and Jobs. Het voorbeeld dat wordt beschreven in deze zelfstudie definieert een recept dat de video codeert om het te streamen naar tal van iOS- en Android-apparaten.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.

TransformerenTransform

Bij het maken van een nieuw transformatie-exemplaar, moet u opgeven wat u als uitvoer wilt maken.When creating a new Transform instance, you need to specify what you want it to produce as an output. De vereiste parameter is een TransformOutput-object, zoals weergegeven in de onderstaande code.The required parameter is a TransformOutput object, as shown in the code below. Elke transformatie-uitvoer bevat een voorinstelling.Each TransformOutput contains a Preset. Voorinstelling bevat de stapsgewijze instructies van de video- en/of audioverwerkingen die moeten worden gebruikt voor het genereren van de gewenste TransformOutput.Preset describes the step-by-step instructions of video and/or audio processing operations that are to be used to generate the desired TransformOutput. Het voorbeeld dat in dit artikel wordt beschreven, maakt gebruik van een ingebouwde voorinstelling genaamd AdaptiveStreaming .The sample described in this article uses a built-in Preset called AdaptiveStreaming. De voorinstelling codeert de invoervideo in een automatisch gegenereerde bitrate-ladder (bitrate-resolutieparen) op basis van de invoerresolutie en bitsnelheid en produceert ISO MP4-bestanden met H.264-video en AAC-audio die overeenkomen met elk bitrate-resolutiepaar.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. Zie een bitrate-ladder automatisch genereren voor meer informatie over deze voorinstelling.For information about this Preset, see auto-generating bitrate ladder.

U kunt een ingebouwde EncoderNamedPreset gebruiken of aangepaste voorinstellingen gebruiken.You can use a built-in EncoderNamedPreset or use custom presets. Zie Coderingsvoorinstellingen aanpassen voor meer informatie.For more information, see How to customize encoder presets.

Bij het maken van een transformatie moet u controleren of er al een bestaat met de methode Ophalen zoals weergegeven in de volgende code.When creating a Transform, you should first check if one already exists using the Get method, as shown in the code that follows. In Media Services-v3 retourneert de methode Ophalen van entiteiten null als de entiteit (een hoofdlettergevoelige controle van de naam).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;
}

JobJob

Zoals eerder vermeld, is het transformatie-object het recept en is de taak de werkelijke aanvraag bij Media Services om deze transformatie toe te passen op een bepaalde invoervideo of audio-inhoud.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. De taak bevat informatie zoals de locatie van de invoervideo en de locatie voor de uitvoer.The Job specifies information like the location of the input video, and the location for the output.

In dit voorbeeld is de invoervideo geüpload naar uw lokale machine.In this example, the input video has been uploaded from your local machine. Zie Dit artikel voor meer informatie over het coderen van een HTTPS-URL.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;
}

Wacht tot de taak is voltooidWait for the Job to complete

De taak neemt enige tijd in beslag en wanneer deze is voltooid, wordt u hiervan op de hoogte gesteld.The job takes some time to complete and when it does you want to be notified. In het onderstaande codevoorbeeld ziet u hoe de status van de taak kan worden opgevraagd in de service.The code sample below shows how to poll the service for the status of the Job. Polling is geen aanbevolen best practice voor productie-apps vanwege een mogelijke latentie.Polling isn't a recommended best practice for production apps because of potential latency. Polling kan worden beperkt bij een te intensief gebruik op een account.Polling can be throttled if overused on an account. Ontwikkelaars moeten in plaats daarvan Event Grid gebruiken.Developers should instead use Event Grid.

Event Grid is ontworpen voor hoge beschikbaarheid, consistente prestaties en dynamisch schalen.Event Grid is designed for high availability, consistent performance, and dynamic scale. Met Event Grid kunnen uw apps luisteren naar en reageren op gebeurtenissen uit vrijwel alle Azure-services, evenals aangepaste bronnen.With Event Grid, your apps can listen for and react to events from virtually all Azure services, as well as custom sources. Eenvoudige, op HTTP gebaseerde reactieve gebeurtenisafhandeling maakt het mogelijk om efficiënte oplossingen te bouwen met intelligente filtering en routering van gebeurtenissen.Simple, HTTP-based reactive event handling helps you build efficient solutions through intelligent filtering and routing of events. Zie Gebeurtenissen routeren naar een aangepast eindpunt.See Route events to a custom web endpoint.

De taak doorloopt meestal de volgende statussen: gepland, in wachtrij, wordt verwerkt, voltooid (definitieve status).The Job usually goes through the following states: Scheduled, Queued, Processing, Finished (the final state). Als bij de taak een fout is opgetreden is, krijgt u de status Fout.If the job has encountered an error, you get the Error state. Als de taak wordt geannuleerd, wordt deze geannuleerd en geannuleerd wanneer deze is voltooid...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 = 60 * 1000;

    Job job = null;

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

Foutcodes in taakJob error codes

Zie Foutcodes.See Error codes.

Een streaming-locator ophalenGet a Streaming Locator

Nadat de codering is voltooid, bestaat de volgende stap eruit om de video in de uitvoerasset beschikbaar te maken voor weergave door clients.After the encoding is complete, the next step is to make the video in the output Asset available to clients for playback. U kunt deze in twee stappen beschikbaar maken: eerst maakt u een streaming-Locatoren bouwt u vervolgens de streaming-url's die clients kunnen gebruiken.You can make it available in two steps: first, create a Streaming Locator, and second, build the streaming URLs that clients can use.

Het proces van het maken van een streaming-locator wordt publiceren genoemd.The process of creating a Streaming Locator is called publishing. De streaming-Locator is standaard onmiddellijk geldig nadat u de API-aanroepen hebt uitgevoerd en de laatste keer totdat deze is verwijderd, tenzij u de optionele begin-en eind tijden configureert.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.

Wanneer u een StreamingLocatormaakt, moet u de gewenste StreamingPolicyNameopgeven.When creating a StreamingLocator, you'll need to specify the desired StreamingPolicyName. In dit voor beeld moet u in-the-Clear (of niet-versleutelde inhoud) streamen, zodat het vooraf gedefinieerde beleid voor Clear streaming (PredefinedStreamingPolicy. ClearStreamingOnly) wordt gebruikt.In this example, you'll be streaming in-the-clear (or non-encrypted content) so the predefined clear streaming policy (PredefinedStreamingPolicy.ClearStreamingOnly) is used.

Belangrijk

Wanneer u een aangepast streamingbeleid gebruikt, moet u een beperkte set met dergelijke beleidsregels ontwerpen voor uw Media Service-account, en deze opnieuw gebruiken voor de StreamingLocators wanneer dezelfde versleutelingsopties en protocollen nodig zijn.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. Uw Media Service-account heeft een quotum voor het aantal streaming-beleidsvermeldingen.Your Media Service account has a quota for the number of Streaming Policy entries. Het is niet mogelijk om een nieuw streaming-beleid te maken voor elke streaming-Locator.You shouldn't be creating a new Streaming Policy for each Streaming Locator.

In de volgende code wordt ervan uitgegaan dat u de functie aanroept met een unieke locatornaam.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;
}

Terwijl in het voorbeeld in dit onderwerp streaming wordt behandeld, kunt u dezelfde aanroep gebruiken om een streaming-locator te maken voor het leveren van video via progressief downloaden.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.

Streaming-URL's ophalenGet streaming URLs

Nu de streaming-locator is gemaakt, kunt u de streaming-URL's ophalen, zoals weergegeven in GetStreamingURLs.Now that the Streaming Locator has been created, you can get the streaming URLs, as shown in GetStreamingURLs. Als u een URL wilt samenstellen, moet u de hostnaam van het streaming-eindpunt en het pad van de streaming-locator samenvoegen.To build a URL, you need to concatenate the Streaming Endpoint host name and the Streaming Locator path. In dit voorbeeld wordt het standaard streaming-eindpunt gebruikt.In this sample, the default Streaming Endpoint is used. Wanneer u voor het eerst een Media Service-account maakt, wordt dit standaard streaming-eindpunt gestopt. Daarom moet u Start aanroepen.When you first create a Media Service account, this default Streaming Endpoint will be in a stopped state, so you need to call Start.

Notitie

In deze methode hebt u de locatorName nodig die is gebruikt bij het maken van de streaming-locator voor de uitvoerasset.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();
        uriBuilder.Scheme = "https";
        uriBuilder.Host = streamingEndpoint.HostName;

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

    return streamingUrls;
}

Resources in uw Media Services-account opschonenClean up resources in your Media Services account

Over het algemeen moet u alles opschonen, behalve objecten die u wilt hergebruiken (doorgaans kunt u trans formaties opnieuw gebruiken en u blijft StreamingLocators, enzovoort).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.). Als u wilt dat uw account wordt gereinigd na het experimenteren, verwijdert u de resources die u niet wilt hergebruiken.If you want your account to be clean after experimenting, delete the resources that you don't plan to reuse. Met de volgende code worden bijvoorbeeld taken verwijderd:For example, the following code deletes Jobs:

private static async Task CleanUpAsync(
    IAzureMediaServicesClient client,
    string resourceGroupName,
    string accountName,
    string transformName)
{

    var jobs = await client.Jobs.ListAsync(resourceGroupName, accountName, transformName);
    foreach (var job in jobs)
    {
        await client.Jobs.DeleteAsync(resourceGroupName, accountName, transformName, job.Name);
    }

    var assets = await client.Assets.ListAsync(resourceGroupName, accountName);
    foreach (var asset in assets)
    {
        await client.Assets.DeleteAsync(resourceGroupName, accountName, asset.Name);
    }
}

De voorbeeld-app uitvoerenRun the sample app

  1. Druk op CTRL + F5 om de EncodeAndStreamFiles -app uit te voeren.Press Ctrl+F5 to run the EncodeAndStreamFiles app.
  2. Kopieer een van de streaming-URL's van de console.Copy one of the streaming URLs from the console.

In dit voorbeeld worden URL's weergegeven die kunnen worden gebruikt om de video met verschillende protocollen af te spelen:This example displays URLs that can be used to play back the video using different protocols:

Voorbeeld uitvoer met Url's voor Media Services streaming-video

De streaming-URL testenTest the streaming URL

In dit artikel gebruiken we Azure Media Player om de stream te testen.To test the stream, this article uses Azure Media Player.

Notitie

Als een speler wordt gehost op een https-site, moet u de URL bijwerken naar 'https'.If a player is hosted on an https site, make sure to update the URL to "https".

  1. Open een browser en ga naar https://aka.ms/azuremediaplayer/.Open a web browser and navigate to https://aka.ms/azuremediaplayer/.
  2. Plak in het vak URL: een van de waarden van de streaming-URL die u hebt ontvangen tijdens het uitvoeren van de app.In the URL: box, paste one of the streaming URL values you got when you ran the app.
  3. Selecteer Update speler.Select Update Player.

Azure Media Player kunnen worden gebruikt voor het testen, maar mag niet worden gebruikt in een productie omgeving.Azure Media Player can be used for testing but shouldn't be used in a production environment.

Resources opschonenClean up resources

Als u de resources van de resourcegroep niet meer nodig hebt, met inbegrip van de Media Services en opslagaccounts die u hebt gemaakt voor deze zelfstudie, verwijdert u de resourcegroep die u eerder hebt gemaakt.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.

Voer de volgende CLI-opdracht uit:Execute the following CLI command:

az group delete --name amsResourceGroup

MultithreadingMultithreading

De Azure Media Services v3-Sdk's zijn niet thread-veilig.The Azure Media Services v3 SDKs aren't thread-safe. Wanneer u een app met meerdere threads ontwikkelt, moet u een nieuw AzureMediaServicesClient-object per thread genereren en gebruiken.When developing a multi-threaded app, you should generate and use a new AzureMediaServicesClient object per thread.

Vragen stellen, feedback geven, updates ophalenAsk questions, give feedback, get updates

Bekijk het Azure Media Services Community -artikel voor verschillende manieren om vragen te stellen, feedback te geven en updates te ontvangen over Media Services.Check out the Azure Media Services community article to see different ways you can ask questions, give feedback, and get updates about Media Services.

Volgende stappenNext steps

Nu u weet hoe u uw video kunt uploaden, coderen en streamen, kunt u doorgaan naar het volgende artikel:Now that you know how to upload, encode, and stream your video, see the following article: