Usare Azure Media Encoder Standard per generare automaticamente un bitrate ladderUse Azure Media Encoder Standard to auto-generate a bitrate ladder

PanoramicaOverview

In questo argomento viene illustrato come usare Media Encoder Standard (MES) per generare automaticamente un bitrate ladder (coppia risoluzione-velocità in bit) in base alla risoluzione di input e alla velocità in bit.This topic shows how to use Media Encoder Standard (MES) to auto-generate a bitrate ladder (bitrate-resolution pairs) based on the input resolution and bitrate. Il set di impostazioni generate automaticamente non supererà mai la risoluzione di input e la velocità in bit.The auto-generated preset will never exceed the input resolution and bitrate. Ad esempio, se l'input è 720p a 3 Mbps, l'output resterà al massimo a 720p e inizierà a una velocità inferiore a 3 Mbps.For example, if the input is 720p at 3Mbps, output will remain 720p at best, and will start at rates lower than 3Mbps.

Codifica solo per lo streamingEncoding for Streaming Only

Se si intende codificare il video di origine solo per lo streaming, è necessario usare il set di impostazioni "Flusso adattivo" quando si crea un'attività di codifica.If your intent is to encode your source video only for streaming, then you shoud use the "Adaptive Streaming" preset when creating an encoding task. Quando si usa il set di impostazioni Flusso adattivo il codificatore MES userà in modo intelligente un bitrate ladder.When using the Adaptive Streaming preset, the MES encoder will intelligently cap a bitrate ladder. Tuttavia, non sarà possibile controllare i costi di codifica, poiché il servizio determina il numero di livelli da usare e la risoluzione.However, you will not be able to control the encoding costs, since the service determines how many layers to use and at what resolution. È possibile vedere esempi dei livelli di output prodotti da MES in seguito alla codifica con il set di impostazioni Flusso adattivo alla fine di questo argomento.You can see examples of output layers produced by MES as a result of encoding with the Adaptive Streaming preset at the end of this topic. L'asset di output conterrà i file MP4 in cui audio e video non sono di tipo Interleaved.The output Asset will contain MP4 files where audio and video are not interleaved.

Codifica per streaming e download progressivoEncoding for Streaming and Progressive Download

Se si intende codificare un video di origine per lo streaming e per produrre file MP4 per il download progressivo, è necessario usare il set di impostazioni "Content Adaptive Multiple Bitrate MP4" durante la creazione di un'attività di codifica.If your intent is to encode your source video for streaming as well as to produce MP4 files for progressive download, then you shoud use the "Content Adaptive Multiple Bitrate MP4" preset when creating an encoding task. Quando si usa il set di impostazioni Content Adaptive Multiple Bitrate MP4, il codificatore MES applicherà la stessa logica di codifica illustrata in precedenza, ma ora l'asset di output conterrà file MP4 in cui audio e video sono di tipo Interleaved.When using the Content Adaptive Multiple Bitrate MP4 preset, the MES encoder will apply the same encoding logic as above, but now the output asset will contain MP4 files where audio and video are interleaved. È possibile usare uno di questi file MP4 (ad esempio la versione con bitrate più elevato) come file di download progressivo.You can use one of these MP4 files (for example, the highest bitrate version) as a progressive download file.

Codifica con l’SDK .NET dei servizi multimedialiEncoding with Media Services .NET SDK

Il seguente codice usa l'SDK .NET di Servizi multimediali per eseguire le seguenti attività: The following code example uses Media Services .NET SDK to perform the following tasks:

  • Creare un processo di codifica.Create an encoding job.
  • Ottenere un riferimento al codificatore Media Encoder Standard.Get a reference to the Media Encoder Standard encoder.
  • Aggiungere un'attività di codifica al processo e specificare l'uso del set di impostazioni Flusso adattivo.Add an encoding task to the job and specify to use the Adaptive Streaming preset.
  • Creare un asset di output che conterrà l'asset codificato.Create an output asset that will contain the encoded asset.
  • Aggiungere un gestore eventi per controllare l'avanzamento del processo.Add an event handler to check the job progress.
  • Inviare il processo.Submit the job.

Creare e configurare un progetto di Visual StudioCreate and configure a Visual Studio project

Configurare l'ambiente di sviluppo e popolare il file app.config con le informazioni di connessione, come descritto in Sviluppo di applicazioni di Servizi multimediali con .NET.Set up your development environment and populate the app.config file with connection information, as described in Media Services development with .NET.

EsempioExample

using System;
using System.Configuration;
using System.Linq;
using Microsoft.WindowsAzure.MediaServices.Client;
using System.Threading;

namespace AdaptiveStreamingMESPresest
{
    class Program
    {
    // Read values from the App.config file.
    private static readonly string _AADTenantDomain =
    ConfigurationManager.AppSettings["AADTenantDomain"];
    private static readonly string _RESTAPIEndpoint =
    ConfigurationManager.AppSettings["MediaServiceRESTAPIEndpoint"];

    // Field for service context.
    private static CloudMediaContext _context = null;

