Crear canal para live streaming desde Azure Media Services SDK para .NET

En el post de ayer estuve hablando sobre la nueva preview para Live Streaming en Azure Media Services. Como pudimos ver es bastante sencillo crear canales desde el portal, pero hay ocasiones donde necesitamos que este proceso sea automático y parametrizable a través de nuestro código. En el siguiente ejemplo se muestra cómo crear un canal utilizando Azure Media Services SDK para .NET:

using Microsoft.WindowsAzure.MediaServices.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;

namespace LiveStreaming
{
    class Program
    {
        static void Main(string[] args)
        {
            //0. Constants
            const string AccountName = "[YOUR_ACCOUNT_NAME]";
            const string AccountKey = "[YOUR_ACCOUNT_KEY]";

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

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

            //3. Create a channel
            //3.1 Create Channel Input
            var input = new ChannelInput
            {
                StreamingProtocol = StreamingProtocol.RTMP,
                AccessControl = new ChannelAccessControl
                {
                    IPAllowList = new List<IPRange>
                    {
                        new IPRange{
                            Name="MyInput",
                            Address=IPAddress.Parse("0.0.0.0"),
                            SubnetPrefixLength = 0
                        }
                    }
                }
            };

            //3.2 Create Channel Preview
            var preview = new ChannelPreview
            {
                AccessControl = new ChannelAccessControl
                {
                    IPAllowList = new List<IPRange>()
                    {
                        new IPRange{ 
                            Name= "MyPreview", 
                            Address = IPAddress.Parse("0.0.0.0"), 
                            SubnetPrefixLength = 0
                        }
                    }
                }
            };

            //3.3 Create Channel Output
            var output = new ChannelOutput { Hls = new ChannelOutputHls { FragmentsPerSegment = 1 } };

            var channel = context.Channels.Create(new ChannelCreationOptions
            {
                Name = "Channel-Returngis-1",
                Input = input,
                Preview = preview,
                Output = output

            });

            channel.Start();

            var previewEndpoint = channel.Preview.Endpoints.FirstOrDefault().Url.ToString();
            var ingestEndpoint = channel.Input.Endpoints.FirstOrDefault().Url.ToString();

            Console.WriteLine("The channel {0} is {1}", channel.Name, channel.State);
            Console.WriteLine("Ingest endpoint: {0}",ingestEndpoint);
            Console.WriteLine("Preview endpoint: {0}",previewEndpoint);
                        
            Console.ReadLine();
            
        }
    }
}
  1. Se necesitan las credenciales de la cuenta de Azure Media Services.
  2. Instalamos el paquete windowsazure.mediaservices vía Nuget
  3. Recuperamos el contexto de la cuenta.
  4. Para generar el canal necesitamos:
    1. Crear el endpoint de ingesta a través de ChannelInput, donde le indicamos el protocolo a utilizar y el rango de IPs desde el cual se puede realizar la ingesta. Si utilizamos 0.0.0.0 estamos dando acceso público al mismo.
    2. Endpoint para acceder a la preview del canal, donde sólo añadimos el rango de IPs permitidos.
    3. Por último, es neceario crear la salida a través de ChannelOutput.
  5. Una vez que tenemos el endpoint de ingesta y de preview podemos crear el canal a través de context.Channels.Create e iniciarlo a través del método Start(). Cuando el proceso finaliza podemos recuperar las URLs de ingesta y preview para comenzar a probar el nuevo canal.

Happy live streaming!

Microsoft Azure Media Services – Live Streaming

Hace tan sólo una semana se liberó la preview para live streaming en Azure Media Services. Esta funcionalidad ya había sido utilizada antes por los Juegos Olímpicos de Invierno 2014 y durante la FIFA 2014. Ahora podemos también disfrutar de la preview desde nuestras casas. Los cambios en el portal están marcados con la palabra PREVIEW:

New preview tabs AMS

