DEV Community

hernancho for AWS

Posted on

Cómo hacer streaming en vivo en Twitch sin ningún equipo especial

Traducción del fantástico post de Alex Casalboni. Gracias!

Esta es una historia real (divertida) que evolucionó en los últimos 10 días. Espero que sea útil y entretenida para tod@s l@s que quieran convertir sus eventos presenciales en reuniones remotas en Twitch.

Si no quieres leer mucho: ve directo a detalles técnicos y de arquitectura :)

Soy ingeniero de software y developer advocate de AWS basado en Italia, y en las últimas semanas he estado trabajando desde casa debido al COVID-19. He estado co-organizando el meetup de Serverless en Milán desde 2016 con un gran equipo de cuatro co-organizadores.

La semana pasada comenzamos a experimentar con Twitch para transmitir en vivo nuestras próximas reuniones y darles a nuestros asistentes virtuales la oportunidad de comunicarse y compartir dudas e ideas en el chat en vivo. Ya sabíamos que deberíamos usar OBS para manejar la transmisión, personalizar escenas, etc., pero no teníamos mucha experiencia, por lo que realizamos algunas pruebas.

Prueba 1: no hagas esto en casa 💥

Muy ingenuamente, intenté transmitir en vivo desde mi propia computadora portátil (MacBook) usando OBS. Como OBS no puede usar ningún codificador optimizado para la transmisión en vivo en MacOS, casi mato mi computadora portátil después de sólo 8 minutos.

Así que estaba bastante claro que también necesitábamos algún tipo de "hardware especial". Preguntamos y nos recomendaron ejecutar OBS en una PC (Windows) con un mejor rendimiento de CPU e idealmente una GPU también.

Debido a que queríamos permitir múltiples presentadores a la vez, entendimos muy pronto que necesitábamos algún tipo de "puente" de video llamada para luego simplemente transmitir a Twitch. Así que rápidamente configuré un cuarto en Amazon Chime .

Prueba 2: funcionó, pero con baja calidad 👍👎

Nuestro co-organizador Simone transmitió en vivo una llamada de Chime desde la PC de escritorio de su oficina (Windows) usando OBS para capturar la transmisión de video de Chime. Funcionó bastante bien, tanto el video como el audio se transmitieron con éxito cuando compartí mi pantalla (PowerPoint + IDE local). Sin embargo, dado que simplemente estábamos haciendo una captura de pantalla de una llamada Chime (no una fuente de video nativa), la escena era bastante básica y la calidad del video era demasiado baja para ver claramente el texto y código fuente pequeños.

Así estuvimos perdimos por unas horas, pero otro amigo de Italia (¡gracias Gianluca !) me dijo que había otra opción: desde 2018, Skype soporta el protocolo NDI, que le permite mover las transmisiones de video/audio de Skype directamente a OBS como fuente nativa y con suerte lograr una mejor calidad. Esto sonaba prometedor, así que decidimos probarlo también.

Prueba 3: mucho mejor, pero ... 😱

Simone y yo creamos una nueva sala de Skype, instalamos el complemento NDI para OBS y ejecutamos otra prueba desde la PC de su oficina. Tomó un tiempo configurar OBS correctamente, pero finalmente funcionó bastante bien y gracias a NDI la calidad del video fue mucho mejor.

Así que continuamos, confirmamos a los dos presentadores, publicamos el evento en Meetup.com y LinkedIn , y no podíamos esperar para finalmente transmitir en vivo nuestro primer encuentro en línea.

Pero luego, la situación de COVID-19 aquí en Italia se intensificó aún más y de la noche a la mañana descubrimos que estábamos atrapados en casa durante al menos 3-4 semanas, lo que significaba que Simone no podía llegar a su oficina y de repente nos quedamos sin una PC para transmitir 😱

Prueba 4: una idea basada en la nube 💡

Esta es la parte de la historia donde mi aversión personal por el hardware y el título de mi trabajo se vuelven útiles: PODEMOS UTILIZAR LA NUBE 💡☁️💡

Todo lo que necesitábamos era una alternativa DaaS (Desktop as a Service) a la PC de Simone, así que decidí probar Amazon Workspaces.

