Azure Media Encoder: cambio en el precio… ¡y en el código!

El 1 de Octubre se anunció a través del blog oficial de la plataforma un cambio significativo en el precio relacionado con el encoding en Microsoft Azure Media Services: A partir de ahora sólo se cobrará por los gigasbytes de salida del proceso.

Lo que es importante saber es que no se trata de un cambio automático, sino que es necesario ser cuidadosos con el procesador que estamos recuperando de la plataforma, para que este nuevo precio sea el que se nos esté aplicando. Para tenerlo más claro, a través del siguiente código, podemos recuperar el listado de los procesadores que actualmente nos devuelve la plataforma:

using Microsoft.WindowsAzure.MediaServices.Client;
using System;
using System.Linq;

namespace GetAMSProcessors
{
    class Program
    {
        static void Main(string[] args)
        {
            //0. Constants
            const string AccountName = "YOUR_MEDIA_ACCOUNT_NAME";
            const string AccountKey = "YOUR_MEDIA_ACCOUNT_KEY";

            //1. Install-Package windowsazure.mediaservices

            //2. Get context
            var context = new CloudMediaContext(AccountName, AccountKey);

            foreach (var processor in context.MediaProcessors.ToList())
            {
                Console.WriteLine(string.Format("{0} {1}", processor.Name, processor.Version));
            }

            Console.ReadLine();
        }
    }
}

Si ejecutamos el código anterior, podemos observar que existe más de un procesador para la tarea de encoding, pero sólo uno de ellos a día de hoy es el correcto a la hora de aplicar el nuevo precio:

MediaProcessors

Parece algo obvio pero debemos de tener especial cuidado, ya que si utilizamos una versión anterior a Azure Media Encoder 4.1 se nos cobrará tanto por la entrada como por la salida.

Dicho esto, podemos recuperar el procesador correcto de dos formas distintas:

Usando Media extensions

            var processor = context.MediaProcessors.GetLatestMediaProcessorByName("Azure Media Encoder");

O través de la siguiente expresión lambda:

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

Happy encoding!