Content Protection se trata de otra nueva funcionalidad de la que hablaremos en otro post, relacionada con la protección de los assets. En cuanto a live streaming tenemos un nuevo tab llamado Channels el cual nos permitirá crear un punto de entrada y salida de vídeo y audio como vemos en la siguiente imagen:

Live-architecture

Los pasos comunes cuando trabajamos con live streaming son los siguientes:

  1. Se crea un canal, para el cual necesitamos un, un protocolo de ingesta (RTMP o Smooth Streaming) y las IPs desde las cuales se puede enviar contenido al canal. Desde el portal se presenta de la siguiente manera:
    Create a new Live Channel
    Cuando creamos un canal, se nos advierte de que el mismo genera un coste adicional en nuestra suscripción de Microsoft Azure. En el momento de escribir este post, el coste por utilizar el servicio en modo preview era €0.39/hora por canal (Más información). En este post el protocolo que vamos a utilizar es RTMP (Real Time Messaging Protocol). Dejaremos marcados los checks para que el canal se inicie una vez creado y utilice nuestra IP como punto de ingesta para el canal. La inicialización puede tardar unos segundos en completarse.
  2. Una vez finalizado el proceso, se generan dos valores importantes: Las URLs de ingesta y previsualización del canal:
    Ingest and Preview URLs
    La primera de ellas será utilizada por el encoder para enviar el contenido al servicio y la segunda nos permitirá ver la información que está recibiendo el canal antes de publicarlo.
  3. A día de hoy, el servicio necesita que el vídeo sea transcodificado en local antes de enviarlo a la nube. Por ello, necesitamos configurar un encoder que nos permita alimentar el canal con el formato adecuado. Es muy importante saber que actualmente para usar el protocolo RTMP sólo se permite H264 para vídeo y AAC para audio. Para este ejemplo, he utilizado Flash Media Live Encoder para Mac, el cual es gratuito y soporta tanto H264 como AAC (En el caso de Windows sería necesario comprar un plugin adicional para AAC proporcionado por MainConcept). Para poder utilizarlo, basta con modificar el archivo config.xml, ubicado en Applications > Adobe > Flash Media Live Encoder 3.2 > conf > config.xml, y poner a true el valor de streamsynchronization. Para este ejemplo he utilizado los siguientes valores:
    FMLE Mac AMSAdvanced Encoder Settings En el caso de FMLE basta con pulsar sobre el botón START para iniciar el envío de contenido al canal.
  4. Para comprobar que tanto el audio como el vídeo está llegando correctamente, volvemos al servicio en el portal de Azure y seleccionamos la acción PLAY > Play Preview URL:
    Play Preview URLMedia Services Channel Preview
  5. Una vez que hayamos confirmado que el modo preview recibe lo esperado, utilizaremos el botón START STREAMING para comenzar con la emisión en vivo.

Espero que sea de utilidad.

Happy streaming!

Desplegar una base de datos en Microsoft Azure SQL Database desde SQL Server Managament Studio

Hace tiempo atrás, cuando la plataforma Microsoft Azure todavía no era lo suficiente madura, la forma más conocida para migrar bases de datos en SQL Server a Azure SQL Database era a través de la herramienta SQL Azure Migration Wizard, conocida ahora como SQL Database Migration Wizard.

Lo cierto es que si estamos trabajando con SQL Server Management Studio 2012+ tenemos una tarea que nos facilita esta acción, simplemente haciendo clic con el botón derecho sobre la base de datos > Tasks > Deploy Database to SQL Azure:

Deploy database to SQL Azure

Gracias a esta acción, podemos conectarnos a nuestro servidor en la nube, elegir el tamaño y el nombre de la nueva base de datos y lanzar el despliegue:

Deployment Settings Azure SQL Database

Una vez finalizado nos mostrará un resumen de cada una de las acciones realizadas y el resultado:

Deploy Database Operation Complete Azure SQL Database

Siempre que queramos migrar una base de datos a SQL Azure se recomienda revisar Azure SQL Database Guidelines and Limitations.

Espero que sea de utilidad.

Feliz fin de semana!