Markos calderon lecciones aprendidas del desarrollo de un sistema de web conferencing

Post on 22-Nov-2014

1.061 views 0 download

description

 

Transcript of Markos calderon lecciones aprendidas del desarrollo de un sistema de web conferencing

Lecciones Aprendidas del Desarrollo de un Sistema de Conferencias

Markos CalderonBigBlueButton Developer

mcmarkos86@gmail.com - @markoscalderon

Un Sistema de Conferencia Web?

BigBlueButton!

Open Source

• BigBlueButton es un proyecto open source de conferencias web para la educación a distancia

• 1068 subscritos en la lista de correo de desarrollo

• Comunidad activa: +14000 mensajes

• +3 años de desarrollo

• Traducido en mas de 35 idiomas

• Google Summer of Code 2010

• 9 releases

• Installation in 30 minutes!

Interfaz

Android

Arquitectura

Desarrollo del API

Integraciones / Plugins

API

createjoin

isMeetingRunningEnd

GetMeetingsGetMeetingInfo

API

• Formato del API:http://yourserver.com/bigbluebutton/api/[call]?[params]

• Seguridad:– Security Salt (checksum SHA-1)

• Llamadas del API:create?name=Test&meetingID=test01&record=true&checksum=1234

• Respuesta:

Usando Redis

Redis

• Una base de datos rápida, ligera, clave-valor.

>> SET foo bar=> OK>> GET foo=> bar

Guardar un evento?

A Map of values{ module: Chat event: SendPublicMessage user: markos message: hola! timestamp: 122434 ….}

Por que?

• Busquedas• Indexar• Procesamiento

Tres pasos y a guardar!

=> INCR <eventID>>> eventID -> 100

=> HMSET <meetingID>:eventID> {keys:values}>> demo:100 { module:Chat, event:… }

=> LPUSH <meetingID>:events <eventID>>> demo:events 100

Comunicación entre módulos

BBB-APPSEncargado del

tiempo real

BBB-WEBEncargado del

BigBlueButton API

Actualizaciones:Estado de una Conferencia

ParticipantesConversión de Presentaciones

Mensajes

• Protocolo PUBSUB• Uso de comandos de Redis: PUBLISH y

SUBSCRIBE• Los mensajes son publicados en “canales”

Usando Redis pubsubPublisher:

//an update is publishedredis.publish(

“channel:participants”, “{ meetingID:conf123, type:USER_LEFT,… }”

);

Subscriber:

redis.subscribe(“channel:participants”, updatesHandler);

//The updatesHandlerclass UpdatesHandler{ onMessage(String channel, String message){ //process the message of channel:participants

//{ meetingID:conf123, type:USER_LEFT,… } }}

Reproductor HTML5

HTML5 Playback

• Al principio, escribimos nuestra propia solucion en javascript puro. Problems:– Codigo complejo – dificil de mantener– Compatibilidad en todos los browsers– Soporte para nuevos modulos

• Ahora, usamos popcorn.js

HTML5 Playback

Mas info acerca de BBB?

• http://bigbluebutton.org/

bigbluebutton-blog

@bigbluebutton

/bigbluebutton