Amazon Workspaces es una solución ofrecida por AWS desde 2014. Te permite activar instancias de Windows o Linux en la nube y conectarte mediante un navegador o un cliente de escritorio, que está disponible para MacOS, Windows y Linux. Hay varios paquetes entre los que puedes elegir según los requisitos de rendimiento. Además, no existe un compromiso inicial y puedes elegir la opción de facturación mensual o por hora. Para las reuniones remotas, la opción por hora (más una tarifa mensual mucho menor) es excelente porque 3-4 horas por mes deberían ser más que suficientes para un par de eventos.

Sabíamos que nuestros requisitos de rendimiento eran bastante altos, por lo que comenzamos con un paquete de Windows PowerPro: 8 vCPU, 32 GiB Memory por $7.25/mes + $1.49/hora. De esta manera, nuestra primera reunión en línea nos costaría menos de $ 10 y nos alegramos de eso.

La primera prueba con Amazon Workspaces fue mejor de lo esperado, logramos instalar rápidamente todo el software en la instancia de la nube y lanzar un stream de prueba en menos de 30 minutos. Desafortunadamente, la falta de GPU y memoria de video en el paquete PowerPro resultó en una alta pérdida de frames y un uso muy alto de la CPU, lo que corresponde a retrasos en el audio y el video.

Necesitábamos un paquete más poderoso de Amazon Workspaces.

Prueba 5: Gráficos de Workspaces al rescate 💪

Los dos paquetes más potentes son Graphics y GraphicsPro (lista completa aquí):

  • Graphics viene con 8 vCPU, 15 GiB Memory, 1 GPU, 4 GiB Video Memory - por $22/mes + $1.75/hora

  • GraphicsPro viene con 16 vCPU, memoria de 122 GiB, 1 GPU, memoria de video de 8 GiB - por $66/mes + $11.62/hora

Estábamos bastante seguros de que una instancia de Graphics sería suficiente y aún nos permitiría mantener el costo mensual por debajo de $30. Así que decidimos probar la instancia de Graphics.

¡Realizamos la prueba en Amazon Workspaces Graphics con la misma configuración y funcionó muy bien! Sin pérdida de frames en Twitch, muy buena calidad de video y audio, y un uso de CPU bastante bajo en la instancia.

A este punto, sólo teníamos 24 horas para realizar algunas pruebas adicionales antes de comenzar con nuestra primera reunión en línea, el jueves 12 de marzo a las 6.30 p.m. CET.

Así que realizamos algunas pruebas más con múltiples presentadores que compartieron audio y video, así como su pantalla con una toma impecable, algunas escenas de respaldo en OBS, algunos filtros de reducción de ruido de fondo y estábamos listos.

Transmitimos en vivo en Twitch sin problemas 🙌

El 12 de marzo tuvimos a dos excelentes presentadores y recibimos a más de 170 participantes únicos durante la transmisión de 1 hora y 42 minutos, con un máximo de 109 participantes concurrentes 🎉 (aquí la grabación, en italiano 🇮🇹)

Gracias al chat de Twitch, también pudimos responder preguntas en vivo y organizar un Q&A rápido al final de la reunión, con el apoyo de los co-organizadores y los presentadores.

Además, como organizadores de reuniones nos encantó esta configuración porque nuestros asistentes no tuvieron que instalar ningún software ni extensiones de navegador. De hecho, ni siquiera tuvieron que registrarse en Twitch para ver la transmisión.

Por último, pero no menos importante, nadie dependía de ningún hardware especial, lo que significa que podemos organizar tantos eventos como queramos, en cualquier parte del mundo, siempre que al menos uno de nosotros pueda iniciar la transmisión a través del cliente de Workspaces y conectarse a la videollamada para presentar a los oradores.

Detalles técnicos y de arquitectura ⚙️

enter image description here

Esta es la configuración final que utilizamos, con 2 co-organizadores y 2 presentadores conectados al puente de Skype, más un co-organizador adicional conectado a Workspaces para cambiar las escenas tras bambalinas, y un cuarto co-organizador que ayuda con la moderación del chat de Twitch. Realmente no necesitas 4 personas, pero diría que si tienes al menos 2 realmente ayuda.

