Cómo unirse a una sesión — Web

Mediante un identificador de sesión y un token, puedes conectarte a la sesión de OpenTok utilizando la biblioteca OpenTok.js.

Este tema incluye las siguientes secciones:

Para obtener información sobre cómo crear un identificador de sesión y un token de autenticación, consulta Creación de sesiones y Creación de fichas.

Inicialización de un objeto «Session»

Antes de poder conectarte a una sesión, debes crear una instancia del objeto Session llamando a la función OT.initSession() método con tu Clave de la API de OpenTok y el ID de sesión correspondiente:

// Replace with your OpenTok API key and session ID:
var session = OT.initSession(apiKey, sessionID);

El OT.initSession() El método devuelve un objeto Session, a través del cual se realizan las llamadas posteriores a la API.

Ten en cuenta que al llamar a la función OT.initSession() El método no crear una sesión de OpenTok; crea un objeto «Session» de JavaScript, que representa una sesión de OpenTok ya existente. Para crear una sesión de OpenTok, hay que utilizar las bibliotecas de OpenTok del lado del servidor. Véase Creación de una sesión de OpenTok.

Si el navegador del usuario no es compatible con WebRTC, la llamada a OT.initSession() lo que hace que la página muestre un mensaje al usuario. Para comprobar si se admite WebRTC y evitar que aparezca este mensaje, puedes llamar a la función OT.checkSystemRequirements() antes de llamar al método OT.initSession():

if (OT.checkSystemRequirements() == 1) {
  var session = OT.initSession(apiKey, sessionId);
} else {
  // The client does not support WebRTC.
  // You can display your own message.
}

Conectarse a una sesión

Una vez que haya se ha inicializado un objeto Session, llámalo connect() método, pasando un ficha y una función de gestión de finalización:

var session = OT.initSession(apiKey, sessionId);
session.connect(token, function(error) {
  if (error) {
    console.log("Error connecting: ", error.name, error.message);
  } else {
    console.log("Connected to the session.");
  }
});

Se pasa un objeto de error al controlador de finalización del connect evento que se produce cuando el cliente no consigue conectarse a la sesión de OpenTok. En caso contrario, no se pasa ningún objeto de error, lo que indica que el cliente se ha conectado correctamente a la sesión.

El objeto Session también envía un comando sessionConnected evento cuando el cliente se conecta a la sesión de OpenTok. Y el objeto OT envía un exception evento cuando se produce un error al conectarse. Sin embargo, resulta más sencillo comprobar si la conexión se ha realizado correctamente pasando un controlador de finalización al connect() método, como último parámetro.

Desconectarse de una sesión

Para desconectarte de una sesión, llama al disconnect() del objeto Session:

session.disconnect();

Detectar cuándo te has desconectado

Cuando el cliente se desconecta de una sesión, el objeto Session envía un comando sessionDisconnected evento:

session.on("sessionDisconnected", function (event) {
  // The event is defined by the SessionDisconnectEvent class
  if (event.reason == "networkDisconnected") {
    alert("Your network connection terminated.")
  }
});
session.connect(token);

El reason La propiedad del evento es una cadena que describe el motivo por el que se ha desconectado la sesión. Por ejemplo, el ejemplo anterior avisa al usuario de que se ha desconectado debido a que se ha interrumpido la conexión de red. Para obtener más información, consulta SessionDisconnectEvent.

Reconexión automática

Los clientes intentarán volver a conectarse automáticamente a una sesión de la que se hayan desconectado de forma inesperada (por ejemplo, debido a una interrupción de la conexión de red). No es necesario añadir ningún código para que los clientes se vuelvan a conectar automáticamente, a menos que quieras responder a los eventos que se activan cuando el cliente se desconecta y vuelve a conectarse. Para ver un código de ejemplo que ilustra el uso de estos eventos, consulta el opentok-reconnection repositorio en GitHub.

Cuando se interrumpe la conexión y el cliente intenta volver a conectarse, el objeto Session envía un comando reconnecting evento. Cuando se restablece la conexión, el objeto Session envía un evento reconnected evento. Si el cliente no puede restablecer la conexión, se desconecta de la sesión de OpenTok y el objeto Session envía el sessionDisconnected evento.

En respuesta a estos sucesos, tu aplicación puede (opcionalmente) mostrar notificaciones en la interfaz de usuario que indiquen los estados de desconexión temporal, reconexión y desconexión:

session.on(
  sessionReconnecting: function() {
    // Display a user interface notification.
  },
  sessionReconnected: function() {
    // Adjust user interface.
  },
  sessionDisconnected: function() {
    // Adjust user interface.
  }
);

Cuando su cliente se desconecta temporalmente de una sesión, los objetos Subscriber de los clientes suscritos a un flujo que usted publica envían eventos cuando su flujo publicado cae y cuando (y si) se reanuda automáticamente. Para más información, consulte Reconexión automática en la guía para desarrolladores «Suscribirse a flujos».

