Lynckia: vídeo conferencias en HTML5 (look ma! no plugins)

lynckia Lynckia (plataforma de comunicaciones de código abierto) permite realizar comunicaciones en tiempo real desde tu navegador usando la tecnología WebRTC. Aunque hasta hace poco sólo el navegador Google Chrome disponía de una implementación avanzada de WebRTC, desde el 4 de Febrero de este año podemos usar también el navegador Firefox. El 6 de Marzo (es decir, hace exactamente 10 días!) Google anunció el soporte WebRTC también en la versión de Chrome para Android.

Aún queda mucho trabajo por hacer (poder capturar streams RTMP y que formen parte de la videoconferencia, poder codificar los streams de los usuarios en uno sólo y no uno por cada usuario, ampliar la base de ejemplos…) pero los avances realizados hasta el momento por el equipo de Lynckia son impresionantes. Como decían en HTML5Spain:

Lynckia nos ha parecido uno de los proyectos más interesantes que han aparecido en escena a nivel internacional a lo largo de este año

Lynckia se puede probar online siempre que uses una versión moderna de Chrome o Firefox, sin necesidad de instalar nada manualmente (ni tener ningún tipo de plugin instalado).

Si quieres tener tu propio servidor Lynckia, su instalación para el caso de Ubuntu 12.04 es sencilla. Basta con ejecutar los scripts paso a paso. En mi caso, con Ubuntu 12.10, instalé las dependencias Node.js, Nodejs-dev y nmp desde el repositorio oficial de Ubuntu (sin usar el PPA de Chris Lea como indican las instrucciones) y pude compilar y probar la demo básica sin problemas. En la demo básica se lanza un servicio Lynckia en el puerto 3001 de tu máquina local. Abriendo esa url en Chrome, te pedirá permiso para acceder a la webcam y al micrófono. En cuanto concedas permisos, verás tu imagen en pantalla (y oirás lo que digas por el micro). Si abres otra pestaña en el navegador y repites el proceso, verás que debajo de la imagen original se abrirá otra más, a modo de videoconferencia (contigo mismo en esta demo, pero se entiende el objetivo, no? 😉

BigBlueButton (I)

En la home de BigBlueButton (BBB) resumen así el objetivo principal de la aplicación: «BBB permite a universidades e instituciones educativas ofrecer experiencias de aprendizaje de alta calidad a estudiantes remotos». Es en la última palabra donde reside el quid de la cuestión. Efectivamente, BBB permite plantear reuniones online a través del navegador, con soporte de compartición de webcam, micro, pizarra digital, escritorio y chat. La última versión 0.8 permite también grabar la sesión (con algunos «peros» que luego comentaré). BBB es software libre, con la parte cliente desarrollada en ActionScript (usando el framework open source Flex SDK) y en la parte servidor un numeroso conjunto de módulos, bibliotecas y servidores de código abierto: Red5, Asterisk o FreeSWITCH, ActiveMQ, Tomcat, OpenOffice.org, MySQL…

Ayer mismo BBB anunciaba que entraba a formar parte de MozillaFWD, el programa de la fundación Mozilla para la innovación abierta, que tiene como objetivo crear una comunidad de proyectos opensource innovadores para ayudar a extender la web. Bonita frase que viene a traducirse en infraestructura, soporte y publicidad a través de la fundación Mozilla (suena muy parecido a la fundación Apache)

Realmente veo una fuerte competencia entre dos grandes: OpenMeetings y BBB. Los más veteranos recordaréis que ya hablamos sobre OpenMeetings en DiarioLinux, ahora le toca el turno a BBB.

La instalación de BBB es un poco tiquismiquis en los requerimientos: necesita un Ubuntu 10.04 de 32 o 64 bits. ¿Se puede instalar en algo más moderno, digamos Ubuntu 11.04 o 11.10? Bueno, yo lo he intentado y me surgían tantas incompatibilidades (empezando por la versión de Ruby que pide) que desistí y lo instalé directametne en la 10.04. Ahí la instalación ha ido bien, siguiendo las instrucciones recto hasta el final 🙂 El servidor requiere 2 GB de memoria RAM y acceso root. Los 5G de espacio libre en disco tampoco son moco de pavo.

Ah! y el puerto 80 (sí, ese que usas en tu Apache local) tiene que estar disponible. ¿Por qué? Porque BBB usa en el backend el servidor proxy nginx. Éste enruta las peticiones del cliente a dos módulos: bbb-web (las peticiones HTTP) o bbb-aps (las peticiones RTMP). La arquitectura interna del servidor BBB está documentada y ahí puede verse todo el «sarao» que se monta 🙂 Más sobre esto en el siguiente post, pero puedes ir leyendo aquí una serie de 4 posts en inglés sobre los fundamentos de la arquitectura BBB.

En las pruebas para esta serie de artículos he usado una instancia Amazon EC2 con un Ubuntu 10.04 pelado y a partir de ahí he ido siguiendo las instrucciones de instalación sin problemas (salvo éste bien documentado). Realmente en 15 minutos puedes tener la máquina online y funcionando (a falta de pulir algunos detalles).

La calidad de la videoconferencia es buena, aunque el audio viene con algo de retardo en comparación a OpenMeetings. Por otro lado, el soporte de grabación en BBB es recientito (estamos en la 0.8 beta 3 y empezó en la 0.8!). Además, de serie sólo graba lo que hayas emitido por la pizarra compartida, tu voz y el chat de texto. Eso sí, emite a través de HTML5 (sin necesidad de plugin Flash), gracias a la biblioteca popcorn.js. Como digo, echo en falta la posibilidad de ver las webcam de los usuarios en la grabación, y también hecho en falta la posibilidad de descargar en formato .avi el vídeo (algo que OpenMeetings sí ofrece). ¡Ojo! BBB desde la versión 0.8 (septiembre 2011!) también puede grabar las webcams de los usuarios, incluso la ventana de compartición de escritorio remoto, siempre y cuando uses por detrás Matterhorn. También he instalado Matterhorn en otra máquina (más complejo de instalar que BBB) y comentaré mi experiencia en otro post, que éste está quedando largo.

BBB hace uso de OpenOffice.org y SWFTools para convertir cualquier documento .doc, .odt, .pdf o gráficos (.jpg, .png, .gif…) a formato Flash y compartirlos luego a través de la pizarra digital. Ideal para mostrar una presentación a un conjunto de alumnos. La presentación subida permite ser «garabateada» con distintos lápices de colores que ofrece la pizarra. Una cosa que he echado en falta (respecto a OpenMeetings) es la opción de mostrar vídeo dentro de la pizarra.

Dos cosas más antes de cerrar por hoy: BBB es multi-idioma (incluyendo el euskera 🙂 y tiene un plugin para ser integrado con Moodle. Mañana más, ahora toca dormir un rato 😉

El monstRuo de las galletas estadísticas

El profesor, con una caja de galletas en la mano, entra en una clase de 15 o más estudiantes y saca del bolsillo una baraja de cartas inglesa, nueva, envuelta en su plástico original sin abrir. El profesor pide a un estudiante voluntario que abra el envoltorio para pasar a quitar los comodines y barajar las cartas varias veces, delante de los alumnos. A continuación, los estudiantes son requeridos para ponerse en fila.

Van a jugar a un juego. Los estudiantes, por turnos, tomarán una carta de la parte superior de la baraja. Si la carta es negra, el afortunado habrá ganado una galleta. Si la carta es roja, el desafortunado estudiante se sentará en su sitio con las manos vacías. ¡Que empiece el juego!

El primer estudiante saca una carta: roja. Se oyen burlas y mofas, y el estudiante vuelve a su puesto. Está decepcionado, por supuesto, pero no demasiado. Después de todo se la jugaba al 50% y no ha ocurrido. Bueno, no pasa nada.

El segundo estudiante saca otra carta: roja otra vez. Se vuelven a oír mofas y burlas, y el segundo alumno se sienta en su sitio. También está decepcionado, pero de nuevo, no mucho, porque es probablemente su día de mala suerte. Vayamos con el siguiente.

El estudiante saca… ¡roja otra vez! Hay algunos listillos que levantan la voz indignados (para armar barullo, más que nada) pero hay otros que no se han molestado – están pensando. Es la tercera carta roja consecutiva, lo cual es posible, por supuesto, pero ¿qué es lo que está pasando aquí? No están seguros. Se concentran en la siguiente carta… saldrá negra, ¿no?

El cuarto saca su carta: roja. Hmmm. . . ahora hay quejas y refunfuños en lugar de mofas. Algunos del final de la fila se encogen de hombros y comienzan a sentarse en sus puestos, quejándose de que el profesor no quiere darles ni una galleta. Aunque aún quedan estudiantes en la fila, de pie, salivando, esperando a que salga la inevitable primera carta negra.

El quinto candidato saca una carta: roja. Ahora la cosa ya no tiene gracia. Mientras el resto de los estudiantes que quedaban se sientan en su puestos, la protesta continúa, y la clase entera demanda sus galletas.

Así comienza uno de los capítulos del lbro «Introduction to Probability and Statistics using R«, del profesor G. Jay Kerns. ¿Por qué lo traigo aquí a colación? Porque el profesor Jay ha publicado el libro bajo licencia GFDL. Y es uno de los libros de introducción a la probabilidad y estadística más asequibles que he visto hasta ahora. Todos los ejemplos que muestra son interesantes y además, vienen con un apartado del estilo: «¿Cómo se hace / calcula esto en R?» (como sabréis los lectores de este blog, R es un lenguaje y entorno de programación para análisis estadístico y gráfico, con licencia GPL) que hace que los conceptos se te queden grabados (la práctica es lo que tiene…)

¿Queréis seguir leyendo el ejemplo de las cartas? Sigamos…

Ten en mente el experimento anterior cuando leas las siguientes secciones de este capítulo (cap. 10 del libro) sobre «Test de hipótesis». Cuando termines de leer el capítulo, vuelve aquí y lee la introducción de nuevo. Toda la jerga matemática que se usa está relacionada con los párrafos anteriores. Mientras tanto, te ayudaré a empezar a pensar en estos términos:

Hipótesis Nula: es una baraja de cartas (baraja inglesa) normal, barajada a conciencia.

Hipótesis Alternativa: o bien es una baraja trucada, o bien el profesor ha barajado con trampas.

Datos observados (muestra de la población): una secuencia de cartas sacadas de la baraja, 5 rojas consecutivas (!)

Si fuera un juego de cartas ordinario, bien barajado, la probabilidad de sacar 0 negras de una muestra de tamaño 5 (sin reemplazamiento) de una baraja de 26 cartas negras y 26 rojas, sería:

> dhyper(0, m = 26, n = 26, k = 5)
[1] 0.02531012

Hay dos temas muy importantes que quedan por tratar. El primero: al final todos los alumnos tuvieron su galleta. El segundo, los estudiantes, agresiva e invariablemente intentan siempre que el profesor enseñe las cartas de la baraja para comprobar si estamos hablando de una baraja normal o no. Nunca lo han conseguido 😉

¿Os gusta? Pues atentos a la jugada: aparte del PDF, el código fuente del libro, en LaTeX, también está disponible. ¿Salivais igual que los candidatos a ganar galletas? Pues leed esto, la traca final:

El profesor G. Jay Kerns, ha grabado en vídeo todas sus clases de introducción a la probabilidad y estadística usando R. TODAS. Y ha dejado los apuntes, vídeos (en distintos tamaños, incluído WebM, y versiones, incluída .3gp, para que puedas atender esas video-lecciones en tu móvil) y anotaciones disponibles para su descarga en la la web de su Universidad, bajo licencia GFDL.

Damas y caballeros, me quito el sombrero ante este señor. Chapeau!

Y por supuesto, aunque me lo he descargado en PDF y fotocopiado, ya he comprado una copia del libro en Lulu.com. Los 31 dólares mejor invertidos desde hace muuuuucho tiempo.

Google Voice and Video chat para Linux

Un par de años les ha costado. Muuucho tiempo, tal vez demasiado, pero al final lo han hecho. Google Voice and Video chat para Linux ya está disponible (es decir, soporte de chats con vídeo a través del navegador, integrado en Gmail). El desarrollador principal, Justin Uberti, al parecer ha tenido que programar desde cero el soporte de vídeo y la gestión de audio usando PulseAudio como base también le ha dado guerra. ¡Pero ya está disponible! Éstos son los pasos para instalar y configurar en Ubuntu el soporte de «Google Voice and Video»:

1. Descargar el plugin , en formato .deb
2. Instalarlo
3. Comprobar que en la lista de plugins del navegador aparece Google Talk
4. Configurarlo en GMail (pestaña Chat de tu perfil)

Obtener un thumbnail de un vídeo con ffmpeg

Otra receta rápida:

$ ffmpeg -y -i upld-1281178498829.flv -r 1 -ss 5 -vframes 1 -s 120x90 /tmp/upld-1281178498829.jpg

-y = sobreescribir en caso de que ya existiera
-i = nombre del vídeo (input)
-r 1 = fijar el fps a 1
-ss 5 = sacar el thumb del segundo 5
-vframes 1 = sacar sólo un frame
-s 120×90 = tamaño del thumb