VENDITE: 1-800-867-1389

Creazione di un processo di codifica con Media Services SDK for .NET

Aggiornamento: luglio 2014

Per distribuire video digitali su Internet, è necessario comprimere il file multimediale. Essendo piuttosto grandi, i file video digitali possono risultare di dimensioni eccessive per la distribuzione su Internet o per una corretta visualizzazione nei dispositivi degli utenti. La codifica consiste nella compressione di video e audio per consentire ai clienti di visualizzare i propri file multimediali.

I processi di codifica rappresentano una delle operazioni di elaborazione più comuni in Servizi multimediali. È possibile creare processi di codifica per convertire file multimediali da una codifica a un'altra. Per la codifica è possibile utilizzare Media Encoder, incorporato in Servizi multimediali. È inoltre possibile utilizzare un codificatore fornito da un partner Servizi multimediali: i codificatori di terze parti sono disponibili tramite Azure Marketplace. È possibile specificare i dettagli relativi alle attività di codifica utilizzando stringhe di set di impostazioni definite per il codificatore oppure file di configurazione di set di impostazioni. Per informazioni sui tipi di set di impostazioni disponibili, vedere Set di impostazioni di attività per Windows Azure Media Services. Se si utilizza un codificatore di terze parti, è necessario eseguire la convalida dei file. Per ulteriori informazioni, vedere l'esempio relativo alla convalida di H264 Adaptive Bitrate MP4 Set.

Quando si utilizza Servizi multimediali, può verificarsi uno dei seguenti scenari comuni:

  1. Caricamento di un file di input, denominato file mezzanine. Ad esempio un file H.264, MP4 o WMV (per un elenco completo dei formati supportati, vedere Formati supportati da Media Services Encoder).

  2. Codificare il file mezzanine in set con velocità in bit adattive MP4 H.264.

    noteNota
    È consigliabile codificare sempre il file mezzanine in un set con velocità in bit adattive MP4 e convertirlo nel formato desiderato mediante Creazione dinamica dei pacchetti o Creazione statica dei pacchetti.

    Se si desidera codificare il file mezzanine direttamente nel formato Smooth Streaming, è possibile utilizzare i set di impostazioni Smooth Streaming descritti in Set di impostazioni di sistema di Media Services Encoder. Questa soluzione non è tuttavia consigliabile a meno che il file mezzanine non sia di dimensioni molto ridotte.

    Prima di convertire un file WMV nel formato Smooth Streaming, è necessario codificarlo da WMV a H.264. WMV è un codec video che ha in genere un formato di contenitore ASF. H.264 è un codec video che può essere utilizzato con il formato di contenitore MP4. Smooth Streaming utilizza una variante di MP4 denominata MP4 frammentato o f-mp4. Smooth Streaming è un formato di flusso adattivo che richiede un set di file con diverse velocità in bit, tutti codificati con frammenti allineati in base alla velocità in bit. Un set di file MP4 codificati con frammenti allineati può essere convertito in f-mp4 senza richiedere una ricodifica. Questo non è possibile per i file WMV. Per ulteriori informazioni, vedere la panoramica tecnica relativa a Smooth Streaming.  

  3. Pubblicare l'asset contenente il set MP4 con velocità in bit adattive mediante la creazione di un localizzatore su richiesta.

  4. Distribuire il contenuto ai client. Utilizzare Creazione dinamica dei pacchetti per distribuire i formati adeguati del contenuto, ad esempio MPEG DASH, Smooth Streaming e HLS.

    Per proteggere il contenuto, vedere gli argomenti della sezione Protezione dei file multimediali.

In questo argomento viene illustrato Caricare un file MP4 e produrre set di velocità in bit adattive MP4 H.264 utilizzando Media Encoder e come creare URL per MPEG DASH, HLS e Smooth Streaming.

Negli argomenti riportati di seguito viene descritto come eseguire la configurazione per lo sviluppo con Servizi multimediali.

  1. Configurazione per lo sviluppo in Media Services SDK for .NET

    Si noti che in questo argomento viene utilizzato Azure Media Services .NET SDK Extensions. Media Services .NET SDK Extensions è il nome di un set di metodi di estensione e funzioni di supporto che semplificano il codice e lo sviluppo con Servizi multimediali.

  2. Connettersi a Servizi multimediali utilizzando Media Services SDK

Nell'esempio riportato di seguito viene illustrato come creare un processo di codifica basato sulla stringa di set di impostazioni "H264 Adaptive Bitrate MP4 Set 720p". Per un elenco di stringhe di set di impostazioni, vedere l'argomento Set di impostazioni di sistema di Media Services Encoder.