Aquí hay una breve lista de pasos técnicos que puedes seguir:

  1. Crear una cuenta de AWS
  2. Instala el cliente de Workspaces en tu máquina local
  3. Lanza la instancia de Workspaces usando la consola web de AWS, tomará unos minutos
  4. Instala OBS (32 bits), el complemento OBS NDI y Skype en la instancia de Workspaces
  5. Habilita NDI en el cliente de Skype 👉 Configuración - Llamadas - Avanzado - Permitir uso de NDI (instrucciones en este video)
  6. Configura OBS con escenas que incluyan audio y video de la fuente NDI; esto también lleva un tiempo, pero es mucho más fácil si lo haces durante una llamada de video para que puedas ver rápidamente la vista previa de audio/video en OBS
  7. Crea una cuenta de Twitch
  8. Obtén la clave para hacer streaming de Twitch de la configuración de tu cuenta y configúrala en OBS

También tenemos algunas lecciones aprendidas para compartir, así que recomiendo leer la sección de consejos y trucos a continuación antes de comenzar con tu propia configuración.

Consejos y trucos para OBS y Amazon Workspaces

La historia anterior es un resumen rápido de los pasos que nos llevaron a la solución final. La lista a continuación contiene algunos consejos para que puedas lograr lo mismo más rápido y sin mucha frustración:

  • Es posible que debas solicitar un aumento del límite de servicio en tu cuenta de AWS para poder activar 1 instancia de Graphics en Amazon Workspaces
  • Si estás utilizando una máquina Linux localmente, deberás habilitar el cliente Linux Workspaces en tu consola AWS (es sólo una casilla de verificación)
  • Parece que el complemento OBS NDI es incompatible con OBS de 64 bits, así que asegúrate de haber instalado la versión de 32 bits
  • Es mucho más fácil si tienes un perfil de Skype independiente ejecutándose en Workspaces (no puedes unirte a una llamada dos veces con el mismo perfil)
  • Recuerda silenciar la máquina de Workspaces en el puente de Skype y también en OBS
  • Si tus presentadores no tienen un micrófono profesional, puedes habilitar el filtro de reducción de ruido OBS (ver las instrucciones aquí)
  • Si eres el único presentador, ejecutar todo en tu computador portátil (Skype + Workspaces + PowerPoint + ...) podría ralentizar todo y eventualmente bloquear tu computadora portátil (¡historia real!), Es por eso que recomendamos al menos dos personas/laptops
  • El complemento NDI para OBS puede usar la cámara web "del presentador del momento" (current speaker) como fuente de audio/video, por lo que no tienes que preparar una escena por presentador y cambiar manualmente cada vez que un nuevo presentador comienza a hablar

Cómo configurar OBS 📹

Configurar OBS podría ser el paso más desafiante si nunca lo has usado, por lo que te recomiendo pasar algún tiempo aprendiéndolo. Puedes consultar este inicio rápido oficial o esta serie de videos con más detalles .

Para acelerar aún más las cosas, es posible que desees reutilizar y adaptar nuestro perfil OBS y colección de escenas. Puedes encontrar ambos aquí.

El archivo zip contiene dos artefactos importantes:

  1. una carpeta llamada "Serverless Meetup": este es el perfil OBS que puedes importar ( Profile > Import ) y luego seleccionar del mismo menú Profile
  2. un archivo JSON llamado "serverless-meetup-obs-preset.json": esta es la colección de escenas de OBS que puedes importar ( Scene collection > Import ) y luego seleccionar del mismo menú de Scene collection

Conclusiones 🤔

Estamos muy contentos con esta configuración y hemos recopilado muchos comentarios positivos de nuestros asistentes en línea. Seguiremos usando esta configuración para nuestras próximas reuniones Serverless en línea y tal vez intentemos reunirnos virtualmente con más frecuencia ahora que tenemos una configuración basada en la nube y fácil de compartir.

Personalmente, espero que este artículo ayude a much@s organizador@s de reuniones a mantener sus grupos activos y motivados durante estos tiempos difíciles. No tenemos que sacrificar nuestras comunidades sólo porque no podemos encontrarnos en persona.

Si tienes curiosidad acerca de los detalles que no he mencionado en este artículo o si tiene otras ideas para compartir, no dudes en comunicarse conmigo en Twitter.

Traducción del fantástico post de Alex Casalboni. Gracias!

Top comments (0)