Transcodificación de assets en Microsoft Azure Media Services desde .NET

Otra de las tareas que nos proporciona Azure Media Services es la transcodificación de los assets que tenemos en nuestra cuenta. Como ya comenté en el post de introducción, es posible llevar a cabo esta tarea a través del propio portal, utilizando el menú inferior (ENCODE):

Además podemos realizar esta misma tarea a través de .NET siguiendo estos pasos:

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

namespace EncodingAssets
{
    class Program
    {
        static void Main(string[] args)
        {
            //0. Constants
            const string accountName = "YOUR_ACCOUNT_NAME";
            const string accountKey = "YOUR_ACCOUNT_KEY";
            var assetName = "WOW_Mists_of_Pandaria_MP4";
            var OutputAssetName = "WOW_Mists_of_Pandaria_H264_Smooth";
            var encodingPreset = "H264 Smooth Streaming 720p";

            //1. Nuget: Install-Package windowsazure.mediaservices

            //2. Create context
            CloudMediaContext _context = new CloudMediaContext(accountName, accountKey);

            //3. Get asset
            var asset = _context.Assets.Where(a => a.Name == assetName).FirstOrDefault();

            //4. Declare a job
            var job = _context.Jobs.Create(string.Format("Encoding {0} to {1}", assetName, encodingPreset));

            //5. Get processor
            var processor = _context.MediaProcessors.Where(p => p.Name == "Windows Azure Media Encoder").ToList().OrderBy(wame => new Version(wame.Version)).LastOrDefault();

            //6. Create task
            var task = job.Tasks.AddNew("Encoding task", processor, encodingPreset, TaskOptions.None);

            //7. Specify the asset
            task.InputAssets.Add(asset);

            //8. Output asset with the result
            task.OutputAssets.AddNew(OutputAssetName, AssetCreationOptions.None);

            //9. Handle to check the progress
            job.StateChanged += StateChanged;

            job.Submit();

            //10. Check job execution and wait for job to finish
            Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
            progressJobTask.Wait();

            //11. Check final status
            Console.WriteLine("Job final state: {0}", job.State);

            Console.ReadLine();
        }

        static void StateChanged(object sender, JobStateChangedEventArgs e)
        {
            Console.WriteLine("Job stated change event:");
            Console.WriteLine("  Previous state: {0}", e.PreviousState);
            Console.WriteLine("  Current state: {0}", e.CurrentState);
        }
    }
}
  1. Constantes necesarias: Cuenta de Azure Media Services, nombre del asset que queremos codificar, nombre del asset resultante, preset que vamos a utilizar (utilizamos el nombre de los que aparecen listados en el portal cuando realizamos la tarea desde allí:
    Presets
  2. Instalamos a través de Nuget Install-Package windowsazure.mediaservices
  3. Conectamos la aplicación con la cuenta.
  4. Recuperamos el asset que queremos codificar. En este ejemplo, estamos recuperamos el asset a través del nombre pero es recomendable recuperarlo a través del Id, ya que el nombre de los assets puede repetirse.
  5. Creamos un job, que será el encargado de gestionar la tarea que vamos a llevar a cabo.
  6. Recuperamos el processor Windows Azure Media Encoder que realizará la tarea de encoding.
  7. Creamos una tarea dentro del job. Podemos tener varias tareas dentro de un job, las cuales se lanzarán de manera secuencial.
  8. Indicamos a la tarea cuál es el asset sobre el que queremos realizar la operación.
  9. Elegimos un nombre para el asset que se creará como resultado.
  10. Asociamos un handler al cambio de estado del job, para conocer cuál es el estado del mismo y lanzamos el job.
  11. Esperamos a que la tarea finalice
  12. Comprobamos el resultado del trabajo una vez finalizado.

Si lanzamos el ejemplo, podremos ver la siguiente salida en la consola:

Encoding output

Desde el portal podemos ver que en la sección CONTENT tenemos un nuevo asset con el nuevo nombre (en este caso WOW_Mists_of_Pandaria_H264_Smooth) y, si lo publicamos a través del menú inferior, veremos que el formato de la URL corresponde con el formato de Smooth Streaming:

http://[ACCOUNT_NAME].origin.mediaservices.windows.net/[LOCATOR_ID]/Mists_of_Pandaria.ism/Manifest

Espero que sea de utilidad.

¡Saludos!