Exportar (0) Imprimir
Expandir todo

Entrega de recursos con el SDK de Media Services para .NET

Actualizado: abril de 2013

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

  • Contenido de streaming adaptable con alguno de los siguientes formatos: MPEG DASH, HTTP Live Streaming (HLS) de Apple y Smooth Streaming.

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

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

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

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

  • Descarga progresiva de archivos MP4.

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

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

WarningAdvertencia
Media Services usa el valor de la propiedad IAssetFile.Name para construir direcciones URL para 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 temas siguientes, se muestra cómo establecer la configuración para el desarrollo en Media Services.

  1. Configuración para el desarrollo en el SDK de Media Services para .NET

    Tenga en cuenta que el código de este tema usa las Extensiones del SDK de Azure Media Services para .NET. Media Services .NET SDK Extensions es un conjunto de métodos de extensión y funciones de aplicación auxiliar que simplifican el código y facilitan el desarrollo con Media Services.

  2. Conexión con Media Services mediante el SDK de Media Services

Puede entregar (descargar o hacer streaming) recursos que están almacenados en su cuenta de Media Services (disponibles a través de la colección Assets). También puede descargar o hacer streaming de recursos que resulten de ejecutar un trabajo de codificación o empaquetado (disponibles a través de la colección OutputMediaAssets). El ejemplo de este tema muestra cómo obtener acceso y entregar los recursos multimedia de salida del trabajo.

El código que se muestra en esta sección lleva a cabo lo siguiente:

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

  2. Prepara un trabajo con una sola tarea para transcodificar el recurso intermedio anterior en un recurso con diferentes velocidades de bits.

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

  4. Obtiene el recurso de salida que ha producido el trabajo de codificación.

  5. Publica el recurso de salida creando un localizador de origen.

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

    Para hacer streaming de contenido en función del conjunto de archivos MP4 de velocidad de bits adaptable, debe obtener al menos una unidad reservada de streaming a petición. Para obtener más información, vea Paquetes dinámicos.

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

    El contenido que desea descargar progresivamente no se puede cifrar.

  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 utiliza las Extensiones del SDK de Azure Media Services para .NET.  Las extensiones del SDK ocultan muchos detalles. Si desea ver cómo se implementan algunos métodos (por ejemplo, cómo crean los métodos siguientes las direcciones URL de streaming: GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri()), puede examinar el código que encontrará 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.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)); 
        } 
    } 
} 

Vea también

Mostrar:
© 2014 Microsoft