Il codice contenuto in questa sezione consente di effettuare le seguenti operazioni:

  1. Caricare un singolo file MP4.

  2. Codificare il file MP4 in un set di velocità in bit adattive MP4.

    Dopo aver codificato l'asset in un set di velocità in bit adattive H.264, è possibile sfruttare i vantaggi offerti dalla funzionalità di Creazione dinamica dei pacchetti che consente di distribuire flussi nel protocollo specificato senza ulteriori attività di creazione dei pacchetti.

  3. Pubblicare l'asset creando il localizzatore su richiesta.

  4. Ottenere URL di trasmissione in flusso per MPEG DASH, Smooth Streaming e HLS. Per ulteriori informazioni, vedere Distribuzione di asset con Media Services SDK for .NET.

Assicurarsi di aggiornare il seguente codice affinché punti alla posizione in cui è collocata la cartella contenente il file MP4 di input.

private static readonly string _mediaFiles =
Path.GetFullPath(@"../..\Media");

private static readonly string _singleMP4File =
    Path.Combine(_mediaFiles, @"SingleMP4\BigBuckBunny.mp4");

In questo esempio viene utilizzato Azure Media Services .NET SDK Extensions.  

using Microsoft.WindowsAzure.MediaServices.Client;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace MediaServicesPackaging
{
    class Program
    {
        private static readonly string _mediaFiles =
            Path.GetFullPath(@"../..\Media");

        private static readonly string _singleMP4File =
            Path.Combine(_mediaFiles, @"SingleMP4\BigBuckBunny.mp4");

        private static MediaServicesCredentials _cachedCredentials = null;
        private static CloudMediaContext _context = null;

        // Media Services account information.
        private static readonly string _mediaServicesAccountName =
            ConfigurationManager.AppSettings["MediaServicesAccountName"];
        private static readonly string _mediaServicesAccountKey =
            ConfigurationManager.AppSettings["MediaServicesAccountKey"];

        static void Main(string[] args)
        {
            // Create and cache the Media Services credentials in a static class variable.
            _cachedCredentials = new MediaServicesCredentials(
                            _mediaServicesAccountName,
                            _mediaServicesAccountKey);

            // Use the cached credentials to create CloudMediaContext.
            _context = new CloudMediaContext(_cachedCredentials);

            // Use the SDK extension method to create a new asset by 
            // uploading a mezzanine file from a local path.
            IAsset asset = _context.Assets.CreateFromFile(
                _singleMP4File,
                AssetCreationOptions.None,
                (af, p) =>
                {
                    Console.WriteLine("Uploading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress);
                });

            // Encode an MP4 file to a set of multibitrate MP4s.
            IAsset assetMultibitrateMP4s =
                EncodeMP4ToMultibitrateMP4s(asset);

            // Publish the asset.
            _context.Locators.Create(
                LocatorType.OnDemandOrigin,
                assetMultibitrateMP4s,
                AccessPermissions.Read,
                TimeSpan.FromDays(30));

            // Get the URLs.
            Console.WriteLine("Smooth Streaming URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetSmoothStreamingUri().ToString());
            Console.WriteLine("MPEG DASH URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetMpegDashUri().ToString());
            Console.WriteLine("HLS URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetHlsUri().ToString());
        }

        public static IAsset EncodeMP4ToMultibitrateMP4s(IAsset asset)
        {
            // Create a new job.
            IJob job = _context.Jobs.Create("Convert MP4 to Smooth Streaming.");

            // In Media Services, a media processor is a component that handles a specific processing task, 
            // such as encoding, format conversion, encrypting, or decrypting media content.
            //
            // Use the SDK extension method to  get a reference to the Azure Media Encoder.
            IMediaProcessor encoder = _context.MediaProcessors.GetLatestMediaProcessorByName(
                MediaProcessorNames.WindowsAzureMediaEncoder);

            // Add task 1 - Encode single MP4 into multibitrate MP4s.
            ITask adpativeBitrateTask = job.Tasks.AddNew("MP4 to Adaptive Bitrate Task",
                encoder,
                "H264 Adaptive Bitrate MP4 Set 720p",
                TaskOptions.None);

            // Specify the input Asset
            adpativeBitrateTask.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 in the clear (unencrypted).
            adpativeBitrateTask.OutputAssets.AddNew("Multibitrate MP4s",
                                    AssetCreationOptions.None);

            // Submit the job and wait until it is completed.
            job.Submit();
            job = job.StartExecutionProgressTask(
                j =>
                {
                    Console.WriteLine("Job state: {0}", j.State);
                    Console.WriteLine("Job progress: {0:0.##}%", j.GetOverallProgress());
                },
                CancellationToken.None).Result;

            // Get the output asset that contains the smooth stream.
            return job.OutputMediaAssets[0];
        }
    }
}

Generare ed eseguire il programma.

Il documento è risultato utile?
(1500 caratteri rimanenti)
Grazie per i commenti inviati.
Mostra:
© 2014 Microsoft