SlideShare ist ein Scribd-Unternehmen logo
1 von 50
WebRTC
    Comunicaciones en tiempo real desde tu navegador

    Javier Cerviño        Alvaro Alonso       Pedro Rodriguez
jcervino@dit.upm.es   aalonsog@dit.upm.es    prodriguez@dit.upm.es
       @jcague        @larsonalonso                @lodoyun


            Nestor Toribio          Joaquín Salvachúa
     nestortoribioruiz@gmail.com      jsr@dit.upm.es
               @nehko1                  @jsalvachua


                                Grupo de Internet de Nueva Generación
                           Departamento de Ingeniería de Sistemas Telemáticos
                                   Universidad Politécnica de Madrid
Previously on GING
Isabel 1995 (o por ahi)
     Aplicación de escritorio
     Ubuntu/Windows
     P2P/Centralizado
     Pasarelas SIP


Marte 2007
     Aplicación Flash sobre el navegador
     Centralizado
     Desktop


VaaS 2010
     Cloud Computing
     Aplicación Flash sobre el navegador
     Desktop y Móviles
                                                 Javier Cerviño   Alvaro Alonso
                                                        @jcague   @larsonalonso
Índice
1. Introducción a WebRTC
  1.   Descripción
  2.   Ejemplo de llamada
  3.   Estado actual

2. Problemas de WebRTC

3. Videoconferencia multiusuario
  1.   Lynckia, componentes y API
  2.   Ejemplos

                                     Javier Cerviño   Alvaro Alonso
                                            @jcague   @larsonalonso
Índice
1. Introducción a WebRTC
  1.   Descripción
  2.   Ejemplo de llamada
  3.   Estado actual

2. Problemas de WebRTC

3. Videoconferencia multiusuario
  1.   Lynckia, componentes y API
  2.   Ejemplos

                                     Javier Cerviño   Alvaro Alonso
                                            @jcague   @larsonalonso
Javier Cerviño   Alvaro Alonso
       @jcague   @larsonalonso
Videoconferencia en el
     navegador




                   Javier Cerviño   Alvaro Alonso
                          @jcague   @larsonalonso
PROTOCOLOS PROPIETARIOS
                 HTTP/WEBSOCKETS




JS/CSS/HTML                      JS/CSS/HTML

                   TRANSMISIÓN
Navegador                        Navegador
                    DE MEDIOS
                                  Javier Cerviño   Alvaro Alonso
                                         @jcague   @larsonalonso
APIs de WebRTC en JavaScript


Tres Grandes APIs
   getUserMedia
      Obtención de flujos locales


   StreamAPI
      Manejo de flujos multimedia


   PeerConnection
      Conexiones entre pares

                                    Javier Cerviño   Alvaro Alonso
                                           @jcague   @larsonalonso
Ejemplo de llamada
 1.    getUserMedia()                              5.    getUserMedia()
 2.    pc = new PeerConnection()                   6.    pc = new PeerConnection()
 3.    onLocalSignallingMessage(sdpOffer)          7.    pc.processSignalingMessage(sdpOffer)
                                                   8.    onLocalSignallingMessage(sdpAnswer)
10.   pc.processSignalingMessage(sdpAnswer)
11.   onLocalSignallingMessage(sdpOk)              13.   pc.processSignalingMessage(sdpOk
                                                         )




                                              14


           Alice                                          Javier Cerviño          Bob
                                                                            Alvaro Alonso
                                                                 @jcague    @larsonalonso
Google



Proyecto de código libre escrito en C++


Respaldado por Google, Mozilla y Opera entre otros.


Implementación de todo WebRTC


                                          Javier Cerviño   Alvaro Alonso
                                                 @jcague   @larsonalonso
Google



Primera Fase
• Librería en C++ implementando rtcweb


   Segunda Fase
   • Inclusión de la librería en navegadores
     • Implica implementación del API JavaScript


          Actualmente:
          • Primera versión disponible: iteraciones y pruebas

                                                                Javier Cerviño   Alvaro Alonso
                                                                       @jcague   @larsonalonso
Ericsson Labs




                Javier Cerviño   Alvaro Alonso
                       @jcague   @larsonalonso
Ericsson Labs

   Bowser

   Navegador Web en el móvil

   Soporte WebRTC

   Disponible para iOS y Android


   https://labs.ericsson.com/apps/bowser

                          Javier Cerviño   Alvaro Alonso
                                 @jcague   @larsonalonso
Mozilla

Firefox 18 con soporte completo de WebRTC


       GetUserMedia
       StreamAPI
       PeerConnection


Lanzamiento en enero de 2013


https://hacks.mozilla.org/2012/09/full-webrtc-support-is-soon-coming-to-a-web-browser-near-you/


                                                                                          Javier Cerviño   Alvaro Alonso
                                                                                                 @jcague   @larsonalonso
Internet Explorer

Soporte experimental de GetUserMedia

             navigator.msGetUserMedia(options, cameraStarted);


             function cameraStarted(mediaStream) {
                    msMediaStream = mediaStream;
                    document["imgPreview"].src = URL.createObjectURL(mediaStream);
             }

http://blogs.msdn.com/b/ie/archive/2012/03/16/media-capture-prototype-improved-support-for-real-world-web-apps.aspx




                                                                                    Javier Cerviño            Alvaro Alonso
                                                                                           @jcague            @larsonalonso
Opera
Soporta sólo getUserMedia


También tiene soporte en los móviles




                                       Javier Cerviño   Alvaro Alonso
                                              @jcague   @larsonalonso
Índice
1. Introducción a WebRTC
  1.   Descripción
  2.   Ejemplo de llamada
  3.   Estado actual

