19
Easy videoconference in your web or mobile app

Easy videoconference in your web or mobile appjderobot.org/store/jmplaza/uploads/charlas/traspas-mica-openvidu.pdf · - Está desarrollado en la URJC openvidu.io. WebRTC - Proyecto/Estándar

  • Upload
    lyliem

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Easy videoconference in your web or mobile app

¿Qué es OpenVidu?

- Es una plataforma de comunicación en tiempo real a través de Internet: WebRTC

- Está basado en Kurento: ofrece una API para simplificar al máximo el caso de uso más solicitado a Kurento en la industria

- Es un proyecto Open-Source financiado por la Comisión Europea- Está desarrollado en la URJC

openvidu.io

WebRTC

- Proyecto/Estándar desarrollado por un consorcio de organizaciones, incluyendo a Google y Mozilla.

- Objetivo: soportar la transmisión de flujos multimedia en tiempo real entre dispositivos cliente, mediante conexiones p2p.

- La interoperabilidad es uno de sus pilares

Arquitectura

Un poco mása fondo...

Peculiaridades de OpenVidu

1) OpenVidu envuelve la API de Kurento para soportar el caso de uso de salas de videoconferencia 1:1, 1:N, N:M

Partiendo de este escenario base, facilita las siguientes funcionalidades:

- Roles predefinidos de usuario (quién puede enviar, quién recibir, etc)- Streams de audio y/o video. Capacidad de screen-sharing- Sistema integrado de mensajes- Grabación de las videollamadas- … y mucho más

Peculiaridades de OpenVidu

2) Kurento Media Server actúa como nodo central en una arquitectura SFU. Es un “dispositivo cliente final” más que recibe y envía todas las conexiones P2P entre los usuarios reales: a ojos de WebRTC, KMS no es más que otro navegador.

Peculiaridades de OpenVidu

3) Es necesario tener en cuenta las complejidades de la red: los clientes finales pueden encontrarse tras firewalls, VPN’s y demás cubrimientos de red. Hay que añadir dos elementos más a la arquitectura del sistema para solventar estos casos.

- Servidor STUN: permite a los clientes descubrir su IP pública real- Servidor TURN: permite actuar de nodo pasarela en los casos más extremos

Ejemplo práctico

Tenemos una web en la que queremos incorporar un servicio de atención al cliente totalmente integrado, permitiendo establecer una videollamada cliente-operador.

¿Cómo hacemos esto usando OpenVidu?

1. Desplegamos OpenVidu Server

- Usando nuestro proceso automático en Amazon Cloud Formation

- Haciendo el proceso a mano: 1. Instalar + Configurar KMS2. Instalar + Configurar STUN y TURN3. Lanzar el OpenVidu Server correctamente configurado (bien como

un .jar, bien como una imagen Docker)

Al final, hay que saber la IP pública de OpenVidu Server y su contraseña

2. Incorporamos OpenVidu Browser a nuestra web

- Es un único archivo JavaScript: https://github.com/OpenVidu/openvidu/releases

- El código para crear las salas de videoconferencia puede ser muy sencillo:

function joinSession() {

OV = new OpenVidu();

session = OV.initSession(SESSION_ID);

session.on('streamCreated', function (event) {

session.subscribe(event.stream, 'subscriber');

});

session.connect(TOKEN, function (error) {

if (!error) {

var publisher = OV.initPublisher('publisher');

session.publish(publisher);

} else {

console.log('Error connecting to the session!');

}

});

}

function leaveSession() {

session.disconnect();

}

2. Incorporamos OpenVidu Browser a nuestra web

- Es un solo archivo JavaScript: https://github.com/OpenVidu/openvidu/releases

- El código para crear las salas de videoconferencia puede ser muy sencillo:

function joinSession() {

OV = new OpenVidu();

session = OV.initSession(SESSION_ID);

session.on('streamCreated', function (event) {

session.subscribe(event.stream, 'subscriber');

});

session.connect(TOKEN, function (error) {

if (!error) {

var publisher = OV.initPublisher('publisher');

session.publish(publisher);

} else {

console.log('Error connecting to the session!');

}

});

}

function leaveSession() {

session.disconnect();

}

Estos parámetros deben obtenerse en nuestro lado servidor preguntando a OpenVidu Server. Así securizamos nuestras videollamadas

3. Añadimos la lógica de servidor en nuestra web

- OpenVidu puede generar sessionId’s y tokens mediante 3 canales:- OpenVidu Java Client: si nuestra aplicación web es Java- OpenVidu Node Client: si nuestra aplicación web es Node- API REST: caso general (sea cual sea la tecnología de servidor de nuestra web)

Solo tenemos que incorporar en nuestra lógica de negocio cuándo pedir a OpenVidu Server (usando su IP pública y su contraseña)

un sessionId o un token, y devolverlos al cliente

Este proceso nos permite securizar nuestra aplicación. Ningún cliente podrá generar por sí mismo el sessionId o el token

Demo

git clone https://github.com/OpenVidu/openvidu-tutorials.gitcd openvidu-tutorials/openvidu-js-javamvn package exec:java

docker run -p 8443:8443 --rm -e KMS_STUN_IP=stun.l.google.com -e KMS_STUN_PORT=19302 -e openvidu.secret=MY_SECRET openvidu/openvidu-server-kms:1.7.0

1. Clonamos y ejecutamos nuestra aplicación web (necesario maven)

2. Lanzamos OpenVidu Server (necesario Docker)

3. Podemos probar la app en https://localhost:5000

Y qué viene en el futuro

- Escalabilidad. OpenVidu integrará un sistema de escalabilidad on demand automatizado: podremos decidir cuándo es necesario aumentar los recursos y, gracias a la containerización de Docker, iniciar nuevas instancias de OpenVidu Server para soportar nuevas salas o usuarios.

- Tolerancia a fallos. OpenVidu permitirá que ante desconexiones inesperadas de clientes o ante caídas de OpenVidu Server, el sistema se recupere a su estado anterior de manera automática y sin pérdidas.