Migração da versão 2.0 da biblioteca OpenTok.js
O versão mais recente A biblioteca OpenTok.js inclui um conjunto de novos recursos que facilitam o desenvolvimento de aplicativos OpenTok. Este documento descreve as alterações que foram adicionadas na versão 2.2 (que também estão presentes na versão mais recente).
- Carregando a versão mais recente da biblioteca OpenTok.js
- Migração para a versão mais recente da biblioteca OpenTok.js
- Novidades da versão 2.2
Se você estiver migrando código da versão 1.0 para esta versão, consulte esta página.
Carregando a versão mais recente da biblioteca OpenTok.js
Para utilizar os novos recursos disponíveis na versão mais recente, defina o src atributo do script tag para carregar a nova biblioteca:
<script src="https://static.opentok.com/v2/js/opentok.min.js"></script>
Migração para a versão mais recente da biblioteca OpenTok.js
Importante: A versão mais recente da biblioteca OpenTok.js inclui alterações que não são compatíveis com o OpenTok.js 2.0. Esta seção mostra como adaptar o código existente para funcionar com a versão mais recente da biblioteca OpenTok.js.
O objeto OT
O objeto TB foi renomeado para OT (de OpenTok). Observe também que a URL da biblioteca OpenTok.js agora aponta para o arquivo opentok.min.js:
<script src="https://static.opentok.com/v2/js/opentok.min.js"></script>
No entanto, por uma questão de compatibilidade com versões anteriores, o objeto TB do JavaScript continuará funcionando, e a URL TB.min.js também continuará funcionando.
Conectando-se a uma sessão
Agora você deve inserir sua chave de API no OT.initSession() método (como primeiro parâmetro):
var session = OT.initSession(apiKey, sessionId);
session.connect(token, function(error) {
if (!error) {
var publisher OT.initPublisher();
session.publish(publisher);
}
});
Observe que o Session.connect() método e o OT.initPublisher() O método não aceita uma chave de API como parâmetro, já que você passa a chave de API para o OT.initSession() método. (No entanto, a sintaxe antiga ainda é compatível.)
Alterações que exigem atualização
Procuramos manter a compatibilidade com versões anteriores da biblioteca OpenTok.js 2.0. No entanto, algumas das alterações na API da versão mais recente do OpenTok.js exigem algumas modificações no código dos aplicativos portados a partir da biblioteca OpenTok.js 2.0.
Alterações nos eventos de stream para streams publicados pelo seu cliente
O objeto Session não realiza o despacho streamCreated eventos para transmissões ao vivo próprio o cliente publica. Para detectar quando um fluxo é criado para o seu Publisher, adicione um manipulador de conclusão para o Session.publish() método:
var publisher = session.publish(publisher, properties, function(error) {
if (error) {
console.log("Failed to publish.")
} else {
console.log("Stream publishing.")
}
})
O objeto Publisher também dispara um streamCreated evento para o stream que ele publica.
Além disso, na versão 2.2, o objeto Publisher (e não o objeto Session) despacha streamDestroyed eventos para o fluxo que ele publica. Se você quiser manter o Publisher no DOM HTML (para reutilização), chame o preventDefault() método no ouvinte de eventos para o streamDestroyed evento disparado pelo Publisher:
publisher = OT.initPublisher(apiKey)
.on("streamDestroyed", function(event) {
event.preventDefault(); // This lets you reuse the Publisher.
}
);
Chamando o preventDefault() método do streamDestroyed e sessionDisconnected Os objetos de evento despachados pelo objeto Session não impedem mais que o objeto Publisher seja removido (como acontecia na v2.0).
Para mais detalhes, consulte Alterações nos eventos de fluxo e conexão.
Detecção de fluxos e conexões iniciais em uma sessão
No OpenTok.js 2.2 ou superior, o connections e streams propriedade do sessionConnected Os eventos estão obsoletos e são definidos como matrizes vazias. O objeto Session despacha connectionCreated e streamCreated eventos para cada cliente e fluxo na sessão, tanto no momento da conexão quanto após a conexão.
Para verificar se havia outro cliente na sessão no momento em que você se conectou, compare o connection.creationTime propriedade do connectionCreated objeto de evento com o connection.creationTime propriedade do objeto Session:
session.on("connectionCreated", function(event) {
if (event.connection.creationTime <= session.connection.creationTime) {
console.log("Detected a client that connected before you.")
}
}
Para mais detalhes, consulte Alterações nos eventos de fluxo e conexão.
Alterações no método Session.signal()
No Session.signal() método, o data propriedade do signal O parâmetro deve ser uma string. (No OpenTok.js 2.0, o data (essa propriedade pode ser definida como qualquer objeto serializável em JSON.)
Além disso, o opcional to propriedade do signal O parâmetro recebe um único objeto Connection (que define a conexão para a qual o sinal será enviado). O to a propriedade não aceita um matriz de objetos Connection, assim como acontecia na biblioteca OpenTok.js 2.0.
Para enviar um sinal a vários clientes individuais conectados a uma sessão, chame a função signal() método repetidamente, passando um único objeto Connection como o to parâmetro a cada vez:
var connections;
// Set the connections object to an array of Connection objects corresponding to the clients you want to signal.
for (var i = 0; i < a.connections; i++) {
session.signal(
{
type: "foo",
to: connections[i],
data: "hello"
},
function(error) {
if (error) {
console.log("signal error: " + error.reason);
} else {
console.log("signal sent");
}
}
);
}
Outras alterações e novos recursos
Para saber mais sobre outras alterações e começar a aproveitar outros novos recursos, consulte Novidades da versão 2.2.
Novos recursos
Esta página descreve os recursos que foram adicionados na versão 2.2. Consulte a versão mais recente notas de lançamento para os recursos que foram adicionados desde então.
- Controle de qualidade inteligente—Agora é possível definir uma resolução e uma taxa de quadros recomendadas para uma transmissão publicada. Também é possível reduzir o uso de largura de banda da transmissão de vídeo de um assinante.
- Manipuladores de conclusão para métodos—Alguns métodos da versão mais recente da biblioteca OpenTok.js agora incluem um
completionHandlerparâmetro. Esse parâmetro é uma função que é chamada quando o método é executado com sucesso ou falha. - Novos métodos de inscrição em eventos—A versão mais recente da biblioteca OpenTok.js inclui novos métodos —
on(),once(), eoff()— para adicionar e remover ouvintes de eventos. - Alterações nos eventos de fluxo e conexão—A versão mais recente da biblioteca OpenTok.js inclui melhorias nos eventos relacionados a transmissões e à entrada e saída de clientes das sessões do OpenTok.
- APIs DOM do Publisher e do Subscriber—Existem novas APIs para a inserção e remoção de Publisher e Subscriber no DOM HTML.
- Nova propriedade Publisher.accessAllowed—O
accessAllowedEssa propriedade permite verificar se um cliente autorizou o acesso à câmera e ao microfone.
Controle de qualidade inteligente
A versão mais recente da biblioteca OpenTok.js traz novos recursos para definir a resolução de vídeo e a taxa de quadros recomendadas para uma transmissão publicada.
Para definir uma resolução de vídeo recomendada para uma transmissão publicada, defina o resolution propriedade do properties parâmetro que você passa para o OT.initPublisher() método:
var publisherProperties = {resolution: "1280x720"};
var publisher = OT.initPublisher(apiKey, targetElement, publisherProperties);
Isso resolution A propriedade é uma string que define a resolução desejada do vídeo. O formato da string é "widthxheight", em que a largura e a altura são representadas em pixels. Os valores válidos são "1280x720", "640x480", e "320x240".
A resolução solicitada para uma transmissão de vídeo é definida como a videoDimensions.width e videoDimensions.height propriedades do objeto Stream.
A resolução padrão para uma transmissão (caso você não especifique uma resolução) é de 640x480 pixels. Se o sistema do cliente não for compatível com a resolução solicitada, a transmissão utilizará a próxima configuração maior compatível.
Para definir uma taxa de quadros recomendada para uma transmissão publicada, defina o frameRate propriedade do properties parâmetro que você passa para o OT.initPublisher() método:
var publisherProperties = {frameRate: 7};
var publisher = OT.initPublisher(apiKey, targetElement, publisherProperties);
Defina o valor correspondente à taxa de quadros desejada, em quadros por segundo, do vídeo. Os valores válidos são 30, 15, 7 e 1.
Se o editor especificar uma taxa de quadros, a taxa de quadros real do fluxo de vídeo é definida como a frameRate propriedade do objeto Stream, embora a taxa de quadros real varie de acordo com as condições variáveis da rede e do sistema. Se o desenvolvedor não especificar uma taxa de quadros, essa propriedade fica indefinida.
Para sessões que utilizam o OpenTok Media Router (sessões com o modo de mídia (configurado como “routed”), diminuir a taxa de quadros ou a resolução reduz a largura de banda máxima que a transmissão pode utilizar. No entanto, em sessões que possuem o modo de mídia Se estiver configurado para retransmissão, reduzir a taxa de quadros ou a resolução pode não diminuir a largura de banda da transmissão.
Você também pode restringir a taxa de quadros do fluxo de vídeo de um assinante. Para restringir a taxa de quadros de um assinante, chame a função restrictFrameRate() método do assinante, passando true:
mySubscriber.restrictFrameRate(true);
Passe para false e a taxa de quadros do fluxo de vídeo não é limitada:
mySubscriber.restrictFrameRate(false);
Quando a taxa de quadros é limitada, o quadro de vídeo do Assinante será atualizado uma vez ou menos por segundo.
Esse recurso está disponível apenas nas sessões modo de mídia definido como “routed”, e não em sessões com o modo de mídia definido como “relayed”. Em sessões “relayed”, a chamada a este método não produz efeito.
A restrição da taxa de quadros do assinante traz os seguintes benefícios:
- Isso reduz o uso da CPU.
- Isso reduz a largura de banda da rede consumida pelo aplicativo.
- Isso permite que você assine mais canais simultaneamente.
A redução da taxa de quadros de um assinante não afeta a taxa de quadros do vídeo em outros clientes.
Por fim, em sessões que utilizam o OpenTok Media Router, um participante pode mudar para o modo somente áudio quando o OpenTok Media Router determinar que as condições de rede do cliente não suportam vídeo. Esse recurso estava disponível no OpenTok.js 2.0. Na versão mais recente da biblioteca OpenTok.js, se a conectividade de rede do cliente melhorar o suficiente para suportar vídeo, o cliente envia um videoEnabled evento, e o vídeo continua.
Manipuladores de conclusão para métodos
Alguns métodos da biblioteca OpenTok.js agora incluem um novo completionHandler parâmetro. Para esse parâmetro opcional, é possível passar uma função que será chamada caso o método seja bem-sucedido ou falhe.
Por exemplo, o connect() O método de um objeto Session agora inclui um parâmetro chamado completionHandler. Esse é o último parâmetro do método. Essa função recebe um parâmetro — error. Se for bem-sucedido, o completionHandler A função não recebe nenhum argumento. Em caso de erro, é passado à função um error parâmetro de objeto. O error O objeto possui duas propriedades: code (um número inteiro) e message (uma sequência de caracteres), que identifica a causa da falha. O código a seguir adiciona um completionHandler ao chamar o connect() método:
// Set apiKey and token to your API key and a token for the session.
session.connect(apiKey, token, function(error) {
if (error) {
console.log(error.message);
} else {
console.log("Connected to session.");
}
});
Observe que, ao se conectar à sessão, o objeto Session dispara um sessionConnected evento, além de chamar o completionHandler. No entanto, o completionHandler na nova biblioteca do OpenTok oferece uma maneira padronizada de verificar se uma chamada de método foi bem-sucedida ou falhou.
Cada um dos métodos a seguir inclui um completionHander parâmetro, como último parâmetro do método:
OT.initPublisher()Session.connect()Session.forceDisconnect()Session.forceUnpublish()Session.publish()Session.signal()Session.subscribe()
Verifique o message propriedade para obter mais detalhes sobre o erro.
Em caso de erro, o code valor do error O parâmetro é definido como um objeto Error. Para obter mais informações, consulte a documentação do OpenTok Classe de erro.
Novos métodos de inscrição em eventos
A biblioteca OpenTok.js agora inclui novos métodos — on(), once(), e off() — para adicionar e remover ouvintes de eventos. Esses métodos são adicionados a cada classe capaz de disparar um evento:
- Editora — on(), off(), uma vez()
- Sessão — on(), off(), uma vez()
- Assinante — on(), off(), uma vez()
- OT — on(), off(), uma vez()
O addEventListener() e removeEventListener() Esses métodos estão obsoletos. Eles foram substituídos pelos novos métodos. Os novos métodos apresentam as seguintes vantagens:
-
É possível adicionar ou remover vários manipuladores de eventos em uma única chamada para
on()ouoff().Por exemplo, o código a seguir adiciona ouvintes de eventos para o
accessAllowed,accessDenied, estreamDestroyedeventos de um objeto Publisher:Copiarpublisher.on({ accessAllowed: function (event) { // This is the handler for the accessAllowed event. }, accessDenied: function (event) { // This is the handler for accessDenied. } streamDestroyed: function (event) { // This is the handler for the streamDestroyed event. }, }); -
O
once()Esse método permite adicionar facilmente um ouvinte de evento que é chamado apenas uma vez. (É equivalente a chamaron()e, em seguida, chamaroff()na função do manipulador de eventos. -
Você pode usar o
contextparâmetro para definir o valor dethisno método do manipulador.
Alterações nos eventos de fluxo e conexão
A biblioteca OpenTok.js agora inclui uma série de melhorias nos eventos relacionados a transmissões e à entrada e saída de clientes de uma sessão.
Um item por StreamEvent ou ConnectionEvent
O ConnectionEvent classe, que define o connectionCreated e connectionDestroyed eventos, agora conta com um connection propriedade, que representa a única conexão criada ou destruída. A connections A propriedade (a partir da v2.0) está obsoleta.
Da mesma forma, o StreamEvent classe, que define o streamCreated e streamDestroyed eventos, tem um stream propriedade, que representa o único Stream criado ou destruído. O streams A propriedade (a partir da v2.0) está obsoleta.
Portanto, para detectar clientes e seus fluxos em uma sessão (na primeira conexão ou posteriormente), basta registrar ouvintes de eventos para o connectionCreated e streamCreated eventos disparados pelo objeto Session:
var connectionCount = 0;
session.on(
{
connectionCreated: function(event) {
connectionCount++;
console.log("New client: " event.connection.connectionId);
console.log("Clients in the session: " connectionCount);
},
connectionDestroyed: function(event) {
connectionCount--;
console.log("Client left the session: " event.connection.connectionId);
console.log("Clients in the session: " connectionCount);
},
streamCreated: function(event) {
console.log("Stream created: " event.stream.streamId);
// This is another client's stream, so you may want to subscribe to it.
},
streamDestroyed: function(event) {
console.log("Stream destroyed: " event.stream.streamId);
// This is another client's stream leaving the session.
}
}
).connect(apiKey, token, function(error) {
if (error) {
console.log("Failed to connect: " error.message);
}
});
Descontinuação do uso de fluxos e conexões a partir do evento `sessionConnected`
Na nova biblioteca OpenTok.js, o connections e streams propriedade do sessionConnected Os eventos estão obsoletos e são definidos como matrizes vazias. Na versão 2.2, o objeto Session dispacha connectionCreated e streamCreated eventos para cada cliente e fluxo na sessão, tanto no momento da conexão quanto após a conexão.
Para detectar outros clientes presentes em uma sessão no momento da conexão, compare o connection.creationTime propriedade do connectionCreated evento e compará-lo com o connection.creationTime propriedade do objeto Session:
session.on("connectionCreated", function(event) {
if (event.connection.creationTime <= session.connection.creationTime) {
console.log("Detected a client that connected before you.")
}
}
Você pode usar o manipulador de conclusão para o Session.connect() método em vez do sessionConnected evento (conforme mostrado no código de exemplo).
Alterações nos eventos das transmissões que você publica
Na nova biblioteca OpenTok.js, um objeto Publisher (e não o objeto Session) despacha streamCreated e streamDestroyed eventos para os streams que publica.
publisher = OT.initPublisher(apiKey)
.on(
{
streamCreated: function(event) {
// The Publisher started streaming.
},
streamDestroyed: function(event) {
// The Publisher stopped streaming.
}
}
);
O objeto Session não realiza o despacho streamCreated eventos para transmissões ao vivo próprio publicado pelo cliente. Portanto, não há necessidade de verificar se esse evento corresponde a um dos seus próprios fluxos publicados. Por exemplo, se você quiser se inscrever em todos os fluxos de terceiros na sessão, basta usar o seguinte código:
session.on("streamCreated", function(event) {
session.subscribe(event.stream);
},
}
Como preservar um objeto Publisher quando seu fluxo é destruído
Se você quiser manter o Publisher no DOM HTML (para reutilização), chame o preventDefault() método no ouvinte de eventos para o streamDestroyed evento disparado pelo Publisher:
publisher = OT.initPublisher(apiKey)
.on("streamDestroyed", function(event){
event.preventDefault(); // This lets you reuse the Publisher.
}
);
Chamando o preventDefault() método do sessionDisconnected O evento não faz mais com que um Publisher seja preservado.
APIs DOM do Publisher e do Subscriber
A biblioteca OpenTok.js agora inclui novas APIs para inserir e remover Publisher e Subscriber do DOM HTML.
O insertMode propriedade do properties parâmetro do OT.initPublisher() especifica como o objeto Publisher será inserido no DOM HTML, em relação ao targetElement parâmetro. É possível definir esse parâmetro com um dos seguintes valores:
"replace"— O objeto Publisher substitui o conteúdo do targetElement. Essa é a configuração padrão."after"— O objeto Publisher é um novo elemento inserido após o targetElement no DOM HTML. (Tanto o Publisher quanto o targetElement têm o mesmo elemento pai.)"before"— O objeto Publisher é um novo elemento inserido antes do targetElement no DOM HTML. (Tanto o Publisher quanto o targetElement têm o mesmo elemento pai.)"append"— O objeto Publisher é um novo elemento adicionado como filho do targetElement. Se houver outros elementos filhos, o Publisher é anexado como o último elemento filho do targetElement.
Por exemplo, o código a seguir adiciona um novo objeto Publisher como filho de um publisherContainer Elemento DOM:
var publisherProperties = {insertMode: "append"};
var publisher = OT.initPublisher('publisher', publisherContainer, function(error) {
if (error) {
console.log(error);
} else {
console.log("Publisher initialized.");
}
});
Cada objeto Publisher e Subscriber possui um element propriedade, que é definida como o elemento DOM HTML que contém o editor ou o assinante.
Cada objeto Publisher e Subscriber despacha um destroyed evento que ocorre quando o objeto é removido do DOM HTML. Em resposta a esse evento, você pode optar por ajustar (ou remover) os elementos do DOM relacionados ao editor ou assinante que foi removido.
Nova propriedade Publisher.accessAllowed
O novo accessAllowed Essa propriedade indica se um cliente concedeu acesso à câmera e ao microfone. Além disso, o Publisher ainda envia accessAllowed e accessDenied eventos, assim como na versão 2.0.