Questa pagina è stata utile?
I suggerimenti relativi al contenuto di questa pagina sono importanti. Comunicaceli.
Altri suggerimenti?
1500 caratteri rimanenti
Esporta (0) Stampa
Espandi tutto

Recapito di asset con l'SDK di Servizi multimediali per .NET

Aggiornamento: febbraio 2015

Questo argomento illustra le tre opzioni più comuni per il recapito di contenuti multimediali ai client.

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

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

    Per testare l'URL di Smooth Streaming, usare il lettore smf.cloudapp.net/healthmonitor.

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

    Per testare l'URL HLS, usare Safari su un dispositivo iOS o il lettore 3ivx HLS

  • Download progressivo di file MP4.

  • Download di file di asset nel computer locale.

Per altre informazioni e concetti e la terminologia correlata alla distribuzione di contenuti multimediali, vedere Distribuzione di contenuto.

WarningAvviso
Servizi multimediali usa il valore della proprietà IAssetFile.Name per la creazione di URL per i contenuti in streaming (ad esempio http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters.) Per questo 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).

Configurare il progetto

Gli argomenti seguenti descrivono come configurare lo sviluppo in Servizi multimediali.

  1. Configurazione per lo sviluppo con l'SDK di Servizi multimediali per .NET

    Il codice riportato in questo argomento usa le estensioni dell'SDK .NET di Servizi multimediali di Azure. Le estensioni dell'SDK .NET di Servizi multimediali sono 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 con l'SDK di Servizi multimediali

Esempio

È possibile recapitare (tramite download o streaming) asset già archiviati nell'account Servizi multimediali (disponibili tramite la raccolta Assets). È anche possibile scaricare o trasmettere in streaming asset risultanti dall'esecuzione di un processo di codifica o di creazione di pacchetti (disponibili tramite la raccolta OutputMediaAssets). L'esempio in questo argomento illustra come accedere agli asset di file multimediali di output del processo e recapitarli.

Il codice contenuto in questa sezione effettua le operazioni seguenti:

  1. Crea un nuovo asset e carica un file MP4 in formato intermedio da una directory locale.

  2. Prepara un processo con una singola attività per eseguire la transcodifica dell'asset in formato intermedio precedente in un asset a più velocità in bit.

  3. Invia il processo e ne attende il completamento.

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

  5. Pubblica l'asset di output tramite la creazione di un localizzatore di origine.

  6. Genera gli URL Smooth Streaming, HLS e MPEG-DASH per lo streaming adattivo.

    Per lo streaming di contenuti in base al set di file MP4 a velocità in bit adattiva, è prima necessario ottenere almeno un'unità riservata di streaming su richiesta. Per altre informazioni, vedere Creazione dinamica dei pacchetti.

  7. Crea un localizzatore di firma di accesso condiviso che viene usato per il download progressivo e per il download dei file in una directory locale.

    Il contenuto per il quale si vuole eseguire il download progressivo non può essere crittografato.

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

  9. Scarica l'asset di output in una cartella locale.

noteNota
In questo esempio vengono usate le estensioni dell'SDK .NET di Servizi multimediali di Azure.  Le estensioni dell'SDK includono numerosi dettagli. Se si desidera vedere come vengono implementati alcuni metodi (ad esempio in che modo 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 codice in modo che punti alla cartella in cui si trova il file di input MP4.

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.AzureMediaEncoder, 
                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:
© 2015 Microsoft