Esporta (0) Stampa
Espandi tutto

Distribuzione di asset con Media Services SDK for .NET

Aggiornamento: aprile 2013

In questo argomento vengono illustrate le opzioni più comuni per la distribuzione di contenuto multimediale ai client.

  • Trasmissione in flusso di contenuto adattivo in uno dei seguenti formati: MPEG DASH, Apple HTTP Live Streaming (HLS) e Smooth Streaming.

    Una volta generati gli URL di flusso (come illustrato in questo argomento) è possibile testarli utilizzando i seguenti lettori:

    Per testare gli URL Smooth Streaming, utilizzare il lettore smf.cloudapp.net/healthmonitor.

    Per testare l'URL MPEG DASH, utilizzare il lettore dashif.org/reference/players/javascript/.

    Per testare l'URL HLS, utilizzare Safari su un dispositivo iOS o 3ivx-hls-player

  • Download progressivo di file MP4.

  • Download di file di asset nel computer locale.

Per ulteriori informazioni, concetti e terminologia correlati alla distribuzione di contenuto multimediale, vedere Distribuzione di contenuto.

WarningAvviso
Servizi multimediali utilizza il valore della proprietà IAssetFile.Name durante la compilazione di URL per la riproduzione in flusso di contenuti, ad esempio http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters. Per tale motivo, la codifica percentuale non è consentita. Il valore della proprietà Name non può contenere alcuno dei seguenti caratteri riservati per la codifica percentuale: !*'();:@&=+$,/?%#[]". L'estensione del nome di file, inoltre, può essere preceduta da un solo '.' (punto).

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

  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 Media Services.

  2. Connettersi a Media Services mediante Media Services SDK

È possibile distribuire (download o trasmissione in flusso) asset che sono già memorizzati nel proprio account Servizi multimediali (disponibile mediante la raccolta Assets). È inoltre possibile scaricare o trasmettere in flusso asset ottenuti dall'escuzione di processo di codifica o di inserimento nel pacchetto (disponibile mediante la raccolta OutputMediaAssets). Nell'esempio riportato in questo argomento viene illustrato come accedere e distribuire asset multimediali di output del processo.

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

  1. Creare un nuovo asset e caricare un file MP4 mezzanine da una directory locale.

  2. Preparare un processo costituito da una sola attività per eseguire la transcodifica dell'asset del file mezzanine precedente in un asset a più velocità in bit.

  3. Inviare il processo e attendere il completamento.

  4. Ottenere l'asset di output prodotto dal processo di codifica.

  5. Pubblicare l'asset di output mediante la creazione di un localizzatore di origine.

  6. Generare gli URL Smooth Streaming, HLS e MPEG-DASH per il flusso adattivo.

    Per trasmettere in flusso il proprio contenuto basato su un set di file MP4 a velocità in bit adattive, è prima necessario ottenere almeno un'unità riservata di trasmissione in flusso su richiesta. Per ulteriori informazioni, vedere Creazione dinamica dei pacchetti.

  7. Creare un localizzatore SAS che viene utilizzato per il download progressivo e per il download di file in una directory locale.

    Il contenuto di cui si desidera eseguire il download progressivo non può essere crittografato.

  8. Generare gli URL di download progressivo per ciascun file MP4 contenuto nell'asset.

  9. Eseguire il download dell'asset di output in una cartella locale.

noteNota
In questo esempio viene utilizzato Azure Media Services .NET SDK Extensions. Le estensioni SDK includono numerosi dettagli. Se si desidera vedere la modalità con cui vengono implementati alcuni metodi, ad esempio il modo in cui i metodi seguenti creano gli URL di streaming: GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri()), è possibile esplorare il codice disponibile su github: azure-sdk-for-media-services-extensions.

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");

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 Microsoft.WindowsAzure.MediaServices.Client;


