Creare un'attività di codifica che genera blocchi fMP4Create an encoding task that generates fMP4 chunks

PanoramicaOverview

Questo argomento illustra come creare un'attività di codifica che genera blocchi MP4 frammentato (fMP4) anziché file ISO MP4.This topic shows how to create an encoding task that generates fragmented MP4 (fMP4) chunks instead of ISO MP4 files. Per generare blocchi fMP4, usare il codificatore Media Encoder Standard o Flusso di lavoro Premium del codificatore multimediale per creare un'attività di codifica e specificare anche l'opzione AssetFormatOption.AdaptiveStreaming, come illustrato nel frammento di codice seguente:To generate fMP4 chunks, use the Media Encoder Standard or Media Encoder Premium Workflow encoder to create an encoding task and also specify AssetFormatOption.AdaptiveStreaming option, as shown in this code snippet:

task.OutputAssets.AddNew(@"Output Asset containing fMP4 chunks", 
        options: AssetCreationOptions.None, 
        formatOption: AssetFormatOption.AdaptiveStreaming);

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 per streaming adattivo.Add an encoding task to the job and specify to use the Adaptive Streaming preset.
  • Creare un asset di output che contiene blocchi fMP4 e un file con estensione ISM.Create an output asset that will contain fMP4 chunks and an .ism file.
  • 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 AdaptiveStreaming
{
    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. 
        // It is also specified to use AssetFormatOption.AdaptiveStreaming, 
        // which means the output asset will contain fMP4 chunks.

        task.OutputAssets.AddNew(@"Output Asset containing fMP4 chunks",
        options: AssetCreationOptions.None,
        formatOption: AssetFormatOption.AdaptiveStreaming);

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

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