Por defecto, cualquier señal que envíe mientras su cliente está temporalmente desconectado de una sesión se pone en cola y se envía cuando (y si) se reconecta con éxito. Puede configurar la opción retryAfterReconnect propiedad a false en las opciones que introduzca en el campo Session.signal() para evitar que las señales se pongan en cola mientras usted está desconectado. Para obtener más información, consulte Evitar que se envíen señales durante la reconexión automática.

Detección de conexión y desconexión de clientes

El objeto «Session» envía un connectionCreated evento cuando un nuevo cliente (incluido el propio) se conecta a la sesión. El objeto Session envía un connectionDestroyed evento cuando otros clientes abandonan la sesión. Estos eventos están definidos por la clase ConnectionEvent, que tiene un connection que es un objeto Connection para la conexión (creada o destruida) relacionada con el evento:

var connectionCount;
session.on({
  connectionCreated: function (event) {
    connectionCount++;
    if (event.connection.connectionId != session.connection.connectionId) {
      console.log('Another client connected. ' + connectionCount + ' total.');
    }
  },
  connectionDestroyed: function connectionDestroyedHandler(event) {
    connectionCount--;
    console.log('A client disconnected. ' + connectionCount + ' total.');
  }
});
session.connect(token, function (error) {
  if (error) {
    console.log("Failed to connect.");
  } else {
    console.log('You have connected to the session.');
  }
});

Solución de problemas relacionados con la conexión a la sesión

El Session.connect() tiene una función de devolución de llamada a la que se le pasa un parámetro opcional error parámetro. Si este parámetro está presente y definido (no null o no está definido), se ha producido un error al conectarse. Buscar este error en tu código te ayudará a averiguar por qué el usuario final no ha podido conectarse:

session.connect(token, function(err) {
  if (err) {
    // handle error
  } else {
    // connection succeeded
  }
});

Un gran número de errores que aparecen al intentar conectarse se deben a tokens no válidos o caducados. Asegúrese de seguir las prácticas recomendadas para los tokens que se describen a continuación. aquí.

Otra razón común por la que falla la conexión a una sesión es debido a la conexión a Internet del usuario final. Ejemplos de ello son:

  • El usuario final ha perdido la conexión a Internet
  • El usuario final tiene los puertos comunes bloqueados porque está en una red restrictiva.

Esto provocará un error con el código 1006. Te recomendamos que lo resuelvas utilizando el código que aparece a continuación. Otras causas por las que puede fallar la conexión a una sesión son que los servidores de OpenTok estén caídos o que se haya producido algún tipo de error inesperado (como un error de nivel 500 en el servidor). Aunque esto no ocurre con frecuencia, es una buena práctica gestionar estos errores.

Si sigues estas instrucciones tu código de gestión de errores debería ser algo parecido a:

session.connect(token, function(err) {
  if (err) {
    if (err.name === "OT_NOT_CONNECTED") {
      showMessage('Failed to connect. Please check your connection and try connecting again.');
    } else {
      showMessage('An unknown error occurred connecting. Please try again later.');
    }
  }
});

Puede perder la conexión después de haberse conectado con éxito a una Sesión. Puede manejar este caso escuchando el comando sessionDisconnected evento con el motivo «networkDisconnected»:

session.on({
  sessionDisconnected: function(event) {
    if (event.reason === 'networkDisconnected') {
      showMessage('You lost your internet connection.'
        + 'Please check your connection and try connecting again.');
    }
  }
});

Poniendo todo en su sitio

El siguiente código incluye un connect() método, que se conecta a una sesión. Una vez conectado, el código registra cuándo los clientes se unen a la sesión y cuándo la abandonan. También cuenta con un método para desconectarse de la sesión:

var session;
var connectionCount = 0;

function connect() {
  // Replace apiKey and sessionId with your own values:
  session = OT.initSession(apiKey, sessionId);
  session.on({
    connectionCreated: function (event) {
      connectionCount++;
      console.log(connectionCount + ' connections.');
    },
    connectionDestroyed: function (event) {
      connectionCount--;
      console.log(connectionCount + ' connections.');
    },
    sessionDisconnected: function sessionDisconnectHandler(event) {
      // The event is defined by the SessionDisconnectEvent class
      console.log('Disconnected from the session.');
      document.getElementById('disconnectBtn').style.display = 'none';
      if (event.reason == 'networkDisconnected') {
        alert('Your network connection terminated.')
      }
    }
  });
  // Replace token with your own value:
  session.connect(token, function(error) {
    if (error) {
      console.log('Unable to connect: ', error.message);
    } else {
      document.getElementById('disconnectBtn').style.display = 'block';
      console.log('Connected to the session.');
      connectionCount = 1;
    }
  });
}

function disconnect() {
  session.disconnect();
}

connect();