SDK de Node para la Video API de Vonage
- Descripción general del SDK
- Referencia API
- Descargar
- Muestras
- GitHub
El SDK de OpenTok Node ofrece métodos para:
- Generación sesiones y fichas para OpenTok Applications
- Trabajar con OpenTok archivos
- Trabajar con OpenTok retransmisiones en directo
- Trabajar con OpenTok Interconexión SIP
- Envío de señales a los clientes conectados a una sesión
- Desconectar a los clientes de las sesiones
- Forzar a los clientes de una sesión a desconectarse o silenciar el audio publicado
- Trabajar con Conector de audio
Instalación mediante npm (recomendado):
npm ayuda a gestionar las dependencias de los proyectos de Node. Para más información, consulta aquí: http://npmjs.org.
Ejecute este comando para instalar el paquete y añadirlo a su package.json:
$ npm install opentok --save
Uso
Inicialización de
Importa el módulo para obtener una función constructora de un objeto OpenTok y, a continuación, llámala con new para
instanciar un objeto OpenTok con tu propia clave API y tu propio secreto API.
const OpenTok = require("opentok");
const opentok = new OpenTok(apiKey, apiSecret);
Aumentar los tiempos de espera
Actualmente, la biblioteca tiene un tiempo de espera de 20 segundos para las solicitudes. Si te conectas a una red lenta y necesitas aumentar el tiempo de espera, puedes indicarlo (en milisegundos) al instanciar el objeto OpenTok.
const OpenTok = require("opentok");
const opentok = new OpenTok(apiKey, apiSecret, { timeout: 30000});
Creación de sesiones
Para crear una sesión de OpenTok, utiliza el OpenTok.createSession(properties, callback) método. En
properties El parámetro es un objeto opcional que se utiliza para especificar si la sesión utiliza el OpenTok
Media Router, para indicar una sugerencia de ubicación y para especificar si la sesión se archivará automáticamente
o no. La función de devolución de llamada tiene la firma function(error, session). En session Lo que se devuelve
en la función de llamada de retorno es una instancia de Session. Los objetos Session tienen un sessionId propiedad que es
útil para ser guardada en un almacén persistente (como una base de datos).
// Create a session that will attempt to transmit streams directly between
// clients. If clients cannot connect, the session uses the OpenTok TURN server:
opentok.createSession(function (err, session) {
if (err) return console.log(err);
// save the sessionId
db.save("session", session.sessionId, done);
});
// The session will the OpenTok Media Router:
opentok.createSession({ mediaMode: "routed" }, function (err, session) {
if (err) return console.log(err);
// save the sessionId
db.save("session", session.sessionId, done);
});
// A Session with a location hint
opentok.createSession({ location: "12.34.56.78" }, function (err, session) {
if (err) return console.log(err);
// save the sessionId
db.save("session", session.sessionId, done);
});
// A Session with an automatic archiving
opentok.createSession({ mediaMode: "routed", archiveMode: "always" }, function (
err,
session
) {
if (err) return console.log(err);
// save the sessionId
db.save("session", session.sessionId, done);
});
Generación de fichas
Una vez creada una Sesión, puede empezar a generar Tokens para que los clientes los utilicen cuando se conecten a ella.
Puede generar un token llamando a la función OpenTok.generateToken(sessionId, options) método. Otra
forma es llamar a la generateToken(options) método de un objeto Session. El options
El parámetro es un objeto opcional que se utiliza para configurar el rol, el tiempo de caducidad y los datos de conexión del token.
Para el control del diseño en archivos y retransmisiones, también se puede configurar la lista inicial de clases de diseño de las transmisiones publicadas
desde conexiones que utilicen este token.
// Generate a Token from just a sessionId (fetched from a database)
token = opentok.generateToken(sessionId);
// Generate a Token from a session object (returned from createSession)
token = session.generateToken();
// Set some options in a Token
token = session.generateToken({
role: "moderator",
expireTime: new Date().getTime() / 1000 + 7 * 24 * 60 * 60, // in one week
data: "name=Johnny",
initialLayoutClassList: ["focus"],
});
Trabajar con archivos
Puedes iniciar la grabación de una sesión de OpenTok utilizando el OpenTok.startArchive(sessionId, options, callback) método. En options El parámetro es un objeto opcional que se utiliza para establecer el nombre
del archivo. La función de devolución de llamada tiene la firma function(err, archive). En archive Lo que se devuelve en
la función de llamada es una instancia de Archive. Ten en cuenta que solo puedes iniciar un archivo en una sesión con
clientes conectados.
opentok.startArchive(sessionId, { name: "Important Presentation" }, function (
err,
archive
) {
if (err) {
return console.log(err);
} else {
// The id property is useful to save off into a database
console.log("new archive:" + archive.id);
}
});
También puedes desactivar la grabación de audio o vídeo configurando la opción hasAudio o hasVideo propiedad de
la página options parámetro a false:
var archiveOptions = {
name: "Important Presentation",
hasVideo: false, // Record audio only
};
opentok.startArchive(sessionId, archiveOptions, function (err, archive) {
if (err) {
return console.log(err);
} else {
// The id property is useful to save to a database
console.log("new archive:" + archive.id);
}
});
De forma predeterminada, todas las secuencias se graban en un único archivo (compuesto). Puedes grabar las diferentes
secuencias de la sesión en archivos individuales (en lugar de en un único archivo compuesto) configurando el
outputMode opción de 'individual' cuando llamas al OpenTok.startArchive() método:
var archiveOptions = {
name: "Important Presentation",
outputMode: "individual",
};
opentok.startArchive(sessionId, archiveOptions, function (err, archive) {
if (err) {
return console.log(err);
} else {
// The id property is useful to save off into a database
console.log("new archive:" + archive.id);
}
});
Puede detener la grabación de un Archivo iniciado utilizando la tecla OpenTok.stopArchive(archiveId, callback)
método. También puedes hacerlo utilizando el Archive.stop(callback) método a Archive instancia. La
función de devolución de llamada tiene una firma function(err, archive). En archive Lo que se devuelve en la función de llamada de retorno es una
instancia de Archive.
opentok.stopArchive(archiveId, function (err, archive) {
if (err) return console.log(err);
console.log("Stopped archive:" + archive.id);
});
archive.stop(function (err, archive) {
if (err) return console.log(err);
});
Para obtener un Archive (y toda la información sobre ella) de una instancia de archiveId, utiliza el
OpenTok.getArchive(archiveId, callback) método. La llamada de retorno tiene una firma de función
function(err, archive). Para obtener más detalles, puedes consultar las propiedades del archivo.
opentok.getArchive(archiveId, function (err, archive) {
if (err) return console.log(err);
console.log(archive);
});
Para eliminar un archivo, puedes llamar a la función OpenTok.deleteArchive(archiveId, callback) método o el
delete(callback) método de un Archive instancia. La función de devolución de llamada tiene una firma function(err).
// Delete an Archive from an archiveId (fetched from database)
opentok.deleteArchive(archiveId, function (err) {
if (err) console.log(err);
});
// Delete an Archive from an Archive instance, returned from the OpenTok.startArchive(),
// OpenTok.getArchive(), or OpenTok.listArchives() methods
archive.delete(function (err) {
if (err) console.log(err);
});
También puede obtener una lista de todos los Archivos que ha creado (hasta 1000) con su Clave API. Para ello
utilizando la función OpenTok.listArchives(options, callback) método. El parámetro options es un
objeto opcional que se utiliza para especificar un offset y count para ayudarte a paginar los resultados.
La función de llamada tiene la siguiente sintaxis: function(err, archives, totalCount). En archives Lo que devuelve
la función de llamada es una matriz de Archive casos. El totalCount El valor devuelto por la función de devolución de llamada es
el número total de archivos que ha generado tu clave API.
opentok.listArchives({ offset: 100, count: 50 }, function (
error,
archives,
totalCount
) {
if (error) return console.log("error:", error);
console.log(totalCount + " archives");
for (var i = 0; i < archives.length; i++) {
console.log(archives[i].id);
}
});
Tenga en cuenta que también puede crear una sesión archivada automáticamente, pasando en 'always'
como el archiveMode opción al llamar a la OpenTok.createSession() método (véase «Creación de
sesiones», más arriba).
En el caso de los archivos compuestos, puede cambiar el diseño dinámicamente mediante la función
OpenTok.setArchiveLayout(archiveId, type, stylesheet, screenshareType, callback) método:
opentok.setArchiveLayout(archiveId, type, null, null, function (err) {
if (err) return console.log("error:", error);
});
Puedes establecer la clase de diseño inicial para las transmisiones de un cliente configurando el layout cuando
al crear el token para el cliente, utilizando la opción OpenTok.generateToken() método. Y puede
cambiar las clases de diseño de los flujos en una sesión llamando al método
OpenTok.setStreamClassLists(sessionId, classListArray, callback) método.
La configuración del diseño de los archivos compuestos es opcional. Por defecto, los archivos compuestos utilizan la disposición disposición "más adecuada" (véase Personalización del diseño de vídeo para composiciones archivos).
Para obtener más información sobre el archivado, consulta el Guía para desarrolladores sobre el archivado de OpenTok.
Trabajar con retransmisiones en directo
Importante: Solo sesiones de OpenTok enrutadas admiten retransmisiones en directo.
Para iniciar un retransmisión en directo
emisión de una sesión de OpenTok,
llama a la OpenTok.startBroadcast() método. Se le pasan tres parámetros: el ID de sesión correspondiente a la
sesión, las opciones de la retransmisión y una función de devolución de llamada:
var broadcastOptions = {
outputs: {
hls: {},
rtmp: [
{
id: "foo",
serverUrl: "rtmp://myfooserver/myfooapp",
streamName: "myfoostream",
},
{
id: "bar",
serverUrl: "rtmp://mybarserver/mybarapp",
streamName: "mybarstream",
},
],
},
maxDuration: 5400,
resolution: "640x480",
layout: {
type: "verticalPresentation",
},
};
opentok.startBroadcast(sessionId, broadcastOptions, function (
error,
broadcast
) {
if (error) {
return console.log(error);
}
return console.log("Broadcast started: ", broadcast.id);
});
Consulta la referencia de la API para obtener más información sobre el options parámetro.
Si la operación se realiza correctamente, se pasa un objeto `Broadcast` a la función de llamada de retorno como segundo parámetro.
El objeto `Broadcast` tiene propiedades que definen la difusión, entre ellas un broadcastUrls
que contiene las direcciones URL de los flujos de difusión. Consulte la referencia de la API para más detalles.
Llame al OpenTok.stopBroadcast() para detener una emisión en directo, introduzca el
ID de emisión (el id del objeto Broadcast) como primer parámetro. El segundo
es la función de devolución de llamada:
opentok.stopBroadcast(broadcastId, function (error, broadcast) {
if (error) {
return console.log(error);
}
return console.log("Broadcast stopped: ", broadcast.id);
});
También puede llamar al stop() método del objeto Broadcast para detener una emisión.
Llame al Opentok.getBroadcast() método, pasando un identificador de emisión, para obtener un objeto Broadcast.
También puede obtener una lista de todas las difusiones que ha creado (hasta 1000) con su clave API. Para ello
se realiza mediante la función OpenTok.listBroadcasts(options, callback) método. El parámetro options es un
objeto opcional que se utiliza para especificar un offset, county sessionId para ayudarte a paginar los resultados.
La función de llamada tiene la siguiente sintaxis: function(err, broadcasts, totalCount). En broadcasts Lo que devuelve
la función de llamada es una matriz de Broadcast casos. El totalCount El valor devuelto por la función de devolución de llamada es
el número total de difusiones que ha generado tu clave API.
opentok.listBroadcasts({ offset: 100, count: 50 }, function (
error,
broadcasts,
totalCount
) {
if (error) return console.log("error:", error);
console.log(totalCount + " broadcasts");
for (var i = 0; i < broadcasts.length; i++) {
console.log(broadcasts[i].id);
}
});
Para cambiar la disposición de la emisión, llame a la función OpenTok.setBroadcastLayout() método,
pasándole el ID de difusión y el diseño
tipo.
Puedes establecer la clase de diseño inicial para las transmisiones de un cliente configurando el layout cuando
al crear el token para el cliente, utilizando la opción OpenTok.generateToken() método. Y puede
cambiar las clases de diseño de los flujos en una sesión llamando al método
OpenTok.setStreamClassLists(sessionId, classListArray, callback) método.
Configurar el diseño de una retransmisión en directo es opcional. De forma predeterminada, las retransmisiones en directo utilizan el diseño «que mejor se adapta».
Envío de señales
Puedes enviar una señal a todos los participantes de una sesión de OpenTok llamando a la función
OpenTok.signal(sessionId, connectionId, payload, callback) método y configuración
el connectionId parámetro a null:
var sessionId =
"2_MX2xMDB-flR1ZSBOb3YgMTkgMTE6MDk6NTggUFNUIDIwMTN-MC2zNzQxNzIxNX2";
opentok.signal(sessionId, null, { type: "chat", data: "Hello!" }, function (
error
) {
if (error) return console.log("error:", error);
});
O bien, envía una señal a un participante concreto de la sesión llamando al
OpenTok.signal(sessionId, connectionId, payload, callback) y configurando todos los parámetros,
incluyendo connectionId:
var sessionId =
"2_MX2xMDB-flR1ZSBOb3YgMTkgMTE6MDk6NTggUFNUIDIwMTN-MC2zNzQxNzIxNX2";
var connectionId = "02e80876-02ab-47cd-8084-6ddc8887afbc";
opentok.signal(
sessionId,
connectionId,
{ type: "chat", data: "Hello!" },
function (error) {
if (error) return console.log("error:", error);
}
);
Este es el equivalente del lado del servidor al método signal() de los SDK de cliente de OpenTok. Véase Guía para desarrolladores de señalización de OpenTok.
Desconexión de participantes
Puedes desconectar a los participantes de una sesión de OpenTok utilizando el
OpenTok.forceDisconnect(sessionId, connectionId, callback) método.
opentok.forceDisconnect(sessionId, connectionId, function (error) {
if (error) return console.log("error:", error);
});
Este es el equivalente del lado del servidor al método forceDisconnect() de OpenTok.js: Guía de moderación de OpenTok.js.
Forzar a los clientes de una sesión a silenciar el audio publicado
Puede forzar al editor de un flujo específico a dejar de publicar audio utilizando la opción
Opentok.forceMuteStream(sessionId)método.
Puede forzar al editor de todos los flujos de una sesión (excepto una lista opcional de flujos)
para que deje de publicar audio mediante la opción Opentok.forceMuteAll() método.
A continuación, puedes desactivar el estado de silencio de la sesión llamando al
Opentok.disableForceMute() método.
Trabajar con la interconexión SIP
Puedes añadir un flujo de solo audio procedente de una pasarela SIP externa de terceros mediante la función «Interconexión SIP». Para ello, se necesita un URI SIP, el ID de sesión al que deseas añadir el flujo de solo audio y un token para conectarte a ese ID de sesión.
var options = {
from: "15551115555",
secure: true,
};
opentok.dial(sessionId, token, sipUri, options, function (error, sipCall) {
if (error) return console.log("error: ", error);
console.log(
"SIP audio stream Id: " +
sipCall.streamId +
" added to session ID: " +
sipCall.sessionId
);
});
Para más información, consulte el Guía para desarrolladores de OpenTok SIP Interconnect.
Obtener información sobre el flujo
Puedes obtener información sobre una transmisión activa en una sesión de OpenTok:
var sessionId =
"2_MX6xMDB-fjE1MzE3NjQ0MTM2NzZ-cHVTcUIra3JUa0kxUlhsVU55cTBYL0Y1flB";
var streamId = "2a84cd30-3a33-917f-9150-49e454e01572";
opentok.getStream(sessionId, streamId, function (error, streamInfo) {
if (error) {
console.log(error.message);
} else {
console.log(stream.id); // '2a84cd30-3a33-917f-9150-49e454e01572'
console.log(stream.videoType); // 'camera'
console.log(stream.name); // 'Bob'
console.log(stream.layoutClassList); // ['main']
}
});
Pasa un identificador de sesión, un identificador de flujo y una función de devolución de llamada a la OpenTok.getStream() método.
La función de devolución de llamada se ejecuta cuando finaliza la operación. Admite dos parámetros:
error (en caso de error) o stream. Una vez completado con éxito, el stream objeto
que contiene las propiedades del flujo.
Para obtener información sobre todos flujos activos en una sesión, llama a la función OpenTok.listStreams() método,
pasándole un ID de sesión y una función de devolución de llamada. Si la operación se realiza con éxito, se invoca la función de devolución de llamada
con un array de objetos Stream pasado como segundo parámetro:
opentok.listStreams(sessionId, function(error, streams) {
if (error) {
console.log(error.message);
} else {
streams.map(function(stream) {
console.log(stream.id); // '2a84cd30-3a33-917f-9150-49e454e01572'
console.log(stream.videoType); // 'camera'
console.log(stream.name); // 'Bob'
console.log(stream.layoutClassList); // ['main']
}));
}
});
Cómo trabajar con Audio Connector
Puedes iniciar un Conector de audio WebSocket
mediante la llamada a la función OpenTok.websocketConnect() método.
Requisitos
Necesitas una clave API y un secreto API de OpenTok, que puedes obtener iniciando sesión en tu Cuenta API de Video de Vonage.
El SDK de OpenTok para Node requiere Node.js 6 o una versión superior. Es posible que funcione en versiones anteriores, pero estas ya no se someten a pruebas.
Notas de publicación
Véase el Página de comunicados de prensa para obtener más información sobre cada lanzamiento.
Cambios importantes desde la versión 2.2.0
Cambios en la versión 2.2.3:
La configuración predeterminada para el createSession() El método consiste en crear una sesión con el modo multimedia configurado
en «relayed». En versiones anteriores del SDK, la configuración predeterminada era utilizar el OpenTok Media Router
(modo multimedia configurado en «routed»). En una sesión de retransmisión, los clientes intentarán enviar flujos directamente
entre ellos (punto a punto); si los clientes no pueden conectarse debido a restricciones del cortafuegos, la
sesión utiliza el servidor TURN de OpenTok para retransmitir los flujos de audio y vídeo.
Cambios en la versión 2.2.0:
Esta versión del SDK incluye compatibilidad para trabajar con archivos de OpenTok.
El createSession() El método ha cambiado y ahora admite un parámetro: un options objeto que tiene location
y mediaMode propiedades. El mediaMode La propiedad sustituye a la properties.p2p.preference
parámetro de la versión anterior del SDK.
El generateToken() ha cambiado para aceptar dos parámetros: el ID de sesión y un options objeto que tiene role, expireTime y data propiedades.