2. Problemas de WebRTC

3. Videoconferencia multiusuario
  1.   Lynckia, componentes y API
  2.   Ejemplos

                                     Javier Cerviño   Alvaro Alonso
                                            @jcague   @larsonalonso
Problemas de WebRTC




                Javier Cerviño   Alvaro Alonso
                       @jcague   @larsonalonso
Problemas de WebRTC




UMTSHSPA+
HSDPA
                    Javier Cerviño   Alvaro Alonso
                           @jcague   @larsonalonso
Problemas de WebRTC




                Javier Cerviño   Alvaro Alonso
                       @jcague   @larsonalonso
Problemas de WebRTC




                Javier Cerviño   Alvaro Alonso
                       @jcague   @larsonalonso
Problemas de WebRTC




        MCU
                Javier Cerviño   Alvaro Alonso
                       @jcague   @larsonalonso
Índice
1. Introducción a WebRTC
  1.   Descripción
  2.   Ejemplo de llamada
  3.   Estado actual

2. Problemas de WebRTC

3. Videoconferencia multiusuario
  1.   Lynckia, componentes y API
  2.   Ejemplos

                                     Javier Cerviño   Alvaro Alonso
                                            @jcague   @larsonalonso
Lynckia




                      Erizo


Nuve



                 Javier Cerviño   Alvaro Alonso
                        @jcague   @larsonalonso
Lynckia - Salas


        Una sala es una MCU

        Permite publicar streams
            Video, audio, datos


        Permite subscribirse a ellos

        Control desde el navegador

        Permitirá transcodificar/grabar
                    Javier Cerviño     Alvaro Alonso
                           @jcague     @larsonalonso
Lynckia - Nuve API

                Accesible a través del Backend


                Dirigido a servicios


                Administración de salas
Nuve
                    Gestiona la escalabilidad
                    Monitoriza


                Creación de tokens
                            Javier Cerviño   Alvaro Alonso
                                   @jcague   @larsonalonso
Lynckia - Erizo

          Accesible a traves del
            Frontend
  Erizo


          Contiene las MCU
             Cada sala es una de ellas


          Gestiona los streams
             Audio, video y datos

                    Javier Cerviño   Alvaro Alonso
                           @jcague   @larsonalonso
Lynckia - Erizo

          Erizo
              Disponible en:
              https://github.com/ging/erizo
  Erizo       Codigo C++
              Protocolos WebRTC
              Linux/Mac


          Erizo API
              Disponible en:
              https://github.com/ging/erizoAPI
              Wrapper en Node.js
              Pronto a traves de NPM

                          Javier Cerviño         Alvaro Alonso
                                 @jcague         @larsonalonso
Lynckia API




API Servidor                 Streams
   Rooms                     Rooms
   Tokens                    Events
   Users
API Cliente                    Javier Cerviño   Alvaro Alonso
                                      @jcague   @larsonalonso
API Servidor
Comunicación con Nuve
API para gestión del Servicio
   Salas videoconferencia
   Tokens autenticación
   Usuarios
Código
   Node.js
   Python
   (Ruby)
                                   Javier Cerviño   Alvaro Alonso
                                          @jcague   @larsonalonso
API Servidor - Room

  Propiedades                               Funciones
  Room._id                                  createRoom (name)
  Room.name                                 getRooms ()
                                            getRoom (roomId)
                                            deleteRoom (roomId)

Ejemplo
var N = require('./nuve');
N.API.init(serviceId, serviceKey);

var roomName = 'myFirstRoom';

N.API.createRoom(roomName, function(room) {
  console.log('Room created with id: ', room._id);
});

                                                           Javier Cerviño   Alvaro Alonso
                                                                  @jcague   @larsonalonso
API Servidor - Token

String con las credenciales de autenticación
     Funciones
     createToken (roomId, name, role)



   Ejemplo
   var roomId = '30121g51113e74fff3115502';
   var name = 'userName';
   var role = '';

   N.API.createToken(room, name, role, function(token) {
     console.log('Token created: ', token);
   });

                                                           Javier Cerviño   Alvaro Alonso
                                                                  @jcague   @larsonalonso
API Servidor - User

  Propiedades                               Funciones
  User.name                                 getUsers (roomId)
  User.role


Ejemplo
var roomId = '30121g51113e74fff3115502';

N.API.getUsers(roomId, function(users) {
  console.log('This room has ', users.length, 'users');

  for (var i in users) {
    console.log('User ', i, ':', users[i].name,
                  'role: ', users[i].role);
  }
});
                                                           Javier Cerviño   Alvaro Alonso
                                                                  @jcague   @larsonalonso
Lynckia API




API Servidor                 Streams
   Rooms                     Rooms
   Tokens                    Events
   Users
API Cliente                    Javier Cerviño   Alvaro Alonso
                                      @jcague   @larsonalonso
API Cliente
Comunicación con Erizo
Manejo flujos (Streams)
   Audio
   Vídeo
   Datos
Interacción salas (Rooms)
   Conexión
   Intercambio flujos
Captura eventos (Events)
   En flujos
   En salas
                                        Javier Cerviño   Alvaro Alonso
                                               @jcague   @larsonalonso
API Cliente - Stream (I)

Crear un Stream
var stream = Erizo.Stream({audio:false, video:true, data: true,
                        attributes: {name:'myStream', type: 'public'}});

Iniciar y mostrar el Stream
stream.addEventListener('access-accepted', function(event) {
  console.log("Access to webcam and microphone granted");

  stream.show('myVideoId');

});

stream.addEventListener('access-denied', function(event) {
  console.log("Access to webcam and microphone rejected");
});

stream.init();


                                                                  Javier Cerviño   Alvaro Alonso
                                                                         @jcague   @larsonalonso
API Cliente - Stream (II)

Usando el Stream
stream.addEventListener('stream-data', function(evt) {
      console.log('Received data ', evt.msg, 'from stream ', evt.stream.getID());
}

stream.sendData({text:'Hello world', timestamp:12321312});


var   frame;
var   url;
var   ctx = document.getElementById('myCanvas').getContext('2d');
var   img = document.getElementById('myImg');

setInterval (function() {
      frame = stream.getVideoFrame();
      ctx.putImageData(frame, 0, 0);

        url = stream.getVideoFrameURL();
        img.src = url;

}, 100);
                                                                    Javier Cerviño   Alvaro Alonso
                                                                           @jcague   @larsonalonso
API Cliente - Room (I)

Conectarse a una sala
var room = Erizo.Room({token:'213h8012hwduahd-321ueiwqewq'});

room.addEventListener('room-connected', function(roomEvent) {
      console.log('Connected! Streams in the room: ', roomEvent.streams);
}

room.connect();

Publicar mi stream

room.addEventListener('stream-added', function(streamEvent) {
      if (localStream.getID() === streamEvent.stream.getID()) {
            console.log('Published!');
      }
}

room.publish(localStream);


                                                                  Javier Cerviño   Alvaro Alonso
                                                                         @jcague   @larsonalonso
API Cliente - Room (II)

Suscribirse a un Stream
room.addEventListener('stream-subscribed', function(streamEvent) {
      console.log('Subscribed to stream: ', streamEvent.stream.getID());
}

room.subscribe(stream);

Y además…

room.addEventListener('stream-removed', function(streamEvent) {
      console.log('Removed stream: ', streamEvent.stream.getID());
}

room.unpublish(localStream);

room.unsubscribe(stream);

room.disconnect();

                                                                     Javier Cerviño   Alvaro Alonso
                                                                            @jcague   @larsonalonso
API Cliente - Events
   Yo                                   ERIZO                             Otros
Clientes       localStream.init()
               access-accepted

                room.connect()
           room-connected (streams)

            room.subscribe (stream)
              stream-subscribed

           room.publish (localStream)
                stream-added                        stream-added

                                                room.unpublish (stream)
               stream-removed                      stream-removed


             stream.sendData (msg)                   stream-data
                                                    Javier Cerviño         Alvaro Alonso
                                                           @jcague         @larsonalonso
ViaS
<html><head><title>Lynckia Example</title>                                                    room.addEventListener("stream-added", function (streamEvent) {
<script type="text/javascript" src="http://…/erizo.js"></script>                                    var streams = [];
<script type="text/javascript”>                                                                     streams.push(streamEvent.stream);
    window.onload = function () {                                                                   subscribeToStreams(streams);
                                                                                               });
        var localStream = Erizo.Stream({audio: true, video: true, data: true});                room.addEventListener("stream-removed", function (streamEvent) {
        var room = Erizo.Room({token: '213h8012hwduahd-321ueiwqewq'});                              var stream = streamEvent.stream;
                                                                                                    if (stream.elementID !== undefined) {
         localStream.addEventListener("access-accepted", function () {
                                                                                                        var element = document.getElementById(stream.elementID);
         var subscribeToStreams = function (streams) {                                                  document.body.removeChild(element);
              for (var index in streams) {                                                          }
                  var stream = streams[index];                                                 });
                  if (localStream.getID() !== stream.getID())
                       room.subscribe(stream);
              }                                                                                    room.connect();
           };                                                                                      localStream.show("myVideo");
          room.addEventListener("room-connected", function (roomEvent) {                           });
               room.publish(localStream);
               subscribeToStreams(roomEvent.streams);
                                                                                                   localStream.init();
          });
                                                                                       };
         room.addEventListener("stream-subscribed", function(streamEvent) {           </head>
                       var stream = streamEvent.stream;                                </script>
                                                                                          <body>
                       var div = document.createElement('div');
                       div.setAttribute("style", "width: 320px; height: 240px;");                   <div id="myVideo" style="width:320px; height: 240px;”></div>
                       div.setAttribute("id", "test" + stream.getID());                 </body>
                       document.body.appendChild(div);                                </html>

                     stream.show("test" + stream.getID());
          });                                                                                                            Javier Cerviño                   Alvaro Alonso
                                                                                                                                @jcague                   @larsonalonso
Demos
Demo: Guess Who!




http://www.youtube.com/watch?v=e3tn-uh5Wbo
                            Javier Cerviño   Alvaro Alonso
                                   @jcague   @larsonalonso
Demo: Guess Who!

 myConfigStream = Erizo.Stream({audio: false, video: false, data: true,
                                         attributes: {name: 'configStream'}});
 room.publish(myConfigStream);

 for (var cs in configStreams) {
       room.subscribe(configStreams[cs]);
       configStreams[cs].addEventListener("stream-data", function(evt) {

            var msg = evt.msg; var stream = evt.stream;
            if (msg.state === 'free') {
                myConfigStream.sendData({state: 'selected', yourID: stream.getID()});

            } else if (msg.state === 'selected' && msg.yourID === myConfigStream.getID()) {
                myConfigStream.sendData({state: 'ok', yourID: stream.getID()});
                startPlaying(stream);

        }     else if (msg.state === 'ok’ && msg.yourID === myConfigStream.getID()) {
                startPlaying(stream);
        }
       });
 }
 myConfigStream.sendData({state: 'free'});
                                                                                 Javier Cerviño   Alvaro Alonso
Basado en threede.js                                                                    @jcague   @larsonalonso
Javier Cerviño   Alvaro Alonso
       @jcague   @larsonalonso
MashMeTV




http://www.youtube.com/watch?v=3XZ-ffdPFH0
                             Javier Cerviño   Alvaro Alonso
                                    @jcague   @larsonalonso
Demo: MashMe TV




var canvas = document.createElement('canvas');
canvas.id = "testing";
canvas.width = "100px";
canvas.height = "50px";
document.body.appendChild(canvas);

var context = canvas.getContext('2d');
document.getElementById("myVideo").onclick = function() {

      var frame = stream.getVideoFrame();
      context.putImageData(frame, 0, 0);
}                                                           Javier Cerviño   Alvaro Alonso
                                                                   @jcague   @larsonalonso
Demo CSS 3D




http://www.youtube.com/watch?v=7wLTUaGJfQ0
                            Javier Cerviño   Alvaro Alonso
                                   @jcague   @larsonalonso
room.addEventListener("stream-subscribed", function(streamEvent) {

      var winDiv = document.createElement('div');
      winDiv.setAttribute("style", "width: 345x; height: 3D Game
                                                   Demo: 305px;");
      winDiv.setAttribute("id", "window");

      world.addPlane( new PlaneVideo(winDiv, 345, 305, 30, 588, -400,90,0,0));
      streamEvent.stream.show('window');
}

function PlaneVideo(videodiv, w,h,x,y,z,rx,ry,rz, options) {

    this.node = document.createElement("div");
    this.node.appendChild(videodiv);
     …
    this.node.style.cssText +=
                "-webkit-transform:" +
                "translate3d(" + x + "px," + y + "px," + z + "px)" +
                "rotateX(" + rx + "deg)" +
                "rotateY(" + ry + "deg)" +
                "rotateZ(" + rz + "deg);" +
                "-webkit-filter: blur(2px);";
}
Muchas gracias!!
Preguntas???




  Javier Cerviño        Alvaro Alonso
  jcervino@dit.upm.es   aalonsog@dit.upm.es
  @jcague               @larsonalonso

Weitere ähnliche Inhalte

Was ist angesagt?

Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferenciasMicael Gallego
 
Implementación de microservicios en Vocento
Implementación de microservicios en VocentoImplementación de microservicios en Vocento
Implementación de microservicios en VocentoHector Prats Ortega
 
Google Web Toolkit (GWT) en entornos empresariales
Google Web Toolkit (GWT) en entornos empresarialesGoogle Web Toolkit (GWT) en entornos empresariales
Google Web Toolkit (GWT) en entornos empresarialesTecsisa
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Micael Gallego
 
Jessica Guisado, 2022, Desarrollo de una aplicación Blockchain con la tecnolo...
Jessica Guisado, 2022, Desarrollo de una aplicación Blockchain con la tecnolo...Jessica Guisado, 2022, Desarrollo de una aplicación Blockchain con la tecnolo...
Jessica Guisado, 2022, Desarrollo de una aplicación Blockchain con la tecnolo...Francisco Javier Mora Serrano
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
 
Divide y Vencerás: introducción a los Microservicios
Divide y Vencerás: introducción a los MicroserviciosDivide y Vencerás: introducción a los Microservicios
Divide y Vencerás: introducción a los MicroserviciosThoughtworks
 

Was ist angesagt? (10)

JsSIP: SIP + WebRTC
JsSIP: SIP + WebRTCJsSIP: SIP + WebRTC
JsSIP: SIP + WebRTC
 
Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
 
Implementación de microservicios en Vocento
Implementación de microservicios en VocentoImplementación de microservicios en Vocento
Implementación de microservicios en Vocento
 
Google Web Toolkit (GWT) en entornos empresariales
Google Web Toolkit (GWT) en entornos empresarialesGoogle Web Toolkit (GWT) en entornos empresariales
Google Web Toolkit (GWT) en entornos empresariales
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
 
Jessica Guisado, 2022, Desarrollo de una aplicación Blockchain con la tecnolo...
Jessica Guisado, 2022, Desarrollo de una aplicación Blockchain con la tecnolo...Jessica Guisado, 2022, Desarrollo de una aplicación Blockchain con la tecnolo...
Jessica Guisado, 2022, Desarrollo de una aplicación Blockchain con la tecnolo...
 
SIPML5toElastix
SIPML5toElastixSIPML5toElastix
SIPML5toElastix
 
Introducción a microservicios
Introducción a microserviciosIntroducción a microservicios
Introducción a microservicios
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019
 
Divide y Vencerás: introducción a los Microservicios
Divide y Vencerás: introducción a los MicroserviciosDivide y Vencerás: introducción a los Microservicios
Divide y Vencerás: introducción a los Microservicios
 

Andere mochten auch

Re-using Media on the Web tutorial: Media Fragment Creation and Annotation
Re-using Media on the Web tutorial: Media Fragment Creation and AnnotationRe-using Media on the Web tutorial: Media Fragment Creation and Annotation
Re-using Media on the Web tutorial: Media Fragment Creation and AnnotationMediaMixerCommunity
 
Remixing Media on the Web: Media Fragment Specification and Semantics
Remixing Media on the Web: Media Fragment Specification and SemanticsRemixing Media on the Web: Media Fragment Specification and Semantics
Remixing Media on the Web: Media Fragment Specification and SemanticsMediaMixerCommunity
 
Re-using Media on the Web: Media fragment re-mixing and playout
Re-using Media on the Web: Media fragment re-mixing and playoutRe-using Media on the Web: Media fragment re-mixing and playout
Re-using Media on the Web: Media fragment re-mixing and playoutMediaMixerCommunity
 
Tutorial Frutos del Futuro
Tutorial Frutos del FuturoTutorial Frutos del Futuro
Tutorial Frutos del Futurocanaleureka
 
calentamiento global
calentamiento globalcalentamiento global
calentamiento globalchitica
 
Conductas Antiambientales
Conductas AntiambientalesConductas Antiambientales
Conductas AntiambientalesHennaOsuna
 
Architectural Association
Architectural AssociationArchitectural Association
Architectural Associationvillamileduardo
 
C:\Fakepath\Grupo Co Neu
C:\Fakepath\Grupo Co NeuC:\Fakepath\Grupo Co Neu
C:\Fakepath\Grupo Co Neusrossio
 
HISTORIA DE INTERNET
HISTORIA DE INTERNETHISTORIA DE INTERNET
HISTORIA DE INTERNETprr
 
Redes neuronales
Redes neuronalesRedes neuronales
Redes neuronalesanlie
 
Estudio Inversion IAB España 2010
Estudio Inversion IAB España 2010Estudio Inversion IAB España 2010
Estudio Inversion IAB España 2010Pablo Morales
 
Caminos sobre la mar
Caminos sobre la marCaminos sobre la mar
Caminos sobre la marAida March
 
Pedraza En La Noche De Las Velas
Pedraza En La Noche De Las VelasPedraza En La Noche De Las Velas
Pedraza En La Noche De Las Velashjpsiot
 

Andere mochten auch (20)

HTML5 Today #4
HTML5 Today #4HTML5 Today #4
HTML5 Today #4
 
Re-using Media on the Web tutorial: Media Fragment Creation and Annotation
Re-using Media on the Web tutorial: Media Fragment Creation and AnnotationRe-using Media on the Web tutorial: Media Fragment Creation and Annotation
Re-using Media on the Web tutorial: Media Fragment Creation and Annotation
 
Remixing Media on the Web: Media Fragment Specification and Semantics
Remixing Media on the Web: Media Fragment Specification and SemanticsRemixing Media on the Web: Media Fragment Specification and Semantics
Remixing Media on the Web: Media Fragment Specification and Semantics
 
Re-using Media on the Web: Media fragment re-mixing and playout
Re-using Media on the Web: Media fragment re-mixing and playoutRe-using Media on the Web: Media fragment re-mixing and playout
Re-using Media on the Web: Media fragment re-mixing and playout
 
Tutorial Frutos del Futuro
Tutorial Frutos del FuturoTutorial Frutos del Futuro
Tutorial Frutos del Futuro
 
La virgen
La virgenLa virgen
La virgen
 
Modulo 4
Modulo 4Modulo 4
Modulo 4
 
Diagnóstico de salud
Diagnóstico de saludDiagnóstico de salud
Diagnóstico de salud
 
calentamiento global
calentamiento globalcalentamiento global
calentamiento global
 
Conductas Antiambientales
Conductas AntiambientalesConductas Antiambientales
Conductas Antiambientales
 
Architectural Association
Architectural AssociationArchitectural Association
Architectural Association
 
C:\Fakepath\Grupo Co Neu
C:\Fakepath\Grupo Co NeuC:\Fakepath\Grupo Co Neu
C:\Fakepath\Grupo Co Neu
 
HISTORIA DE INTERNET
HISTORIA DE INTERNETHISTORIA DE INTERNET
HISTORIA DE INTERNET
 
Redes neuronales
Redes neuronalesRedes neuronales
Redes neuronales
 
Caño juan
Caño juanCaño juan
Caño juan
 
Estudio Inversion IAB España 2010
Estudio Inversion IAB España 2010Estudio Inversion IAB España 2010
Estudio Inversion IAB España 2010
 
Clase 3. Apuntes.
Clase 3. Apuntes.Clase 3. Apuntes.
Clase 3. Apuntes.
 
MATES
MATESMATES
MATES
 
Caminos sobre la mar
Caminos sobre la marCaminos sobre la mar
Caminos sobre la mar
 
Pedraza En La Noche De Las Velas
Pedraza En La Noche De Las VelasPedraza En La Noche De Las Velas
Pedraza En La Noche De Las Velas
 

Ähnlich wie Presentación WebRTC y Lynckia

Cifrado de flujos de vídeo en HTML5
Cifrado de flujos de vídeo en HTML5Cifrado de flujos de vídeo en HTML5
Cifrado de flujos de vídeo en HTML5Manuel Mancera
 
Web 1.0 vs web 2.0
Web 1.0 vs web 2.0Web 1.0 vs web 2.0
Web 1.0 vs web 2.0dayana115
 
Web 1.0 vs web 2.0
Web 1.0 vs web 2.0Web 1.0 vs web 2.0
Web 1.0 vs web 2.0dayana115
 
Web Semántica, MAS y redes sociales móviles: El proyecto Mowento
Web Semántica, MAS y redes sociales móviles: El proyecto MowentoWeb Semántica, MAS y redes sociales móviles: El proyecto Mowento
Web Semántica, MAS y redes sociales móviles: El proyecto MowentoJoaquín Borrego-Díaz
 
HTML5 en el universo Windows (Apps universales)
HTML5 en el universo Windows (Apps universales)HTML5 en el universo Windows (Apps universales)
HTML5 en el universo Windows (Apps universales)Quique Fdez Guerra
 
Gabriela padilla.xps
Gabriela padilla.xpsGabriela padilla.xps
Gabriela padilla.xpsgabyta15
 
Trabajo De Web 2
Trabajo De Web 2Trabajo De Web 2
Trabajo De Web 2victoria
 
Qué es la web 2
Qué es la web 2Qué es la web 2
Qué es la web 2yiinaa
 
WebRTC - Una nueva tecnología web al servicio de la educación. Caso en Virtua...
WebRTC - Una nueva tecnología web al servicio de la educación. Caso en Virtua...WebRTC - Una nueva tecnología web al servicio de la educación. Caso en Virtua...
WebRTC - Una nueva tecnología web al servicio de la educación. Caso en Virtua...Jorge Rubiano
 
WEB 2.0 diseño de un blog en blogspot
WEB 2.0  diseño de un blog en blogspotWEB 2.0  diseño de un blog en blogspot
WEB 2.0 diseño de un blog en blogspotandrea456_
 

Ähnlich wie Presentación WebRTC y Lynckia (20)

Web 2.0 noemi
Web 2.0 noemiWeb 2.0 noemi
Web 2.0 noemi
 
Cifrado de flujos de vídeo en HTML5
Cifrado de flujos de vídeo en HTML5Cifrado de flujos de vídeo en HTML5
Cifrado de flujos de vídeo en HTML5
 
Web 1.0 vs web 2.0
Web 1.0 vs web 2.0Web 1.0 vs web 2.0
Web 1.0 vs web 2.0
 
Web 1.0 vs web 2.0
Web 1.0 vs web 2.0Web 1.0 vs web 2.0
Web 1.0 vs web 2.0
 
Web Semántica, MAS y redes sociales móviles: El proyecto Mowento
Web Semántica, MAS y redes sociales móviles: El proyecto MowentoWeb Semántica, MAS y redes sociales móviles: El proyecto Mowento
Web Semántica, MAS y redes sociales móviles: El proyecto Mowento
 
HTML5 en el universo Windows (Apps universales)
HTML5 en el universo Windows (Apps universales)HTML5 en el universo Windows (Apps universales)
HTML5 en el universo Windows (Apps universales)
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Gabriela padilla.xps
Gabriela padilla.xpsGabriela padilla.xps
Gabriela padilla.xps
 
Trabajo De Web 2
Trabajo De Web 2Trabajo De Web 2
Trabajo De Web 2
 
Qué es la web 2
Qué es la web 2Qué es la web 2
Qué es la web 2
 
La Web 2 0
La Web 2 0La Web 2 0
La Web 2 0
 
La Web 2 0
La Web 2 0La Web 2 0
La Web 2 0
 
Web 2.o
Web 2.oWeb 2.o
Web 2.o
 
Qué es la web 2
Qué es la web 2Qué es la web 2
Qué es la web 2
 
WebRTC - Una nueva tecnología web al servicio de la educación. Caso en Virtua...
WebRTC - Una nueva tecnología web al servicio de la educación. Caso en Virtua...WebRTC - Una nueva tecnología web al servicio de la educación. Caso en Virtua...
WebRTC - Una nueva tecnología web al servicio de la educación. Caso en Virtua...
 
Web 2
Web 2Web 2
Web 2
 
Web 2
Web 2Web 2
Web 2
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Uuuuuuuuuuu
UuuuuuuuuuuUuuuuuuuuuu
Uuuuuuuuuuu
 
WEB 2.0 diseño de un blog en blogspot
WEB 2.0  diseño de un blog en blogspotWEB 2.0  diseño de un blog en blogspot
WEB 2.0 diseño de un blog en blogspot
 

Kürzlich hochgeladen

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Kürzlich hochgeladen (16)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Presentación WebRTC y Lynckia

  • 1. WebRTC Comunicaciones en tiempo real desde tu navegador Javier Cerviño Alvaro Alonso Pedro Rodriguez jcervino@dit.upm.es aalonsog@dit.upm.es prodriguez@dit.upm.es @jcague @larsonalonso @lodoyun Nestor Toribio Joaquín Salvachúa nestortoribioruiz@gmail.com jsr@dit.upm.es @nehko1 @jsalvachua Grupo de Internet de Nueva Generación Departamento de Ingeniería de Sistemas Telemáticos Universidad Politécnica de Madrid
  • 2. Previously on GING Isabel 1995 (o por ahi) Aplicación de escritorio Ubuntu/Windows P2P/Centralizado Pasarelas SIP Marte 2007 Aplicación Flash sobre el navegador Centralizado Desktop VaaS 2010 Cloud Computing Aplicación Flash sobre el navegador Desktop y Móviles Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 3. Índice 1. Introducción a WebRTC 1. Descripción 2. Ejemplo de llamada 3. Estado actual 2. Problemas de WebRTC 3. Videoconferencia multiusuario 1. Lynckia, componentes y API 2. Ejemplos Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 4. Índice 1. Introducción a WebRTC 1. Descripción 2. Ejemplo de llamada 3. Estado actual 2. Problemas de WebRTC 3. Videoconferencia multiusuario 1. Lynckia, componentes y API 2. Ejemplos Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 5. Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 6. Videoconferencia en el navegador Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 7. PROTOCOLOS PROPIETARIOS HTTP/WEBSOCKETS JS/CSS/HTML JS/CSS/HTML TRANSMISIÓN Navegador Navegador DE MEDIOS Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 8. APIs de WebRTC en JavaScript Tres Grandes APIs getUserMedia Obtención de flujos locales StreamAPI Manejo de flujos multimedia PeerConnection Conexiones entre pares Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 9. Ejemplo de llamada 1. getUserMedia() 5. getUserMedia() 2. pc = new PeerConnection() 6. pc = new PeerConnection() 3. onLocalSignallingMessage(sdpOffer) 7. pc.processSignalingMessage(sdpOffer) 8. onLocalSignallingMessage(sdpAnswer) 10. pc.processSignalingMessage(sdpAnswer) 11. onLocalSignallingMessage(sdpOk) 13. pc.processSignalingMessage(sdpOk ) 14 Alice Javier Cerviño Bob Alvaro Alonso @jcague @larsonalonso
  • 10. Google Proyecto de código libre escrito en C++ Respaldado por Google, Mozilla y Opera entre otros. Implementación de todo WebRTC Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 11. Google Primera Fase • Librería en C++ implementando rtcweb Segunda Fase • Inclusión de la librería en navegadores • Implica implementación del API JavaScript Actualmente: • Primera versión disponible: iteraciones y pruebas Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 12. Ericsson Labs Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 13. Ericsson Labs Bowser Navegador Web en el móvil Soporte WebRTC Disponible para iOS y Android https://labs.ericsson.com/apps/bowser Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 14. Mozilla Firefox 18 con soporte completo de WebRTC GetUserMedia StreamAPI PeerConnection Lanzamiento en enero de 2013 https://hacks.mozilla.org/2012/09/full-webrtc-support-is-soon-coming-to-a-web-browser-near-you/ Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 15. Internet Explorer Soporte experimental de GetUserMedia navigator.msGetUserMedia(options, cameraStarted); function cameraStarted(mediaStream) { msMediaStream = mediaStream; document["imgPreview"].src = URL.createObjectURL(mediaStream); } http://blogs.msdn.com/b/ie/archive/2012/03/16/media-capture-prototype-improved-support-for-real-world-web-apps.aspx Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 16. Opera Soporta sólo getUserMedia También tiene soporte en los móviles Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 17. Índice 1. Introducción a WebRTC 1. Descripción 2. Ejemplo de llamada 3. Estado actual 2. Problemas de WebRTC 3. Videoconferencia multiusuario 1. Lynckia, componentes y API 2. Ejemplos Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 18. Problemas de WebRTC Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 19. Problemas de WebRTC UMTSHSPA+ HSDPA Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 20. Problemas de WebRTC Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 21. Problemas de WebRTC Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 22. Problemas de WebRTC MCU Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 23. Índice 1. Introducción a WebRTC 1. Descripción 2. Ejemplo de llamada 3. Estado actual 2. Problemas de WebRTC 3. Videoconferencia multiusuario 1. Lynckia, componentes y API 2. Ejemplos Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 24. Lynckia Erizo Nuve Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 25. Lynckia - Salas Una sala es una MCU Permite publicar streams Video, audio, datos Permite subscribirse a ellos Control desde el navegador Permitirá transcodificar/grabar Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 26. Lynckia - Nuve API Accesible a través del Backend Dirigido a servicios Administración de salas Nuve Gestiona la escalabilidad Monitoriza Creación de tokens Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 27. Lynckia - Erizo Accesible a traves del Frontend Erizo Contiene las MCU Cada sala es una de ellas Gestiona los streams Audio, video y datos Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 28. Lynckia - Erizo Erizo Disponible en: https://github.com/ging/erizo Erizo Codigo C++ Protocolos WebRTC Linux/Mac Erizo API Disponible en: https://github.com/ging/erizoAPI Wrapper en Node.js Pronto a traves de NPM Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 29. Lynckia API API Servidor Streams Rooms Rooms Tokens Events Users API Cliente Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 30. API Servidor Comunicación con Nuve API para gestión del Servicio Salas videoconferencia Tokens autenticación Usuarios Código Node.js Python (Ruby) Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 31. API Servidor - Room Propiedades Funciones Room._id createRoom (name) Room.name getRooms () getRoom (roomId) deleteRoom (roomId) Ejemplo var N = require('./nuve'); N.API.init(serviceId, serviceKey); var roomName = 'myFirstRoom'; N.API.createRoom(roomName, function(room) { console.log('Room created with id: ', room._id); }); Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 32. API Servidor - Token String con las credenciales de autenticación Funciones createToken (roomId, name, role) Ejemplo var roomId = '30121g51113e74fff3115502'; var name = 'userName'; var role = ''; N.API.createToken(room, name, role, function(token) { console.log('Token created: ', token); }); Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 33. API Servidor - User Propiedades Funciones User.name getUsers (roomId) User.role Ejemplo var roomId = '30121g51113e74fff3115502'; N.API.getUsers(roomId, function(users) { console.log('This room has ', users.length, 'users'); for (var i in users) { console.log('User ', i, ':', users[i].name, 'role: ', users[i].role); } }); Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 34. Lynckia API API Servidor Streams Rooms Rooms Tokens Events Users API Cliente Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 35. API Cliente Comunicación con Erizo Manejo flujos (Streams) Audio Vídeo Datos Interacción salas (Rooms) Conexión Intercambio flujos Captura eventos (Events) En flujos En salas Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 36. API Cliente - Stream (I) Crear un Stream var stream = Erizo.Stream({audio:false, video:true, data: true, attributes: {name:'myStream', type: 'public'}}); Iniciar y mostrar el Stream stream.addEventListener('access-accepted', function(event) { console.log("Access to webcam and microphone granted"); stream.show('myVideoId'); }); stream.addEventListener('access-denied', function(event) { console.log("Access to webcam and microphone rejected"); }); stream.init(); Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 37. API Cliente - Stream (II) Usando el Stream stream.addEventListener('stream-data', function(evt) { console.log('Received data ', evt.msg, 'from stream ', evt.stream.getID()); } stream.sendData({text:'Hello world', timestamp:12321312}); var frame; var url; var ctx = document.getElementById('myCanvas').getContext('2d'); var img = document.getElementById('myImg'); setInterval (function() { frame = stream.getVideoFrame(); ctx.putImageData(frame, 0, 0); url = stream.getVideoFrameURL(); img.src = url; }, 100); Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 38. API Cliente - Room (I) Conectarse a una sala var room = Erizo.Room({token:'213h8012hwduahd-321ueiwqewq'}); room.addEventListener('room-connected', function(roomEvent) { console.log('Connected! Streams in the room: ', roomEvent.streams); } room.connect(); Publicar mi stream room.addEventListener('stream-added', function(streamEvent) { if (localStream.getID() === streamEvent.stream.getID()) { console.log('Published!'); } } room.publish(localStream); Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 39. API Cliente - Room (II) Suscribirse a un Stream room.addEventListener('stream-subscribed', function(streamEvent) { console.log('Subscribed to stream: ', streamEvent.stream.getID()); } room.subscribe(stream); Y además… room.addEventListener('stream-removed', function(streamEvent) { console.log('Removed stream: ', streamEvent.stream.getID()); } room.unpublish(localStream); room.unsubscribe(stream); room.disconnect(); Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 40. API Cliente - Events Yo ERIZO Otros Clientes localStream.init() access-accepted room.connect() room-connected (streams) room.subscribe (stream) stream-subscribed room.publish (localStream) stream-added stream-added room.unpublish (stream) stream-removed stream-removed stream.sendData (msg) stream-data Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 41. ViaS <html><head><title>Lynckia Example</title> room.addEventListener("stream-added", function (streamEvent) { <script type="text/javascript" src="http://…/erizo.js"></script> var streams = []; <script type="text/javascript”> streams.push(streamEvent.stream); window.onload = function () { subscribeToStreams(streams); }); var localStream = Erizo.Stream({audio: true, video: true, data: true}); room.addEventListener("stream-removed", function (streamEvent) { var room = Erizo.Room({token: '213h8012hwduahd-321ueiwqewq'}); var stream = streamEvent.stream; if (stream.elementID !== undefined) { localStream.addEventListener("access-accepted", function () { var element = document.getElementById(stream.elementID); var subscribeToStreams = function (streams) { document.body.removeChild(element); for (var index in streams) { } var stream = streams[index]; }); if (localStream.getID() !== stream.getID()) room.subscribe(stream); } room.connect(); }; localStream.show("myVideo"); room.addEventListener("room-connected", function (roomEvent) { }); room.publish(localStream); subscribeToStreams(roomEvent.streams); localStream.init(); }); }; room.addEventListener("stream-subscribed", function(streamEvent) { </head> var stream = streamEvent.stream; </script> <body> var div = document.createElement('div'); div.setAttribute("style", "width: 320px; height: 240px;"); <div id="myVideo" style="width:320px; height: 240px;”></div> div.setAttribute("id", "test" + stream.getID()); </body> document.body.appendChild(div); </html> stream.show("test" + stream.getID()); }); Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 42. Demos
  • 43. Demo: Guess Who! http://www.youtube.com/watch?v=e3tn-uh5Wbo Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 44. Demo: Guess Who! myConfigStream = Erizo.Stream({audio: false, video: false, data: true, attributes: {name: 'configStream'}}); room.publish(myConfigStream); for (var cs in configStreams) { room.subscribe(configStreams[cs]); configStreams[cs].addEventListener("stream-data", function(evt) { var msg = evt.msg; var stream = evt.stream; if (msg.state === 'free') { myConfigStream.sendData({state: 'selected', yourID: stream.getID()}); } else if (msg.state === 'selected' && msg.yourID === myConfigStream.getID()) { myConfigStream.sendData({state: 'ok', yourID: stream.getID()}); startPlaying(stream); } else if (msg.state === 'ok’ && msg.yourID === myConfigStream.getID()) { startPlaying(stream); } }); } myConfigStream.sendData({state: 'free'}); Javier Cerviño Alvaro Alonso Basado en threede.js @jcague @larsonalonso
  • 45. Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 46. MashMeTV http://www.youtube.com/watch?v=3XZ-ffdPFH0 Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 47. Demo: MashMe TV var canvas = document.createElement('canvas'); canvas.id = "testing"; canvas.width = "100px"; canvas.height = "50px"; document.body.appendChild(canvas); var context = canvas.getContext('2d'); document.getElementById("myVideo").onclick = function() { var frame = stream.getVideoFrame(); context.putImageData(frame, 0, 0); } Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 48. Demo CSS 3D http://www.youtube.com/watch?v=7wLTUaGJfQ0 Javier Cerviño Alvaro Alonso @jcague @larsonalonso
  • 49. room.addEventListener("stream-subscribed", function(streamEvent) { var winDiv = document.createElement('div'); winDiv.setAttribute("style", "width: 345x; height: 3D Game Demo: 305px;"); winDiv.setAttribute("id", "window"); world.addPlane( new PlaneVideo(winDiv, 345, 305, 30, 588, -400,90,0,0)); streamEvent.stream.show('window'); } function PlaneVideo(videodiv, w,h,x,y,z,rx,ry,rz, options) { this.node = document.createElement("div"); this.node.appendChild(videodiv); … this.node.style.cssText += "-webkit-transform:" + "translate3d(" + x + "px," + y + "px," + z + "px)" + "rotateX(" + rx + "deg)" + "rotateY(" + ry + "deg)" + "rotateZ(" + rz + "deg);" + "-webkit-filter: blur(2px);"; }
  • 50. Muchas gracias!! Preguntas??? Javier Cerviño Alvaro Alonso jcervino@dit.upm.es aalonsog@dit.upm.es @jcague @larsonalonso