namespace MediaServicesDeliveringContent 
{ 
    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) 
        {
            _cachedCredentials = new MediaServicesCredentials(_mediaServicesAccountName,
                                                                                _mediaServicesAccountKey);
            _context = new CloudMediaContext(_cachedCredentials); 

            Console.WriteLine("Creating new asset from local file..."); 
 
            // Create a new asset and upload a mezzanine file from a local path. 
            IAsset inputAsset = _context.Assets.CreateFromFile(
                _singleMP4File, 
                AssetCreationOptions.None, 
                (af, p) => 
                { 
                    Console.WriteLine("Uploading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress); 
                }); 
 
            Console.WriteLine("Asset created."); 
 
            // Prepare a job with a single task to transcode the previous mezzanine asset 
            // into a multi-bitrate asset. 
            IJob job = _context.Jobs.CreateWithSingleTask( 
                MediaProcessorNames.WindowsAzureMediaEncoder, 
                MediaEncoderTaskPresetStrings.H264AdaptiveBitrateMP4Set720p, 
                inputAsset, 
                "Sample Adaptive Bitrate MP4", 
                AssetCreationOptions.None); 
 
            Console.WriteLine("Submitting transcoding job..."); 
 
            // 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; 
 
            Console.WriteLine("Transcoding job finished."); 
             
            // The OutputMediaAssets[0] contains the first 
            // (and in this case the only) output asset 
            // produced by the encoding job.
            IAsset outputAsset = job.OutputMediaAssets[0]; 
 
            Console.WriteLine("Publishing output asset..."); 
 
            // Publish the output asset by creating an Origin locator.  
            // Define the Read only access policy and
            // specify that the asset can be accessed for 30 days.  
            _context.Locators.Create( 
                LocatorType.OnDemandOrigin, 
                outputAsset, 
                AccessPermissions.Read, 
                TimeSpan.FromDays(30));

            // Generate the Smooth Streaming, HLS and MPEG-DASH URLs for adaptive streaming.  
            Uri smoothStreamingUri = outputAsset.GetSmoothStreamingUri();
            Uri hlsUri = outputAsset.GetHlsUri();
            Uri mpegDashUri = outputAsset.GetMpegDashUri();

            // To stream your content based on the set of 
            // adaptive bitrate MP4 files, you must first get 
            // at least one On-demand Streaming reserved unit. 
            // For more information, see http://msdn.microsoft.com/en-us/library/jj889436.aspx.
            Console.WriteLine("Output is now available for adaptive streaming:");

            // Show the streaming URLs. 
            Console.WriteLine(smoothStreamingUri);
            Console.WriteLine(hlsUri);
            Console.WriteLine(mpegDashUri);
                
            //
            // Create a SAS locator that is used for progressive download
            // or to download files to a local directory.  
            // The content that you want to progressively download cannot be encrypted.
            _context.Locators.Create( 
                LocatorType.Sas, 
                outputAsset, 
                AccessPermissions.Read, 
                TimeSpan.FromDays(30)); 

            // Get all the MP4 files in the output asset.
            IEnumerable<IAssetFile> mp4AssetFiles = outputAsset
                    .AssetFiles
                    .ToList()
                    .Where(af => af.Name.EndsWith(".mp4", 
                        StringComparison.OrdinalIgnoreCase));

            // Generate the Progressive Download URLs for each MP4. 
            List<Uri> mp4ProgressiveDownloadUris = 
                mp4AssetFiles.Select(af => af.GetSasUri()).ToList();

            Console.WriteLine("You can progressively download the following MP4 files:");
            mp4ProgressiveDownloadUris.ForEach(uri => Console.WriteLine(uri)); 
 
             string outputFolder = Path.Combine(_mediaFiles, @"job-output");

            if (!Directory.Exists(outputFolder)) 
            { 
                Directory.CreateDirectory(outputFolder); 
            } 
 
            Console.WriteLine("Downloading output asset files to local folder..."); 
 
            // Download the output asset to a local folder. 
            outputAsset.DownloadToFolder( 
                outputFolder, 
                (af, p) => 
                { 
                    Console.WriteLine("Downloading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress); 
                }); 
 
            Console.WriteLine("Downloaded files are located in '{0}'.", Path.GetFullPath(outputFolder)); 
        } 
    } 
} 

Vedere anche

Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft