Exportar (0) Imprimir
Expandir todo

Entrega de recursos con el SDK de Servicios multimedia para .NET

Actualizado: septiembre de 2014

En este tema se muestran las tres opciones más comunes para entregar contenido multimedia a sus clientes.

  • Contenido adaptativo de streaming en uno de los siguientes formatos: MPEG DASH, HTTP Live Streaming (HLS) de Apple y Smooth Streaming.

    Una vez generadas las direcciones URL de streaming (como se muestra en este tema), puede probarlas con los siguientes reproductores:

    Para probar la dirección URL Smooth Streaming, use el reproductor smf.cloudapp.net/healthmonitor.

    Para probar la dirección URL MPEG DASH, use el reproductor dashif.org/reference/players/javascript/.

    Para probar la dirección URL HLS, use Safari en un dispositivo iOS o 3ivx-hls-player.

  • Descarga progresiva de archivos MP4.

  • Descarga de archivos de recursos en la máquina local.

Para obtener más información, terminología y conceptos relacionados con la entrega de contenido multimedia, vea Entregar contenido.

WarningAdvertencia
Media Services usa el valor de la propiedad IAssetFile.Name al generar las URL para el contenido de streaming (por ejemplo, http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters). Por este motivo, no se permite la codificación de porcentaje. El valor de la propiedad Name no puede contener ninguno de los siguientes caracteres reservados a la codificación de porcentaje: !*'();:@&=+$,/?%#[]". Además, solo puede haber un ‘.’ para la extensión de nombre de archivo.

En los siguientes temas se muestra cómo configurar el desarrollo de Servicios multimedia.

  1. Configuración de desarrollo con el SDK de Servicios multimedia para .NET

    Tenga en cuenta que el código de este tema usa las Extensiones del SDK de Servicios multimedia de Azure para .NET.  Las extensiones del SDK de Servicios multimedia para .NET son un conjunto de métodos de extensión y funciones de aplicación auxiliar que le facilitan el código y el desarrollo con Servicios multimedia.

  2. Conéctese a Servicios multimedia con el SDK de Servicios multimedia

Puede entregar activos (de descarga o de secuencia) que ya están almacenados en su cuenta Media Services (disponible a través de la colección Assets). También puede descargar o transmitir por secuencias ese resultado de ejecutar un trabajo de empaquetado o codificación (disponible a través de la colección OutputMediaAssets). En el ejemplo de este tema se muestra cómo obtener acceso y entregar los recursos multimedia de salida del trabajo.

El código de esta sección efectúa las siguientes acciones:

  1. Crea un nuevo recurso y carga un archivo MP4 mezzanine desde un directorio local.

  2. Prepara un trabajo con una sola tarea para transcodificar el recurso mezzanine anterior en un recurso de velocidad de bits múltiples.

  3. Envía el trabajo y espera hasta que se completa.

  4. Obtiene el activo de salida que generó el trabajo de codificación.

  5. Publica el recurso de salida mediante la creación de un localizador de origen.

  6. Genera las direcciones URL de Smooth Streaming, HLS y MPEG-DASH para el streaming adaptable.

    Para hacer streaming de contenido basándose en el conjunto de archivos MP4 de velocidad de bits adaptable, primero debe obtener al menos una unidad reservada de streaming a petición. Para obtener más información, vea Empaquetado dinámico.

  7. Crea un localizador SAS que se utiliza para la descarga progresiva y para descargar archivos en un directorio local.

    No se puede cifrar el contenido que desea descargar de manera progresiva.

  8. Genera las direcciones URL de descarga progresiva para cada archivo MP4 del recurso.

  9. Descarga el recurso de salida en una carpeta local.

noteNota
Este ejemplo usa las Extensiones del SDK de Servicios multimedia de Azure para .NET.  Las extensiones del SDK ocultan muchos detalles. Si desea ver cómo se implementan algunos métodos (por ejemplo, la manera en que los siguientes métodos crean direcciones URL de streaming: GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri()), puede examinar el código que se encuentra en github: azure-sdk-for-media-services-extensions.

Asegúrese de actualizar el código para que apunte a la carpeta en la que se encuentra el archivo MP4 de entrada.

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

Vea también

Mostrar:
© 2014 Microsoft