    static void Main(string[] args)
    {
        var tokenCredentials = new AzureAdTokenCredentials(_AADTenantDomain, AzureEnvironments.AzureCloudEnvironment);
        var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

        _context = new CloudMediaContext(new Uri(_RESTAPIEndpoint), tokenProvider);

        // Get an uploaded asset.
        var asset = _context.Assets.FirstOrDefault();

        // Encode and generate the output using the "Adaptive Streaming" preset.
        EncodeToAdaptiveBitrateMP4Set(asset);

        Console.ReadLine();
    }

    static public IAsset EncodeToAdaptiveBitrateMP4Set(IAsset asset)
    {
        // Declare a new job.
        IJob job = _context.Jobs.Create("Media Encoder Standard Job");

        // Get a media processor reference, and pass to it the name of the 
        // processor to use for the specific task.
        IMediaProcessor processor = GetLatestMediaProcessorByName("Media Encoder Standard");

        // Create a task
        ITask task = job.Tasks.AddNew("Media Encoder Standard encoding task",
        processor,
        "Adaptive Streaming",
        TaskOptions.None);

        // Specify the input asset to be encoded.
        task.InputAssets.Add(asset);
        // Add an output asset to contain the results of the job. 
        // This output is specified as AssetCreationOptions.None, which 
        // means the output asset is not encrypted. 
        task.OutputAssets.AddNew("Output asset",
        AssetCreationOptions.None);

        job.StateChanged += new EventHandler<JobStateChangedEventArgs>(JobStateChanged);
        job.Submit();
        job.GetExecutionProgressTask(CancellationToken.None).Wait();

        return job.OutputMediaAssets[0];
    }
    private static void JobStateChanged(object sender, JobStateChangedEventArgs e)
    {
        Console.WriteLine("Job state changed event:");
        Console.WriteLine("  Previous state: " + e.PreviousState);
        Console.WriteLine("  Current state: " + e.CurrentState);
        switch (e.CurrentState)
        {
        case JobState.Finished:
            Console.WriteLine();
            Console.WriteLine("Job is finished. Please wait while local tasks or downloads complete...");
            break;
        case JobState.Canceling:
        case JobState.Queued:
        case JobState.Scheduled:
        case JobState.Processing:
            Console.WriteLine("Please wait...\n");
            break;
        case JobState.Canceled:
        case JobState.Error:

            // Cast sender as a job.
            IJob job = (IJob)sender;

            // Display or log error details as needed.
            break;
        default:
            break;
        }
    }
    private static IMediaProcessor GetLatestMediaProcessorByName(string mediaProcessorName)
    {
        var processor = _context.MediaProcessors.Where(p => p.Name == mediaProcessorName).
        ToList().OrderBy(p => new Version(p.Version)).LastOrDefault();

        if (processor == null)
        throw new ArgumentException(string.Format("Unknown media processor", mediaProcessorName));

        return processor;
    }
    }
}

OutputOutput

Questa sezione mostra tre esempi dei livelli di output prodotti da MES in seguito alla codifica con il set di impostazioni Flusso adattivo.This section shows three examples of output layers produced by MES as a result of encoding with the Adaptive Streaming preset.

Esempio 1Example 1

L'origine con altezza "1080" e una frequenza frame "29.970" produce 6 livelli video:Source with height "1080" and framerate "29.970" produces 6 video layers:

LivelloLayer Altezza:Height LarghezzaWidth Bitrate (Kbps)Bitrate(kbps)
11 10801080 19201920 67806780
22 720720 12801280 35203520
33 540540 960960 22102210
44 360360 640640 11501150
55 270270 480480 720720
66 180180 320320 380380

Esempio 2Example 2

L'origine con altezza "720" e una frequenza frame "23.970" produce 5 livelli video:Source with height "720" and framerate "23.970" produces 5 video layers:

LivelloLayer Altezza:Height LarghezzaWidth Bitrate (Kbps)Bitrate(kbps)
11 720720 12801280 29402940
22 540540 960960 18501850
33 360360 640640 960960
44 270270 480480 600600
55 180180 320320 320320

Esempio 3Example 3

L'origine con altezza "360" e una frequenza frame "29.970" produce 3 livelli video:Source with height "360" and framerate "29.970" produces 3 video layers:

LivelloLayer Altezza:Height LarghezzaWidth Bitrate (Kbps)Bitrate(kbps)
11 360360 640640 700700
22 270270 480480 440440
33 180180 320320 230230

Percorsi di apprendimento di Servizi multimedialiMedia Services learning paths

Altre informazioni sui percorsi di apprendimento di Servizi multimediali di Azure:Read about the Azure Media Services learning paths:

Fornire commenti e suggerimentiProvide feedback

Usare il forum di suggerimenti degli utenti per fornire commenti e suggerimenti su come migliorare Servizi multimediali di Azure.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. È anche possibile passare direttamente a una delle categorie seguenti:You also can go directly to one of the following categories:

Vedere ancheSee Also

Panoramica sulla codifica dei servizi multimedialiMedia Services Encoding Overview