Migration von Version 1.0 der OpenTok.js-Bibliothek
Die neueste Version der OpenTok.js-Bibliothek verwendet WebRTC anstelle von Adobe Flash für die Audio- und Videokommunikation. Diese Anleitung unterstützt Sie bei der Migration Ihrer Website von Version 1.0 auf die neueste Version der OpenTok.js-Bibliothek.
Die neueste OpenTok.js-Bibliothek kommuniziert mit den Apps über die folgenden OpenTok-Bibliotheken:
Wenn Sie Code aus Version 2.0 migrieren, lesen Sie bitte diese Seite.
- Laden der neuesten OpenTok.js-Bibliothek
- Medienmodi für die Sitzungserstellung
- Umstellung auf die neueste OpenTok.js-Bibliothek
- Neue Funktionen
Laden der neuesten OpenTok.js-Bibliothek
Setzen Sie die src Attribut des script Fügen Sie den folgenden Tag in die URL ein, um die neueste Version der OpenTok.js-Bibliothek zu laden:
<script src="https://static.opentok.com/v2/js/opentok.min.js"></script>
Erstellung von Sitzungen und Medienmodi
Sie müssen neue Sitzungen erstellen, um diese in der neuen OpenTok.js-Bibliothek nutzen zu können. Sitzungen, die zuvor in OpenTok 1.0 verwendet wurden, können in der neuesten Version von OpenTok nicht mehr verwendet werden.
In Version 1.0 wurden Streams entweder direkt zwischen Clients (Peer-to-Peer) oder über den OpenTok Media Router übertragen. Wenn Sie eine Sitzung für Version 1.0 mithilfe eines der OpenTok-Server-SDKs erstellt haben, haben Sie eine p2p.preference Parameter zu "enabled" oder "disabled". In der neuesten Version von OpenTok hat sich dies geändert.
Wenn Sie nun eine Sitzung erstellen, legen Sie fest, wie die Teilnehmer der Sitzung Audio- und Videostreams senden sollen, was als Medienbetrieb. Es gibt zwei Möglichkeiten:
-
Weitergereicht — In einer weitergeleiteten Sitzung versuchen die Clients, Audio- und Videostreams direkt untereinander (Peer-to-Peer) zu übertragen. Wenn die Clients jedoch aufgrund von Firewall-Einschränkungen keine Verbindung herstellen können, nutzt die Sitzung den OpenTok-TURN-Server zur Weiterleitung der Audio- und Videostreams. (Vor Version 2.2 bezeichneten die OpenTok-Server-SDKs diese Sitzungen als Peer-to-Peer-Sitzungen. Doch selbst bei Verwendung dieser SDKs nutzen die Sitzungen weiterhin den OpenTok-TURN-Server zur Weiterleitung von Streams, wenn Firewall-Einschränkungen das Peer-to-Peer-Streaming blockieren.)
-
Geroutet — In der Sitzung wird der OpenTok Media Router verwendet, um Audio- und Videostreams zwischen den Clients weiterzuleiten. Die OpenTok Media Router bietet die folgenden Vorteile:
- Der OpenTok Media Router kann den Bandbreitenverbrauch in Mehrparteien-Sitzungen senken. (Wenn die Eigenschaft „media mode“ auf „relayed“ gesetzt ist, muss jeder Client einen separaten Audio-Video-Stream an jeden Client senden, der diesen abonniert hat.)
- Der OpenTok Media Router kann die Qualität des Nutzererlebnisses verbessern durch Audio-Fallback und Video-Wiederherstellung. Mit dieser Funktion wird das Video auf einem Client unterbrochen (ohne dass andere Clients davon betroffen sind), wenn sich die Verbindung des Clients so weit verschlechtert, dass sie die Wiedergabe eines abonnierten Videostreams nicht mehr unterstützt; der Client empfängt dann nur noch Audio. Verbessert sich die Verbindung des Clients wieder, wird das Video wieder angezeigt.
- Der OpenTok Media Router unterstützt die OpenTok 2.0 – Archivierungsfunktion, mit dem Sie OpenTok-Sitzungen aufzeichnen, speichern und abrufen können.
Anmerkung: In den neuen Versionen der OpenTok-Server-SDKs ist der Standard-Medienmodus „Relayed“. (In früheren Versionen war standardmäßig der OpenTok Media Router eingestellt.)
<script src="https://static.opentok.com/v2/js/opentok.min.js"></script>
Umstellung auf die neueste Version der OpenTok.js-Bibliothek
Das ist wichtig: Die neueste OpenTok.js-Bibliothek enthält Änderungen, die nicht mit OpenTok.js 1.0 kompatibel sind. In diesem Abschnitt erfahren Sie, wie Sie bestehenden Code anpassen können, damit er mit der neuesten OpenTok.js-Bibliothek funktioniert.
Entfernte API
Die folgenden Klassen, Eigenschaften, Methoden und Ereignisse aus Version 1.0 sind in der aktuellen Version von OpenTok.js nicht enthalten.
Camera |
Ersetzt durch den videoSource Eigenschaft der properties Parameter des OT.initPublisher() Methode. |
Capabilities.publishH264 |
Nicht in OpenTok.js Version 2. WebRTC unterstützt keine h.264-Videos. |
Connection.quality |
Nicht in OpenTok.js Version 2. |
DeviceEvent |
Nicht in OpenTok.js Version 2. |
DeviceManager |
Siehe die videoSource Parameter des properties Parameter des OT.initPublisher() Methode. |
DevicePanel |
Siehe die videoSource und audioSource Eigenschaften der properties Parameter des OT.initPublisher() Methode. |
DeviceStatusEvent |
Nicht in OpenTok.js Version 2. |
IssueReportedEvent |
Nicht in OpenTok.js Version 2. |
Microphone |
Ersetzt durch den audioSource Eigenschaft der properties Parameter von OT.initPublisher(). |
Publisher.replaceElementId |
Ersetzt durch den Publisher.element Eigentum. |
Publisher.detectDevices() |
Ersetzt durch OT.getDevices(). |
Publisher.detectMicActivity() |
Die Audio-Level-API wird in Kürze in Version 2 verfügbar sein. |
Publisher.disableMicrophone() |
Ersetzt durch Publisher.publishAudio(false). |
Publisher.enableMicrophone() |
Ersetzt durch Publisher.publishAudio(true). |
Publisher.getEchoCancelationMode() |
Gilt nicht für OpenTok.js Version 2, die über eine integrierte Echounterdrückung verfügt. |
Publisher.getMicrophoneGain() |
Nicht in OpenTok.js Version 2. |
Publisher.setCamera() |
Ersetzt durch das videoSource Eigenschaft der properties parameter of `OT.initPublisher()`. |
Publisher.setMicrophone() |
Ersetzt durch das audioSource Eigenschaft der properties parameter of `OT.initPublisher()`. |
Publisher.setMicrophoneGain() |
Nicht in OpenTok.js Version 2. |
Publisher deviceInactive Veranstaltung |
Nicht in OpenTok.js Version 2. |
Publisher devicesDetected Veranstaltung |
Ersetzt durch OT.getDevices(). |
Publisher echoCancellationModeChanged Veranstaltung |
Gilt nicht für OpenTok.js Version 2, die über eine integrierte Echounterdrückung verfügt. |
Publisher invalidDeviceName Veranstaltung |
Wird durch einen Fehler ersetzt, wenn Sie OT.initPublisher() und eine ungültige Angabe machen videoSource Eigenschaft der properties Parameter. |
Publisher microphoneActivityLevel Veranstaltung |
Eine Ersatz-API wird in Kürze verfügbar sein. |
Publisher microphoneGainChanged Veranstaltung |
Gilt nicht für OpenTok.js Version 2. |
Publisher resize Veranstaltung |
Gilt nicht für OpenTok.js Version 2. |
Publisher settingsButtonClick Veranstaltung |
Gilt nicht für OpenTok.js Version 2. |
ResizeEvent |
Gilt nicht für OpenTok.js Version 2. |
Session.cleanUp() |
Nicht in OpenTok.js Version 2. |
Session.subscribe() properties.audioEnabled |
Ersetzt durch Session.subscribe() properties.subscribeToAudio. |
Session.subscribe() properties.wMode |
Gilt nicht für OpenTok.js Version 2. |
Session microphoneLevelChanged Veranstaltung |
Nicht in OpenTok.js Version 2. |
Session signalReceived Veranstaltung |
Ersetzen Sie dies durch das Session signal Veranstaltung. |
SignalEvent.fromConnection |
Umbenannt in SignalEvent.from. |
Stream.quality |
Nicht in OpenTok.js Version 2. |
StateManager |
Nicht in OpenTok.js Version 2. |
Stream.type |
Gilt nicht für OpenTok Version 2. |
Subscriber.disableAudio() |
Ersetzt durch Subscriber.subscribeToAudio(false). |
Subscriber.enableAudio() |
Ersetzt durch Subscriber.subscribeToAudio(true). |
TB.initDeviceManager() |
Ersetzt durch OT.getDevices(). |
TB.initPublisher() properties.cameraName |
Ersetzt durch TB.initPublisher() properties.videoSource. |
TB.initPublisher() properties.encodedHeight |
Ersetzt durch TB.initPublisher() properties.resolution. |
TB.initPublisher() properties.encodedWidth |
Ersetzt durch TB.initPublisher() properties.resolution. |
TB.initPublisher() properties.microphoneEnabled |
Ersetzt durch TB.initPublisher() properties.publishAudio. |
TB.initPublisher() properties.microphoneGain |
Nicht in OpenTok Version 2. |
TB.initPublisher() properties.microphoneName |
Ersetzt durch TB.initPublisher() properties.audioSource. |
TB.initPublisher() properties.rememberDeviceAccess |
Gilt nicht für OpenTok Version 2. |
TB.initPublisher() properties.reportMicLevels |
In Kürze wird eine neue API für OpenTok Version 2 verfügbar sein. |
TB.initPublisher() properties.style.showMicButton |
Nicht in OpenTok Version 2. |
TB.initPublisher() properties.style.showSettingsButton |
Gilt nicht für OpenTok Version 2. |
TB.initPublisher() properties.wmode |
Gilt nicht für OpenTok Version 2. |
TB.reportIssue() |
Nicht in OpenTok Version 2. |
TB issueReported Veranstaltung |
Nicht in OpenTok Version 2. |
Abgelehnt
ConnectionEvent.connections |
Ersetzt durch den ConnectionEvent.connection Eigenschaft. Siehe Änderungen an Stream- und Verbindungsereignissen. |
TB |
Dies wurde in OT (für OpenTok) umbenannt. Siehe Das OT-Objekt. |
SessionConnectEvent |
Verwenden Sie den Abschluss-Handler für die Session.connect() Methode. Siehe Abschluss-Handler für Methoden. |
StreamEvent.streams |
Ersetzt durch den StreamEvent.stream Eigenschaft. Siehe Änderungen an Stream- und Verbindungsereignissen. |
Das OT-Objekt
Das TB-Objekt wurde in OT (für OpenTok) umbenannt. Beachten Sie außerdem, dass die URL für die OpenTok.js-Bibliothek nun auf die Datei „opentok.min.js“ verweist:
<script src="https://static.opentok.com/v2/js/opentok.min.js"></script>
Aus Gründen der Abwärtskompatibilität funktioniert das JavaScript-TB-Objekt jedoch weiterhin, und auch die URL „TB.min.js“ ist nach wie vor gültig.
Verbinden mit einer Sitzung
In der neuesten Version der OpenTok.js-Bibliothek übergeben Sie Ihren API-Schlüssel an die OT.initSession() Methode (als erster Parameter):
var session = OT.initSession(apiKey, sessionId);
session.connect(token, function(error) {
if (!error) {
var publisher OT.initPublisher();
session.publish(publisher);
}
});
Beachten Sie, dass die Session.connect() Methode und die OT.initPublisher() Die Methode nimmt keinen API-Schlüssel als Parameter entgegen, da Sie den API-Schlüssel an die OT.initSession() Methode. (Die alte Syntax wird jedoch weiterhin unterstützt.)
Wechselnde Änderungen
Wir haben uns bemüht, die Abwärtskompatibilität mit Version 1.0 der OpenTok-JavaScript-Bibliothek zu gewährleisten. Einige der API-Änderungen erfordern jedoch gewisse Codeanpassungen bei Apps, die von Version 1.0 portiert wurden.
Änderungen bei der Übertragung von Ereignissen für von Ihrem Client veröffentlichte Streams
Das Session-Objekt führt keine Weiterleitung durch streamCreated Ereignisse für Streams, Ihre eigene Client veröffentlicht. Um zu erkennen, wann ein Stream für Ihren Publisher erstellt wird, fügen Sie einen Abschluss-Handler für den Session.publish() Methode:
var publisher = session.publish(publisher, properties, function(error) {
if (error) {
console.log("Failed to publish.")
} else {
console.log("Stream publishing.")
}
})
Das Publisher-Objekt löst außerdem ein streamCreated Ereignis für den von ihm veröffentlichten Stream.
Zudem leitet nun das Publisher-Objekt (nicht das Session-Objekt) Folgendes weiter: streamDestroyed Ereignisse für den von ihm veröffentlichten Stream. Wenn Sie den Publisher im HTML-DOM beibehalten möchten (zur Wiederverwendung), rufen Sie die preventDefault() Methode im Ereignis-Listener für die streamDestroyed Vom Publisher ausgelöstes Ereignis:
publisher = OT.initPublisher(apiKey)
.on("streamDestroyed", function(event) {
event.preventDefault(); // This lets you reuse the Publisher.
}
);
Aufrufen der preventDefault() Methode der streamDestroyed und sessionDisconnected Ereignisobjekte, die vom Session-Objekt ausgelöst werden, verhindern nicht mehr, dass das Publisher-Objekt entfernt wird (wie es noch in Version 1.0 der Fall war).
Für weitere Einzelheiten siehe Änderungen an Stream- und Verbindungsereignissen.
Erkennung von ersten Datenströmen und Verbindungen in einer Sitzung
In der aktuellen OpenTok.js-Bibliothek ist die connections und streams Eigenschaft der sessionConnected Ereignisse sind veraltet und werden auf leere Arrays gesetzt. Das Session-Objekt löst connectionCreated und streamCreated Ereignisse für jeden Client und jeden Stream in der Sitzung, sowohl beim Herstellen der Verbindung als auch danach.
Um festzustellen, ob sich zum Zeitpunkt Ihrer Verbindung bereits ein anderer Client in der Sitzung befand, vergleichen Sie die connection.creationTime Eigenschaft der connectionCreated Ereignisobjekt mit dem connection.creationTime Eigenschaft des Session-Objekts:
session.on("connectionCreated", function(event) {
if (event.connection.creationTime <= session.connection.creationTime) {
console.log("Detected a client that connected before you.")
}
}
Für weitere Einzelheiten siehe Änderungen an Stream- und Verbindungsereignissen.
Verbesserte Signalisierungs-API
In Version 1.0 wurde die Session.signal() Die Methode sendet lediglich einen Ping an alle mit der Sitzung verbundenen Clients. Die neueste Version der OpenTok.js-Bibliothek führt eine neue Signalisierungs-API mit erweiterten Funktionen ein. Sie können nun eine Datenzeichenfolge in das Signal einfügen und die gesamte Sitzung oder bestimmte mit der Sitzung verbundene Clients ansprechen. Weitere Informationen finden Sie im JavaScript-Dokument Tutorial zum Thema Signalisierung.
Weitere Änderungen und neue Funktionen
Um mehr über weitere Änderungen zu erfahren und die neuen Funktionen zu nutzen, lesen Sie bitte Neue Funktionen.
Neue Funktionen
- Intelligente Qualitätskontrolle—Sie können nun eine empfohlene Videoauflösung und Bildrate für einen veröffentlichten Stream festlegen. Außerdem können Sie die Bandbreitennutzung des Videostreams eines Abonnenten reduzieren.
- Abschluss-Handler für Methoden—Einige Methoden in der OpenTok.js-Bibliothek enthalten nun eine zusätzliche
completionHandlerParameter. Dieser Parameter ist eine Funktion, die aufgerufen wird, wenn die Methode erfolgreich ist oder fehlschlägt. - Neue Verfahren zur Anmeldung zu Veranstaltungen—Die neueste Version der OpenTok.js-Bibliothek enthält neue Methoden —
on(),once()undoff()— zum Hinzufügen und Entfernen von Ereignis-Listenern. - Änderungen an Stream- und Verbindungsereignissen—Die OpenTok.js-Bibliothek enthält Verbesserungen bei Ereignissen im Zusammenhang mit Streams sowie beim Beitritt und Austritt von Clients aus OpenTok-Sitzungen.
- Publisher- und Subscriber-DOM-APIs—Es gibt neue APIs für das Einfügen und Entfernen von Publishern und Subscribern in das bzw. aus dem HTML-DOM.
- Neue Eigenschaft „Publisher.accessAllowed“—Das
accessAllowedAnhand dieser Eigenschaft können Sie erkennen, ob ein Kunde den Zugriff auf die Kamera und das Mikrofon freigegeben hat.
Neue API
ArchiveEvent |
Siehe Archivierung. |
ConnectionEvent.connection |
Siehe Änderungen an Stream- und Verbindungsereignissen. |
OT |
Siehe Das OT-Objekt. |
OT.initPublisher() properties.audioSource |
Siehe Einstellung der vom Herausgeber verwendeten Kamera und des Mikrofons. |
OT.initPublisher() properties.frameRate |
Siehe Intelligente Qualitätskontrolle. |
OT.initPublisher() properties.insertMode |
Siehe Publisher- und Subscriber-DOM-APIs. |
OT.initPublisher() properties.resolution |
Siehe Intelligente Qualitätskontrolle. |
OT.initPublisher() properties.videoSource |
Siehe Einstellung der vom Herausgeber verwendeten Kamera und des Mikrofons. |
Publisher.accessAllowed |
Siehe Neue Eigenschaft „Publisher.accessAllowed“. |
Publisher.element |
Siehe Publisher- und Subscriber-DOM-APIs. |
Publisher.id |
Siehe Publisher- und Subscriber-DOM-APIs. |
Publisher.stream |
Siehe die Herausgeber Klassenreferenz. |
Publisher destroyed Veranstaltung |
Siehe Publisher- und Subscriber-DOM-APIs. |
Publisher streamCreated Veranstaltung |
Siehe Änderungen an Stream- und Verbindungsereignissen. |
Publisher streamDestroyed Veranstaltung |
Siehe Änderungen an Stream- und Verbindungsereignissen. |
Session.subscribe() properties.insertMode |
Siehe Publisher- und Subscriber-DOM-APIs. |
Session archiveStarted Veranstaltung |
Siehe Archivierung. |
Session archiveStopped Veranstaltung |
Siehe Archivierung. |
Session signal Veranstaltung |
Siehe Signalisierung. |
Session signal:type Veranstaltung |
Siehe Signalisierung. |
SignalEvent.from |
Siehe Signalisierung. |
SignalEvent.data |
Siehe Signalisierung. |
Stream.frameRate |
Siehe Intelligente Qualitätskontrolle. |
Stream.videoDimensions |
Siehe Intelligente Qualitätskontrolle. |
StreamEvent.stream |
Siehe Änderungen an Stream- und Verbindungsereignissen. |
Subscriber.element |
Siehe Publisher- und Subscriber-DOM-APIs. |
Intelligente Qualitätskontrolle
Die neueste Version der OpenTok.js-Bibliothek bietet nun Funktionen zur Festlegung der empfohlenen Videoauflösung und Bildrate für einen veröffentlichten Stream.
Um eine empfohlene Videoauflösung für einen veröffentlichten Stream festzulegen, setzen Sie die resolution Eigenschaft der properties Parameter, den Sie an die OT.initPublisher() Methode:
var publisherProperties = {resolution: "1280x720"};
var publisher = OT.initPublisher(apiKey, targetElement, publisherProperties);
Diese resolution ist ein String, der die gewünschte Auflösung des Videos angibt. Das Format des Strings ist "widthxheight"wobei die Breite und Höhe in Pixeln angegeben werden. Gültige Werte sind "1280x720", "640x480"und "320x240".
Die gewünschte Auflösung eines Videostreams wird als videoDimensions.width und videoDimensions.height Eigenschaften des Stream-Objekts.
Die Standardauflösung für einen Stream (sofern Sie keine Auflösung angeben) beträgt 640 × 480 Pixel. Wenn das Client-System die von Ihnen angeforderte Auflösung nicht unterstützt, verwendet der Stream die nächsthöhere unterstützte Einstellung.
Um eine empfohlene Bildrate für einen veröffentlichten Stream festzulegen, setzen Sie die frameRate Eigenschaft der properties Parameter, den Sie an die OT.initPublisher() Methode:
var publisherProperties = {frameRate: 7};
var publisher = OT.initPublisher(apiKey, targetElement, publisherProperties);
Stellen Sie den Wert auf die gewünschte Bildrate des Videos in Bildern pro Sekunde ein. Gültige Werte sind 30, 15, 7 und 1.
Wenn der Herausgeber eine Bildrate angibt, wird die tatsächliche Bildrate des Video-Streams als frameRate Eigenschaft des Stream-Objekts, wobei die tatsächliche Bildrate je nach den jeweiligen Netzwerk- und Systembedingungen variieren kann. Wenn der Entwickler keine Bildrate angibt, ist diese Eigenschaft undefiniert.
Für Sitzungen, bei denen der OpenTok Media Router verwendet wird (Sitzungen mit dem Medienbetrieb (auf „geroutet“ eingestellt), eine Verringerung der Bildrate oder der Auflösung reduziert die maximale Bandbreite, die der Stream nutzen kann. In Sitzungen, bei denen die Medienbetrieb Wenn die Einstellung auf „Relayed“ gesetzt ist, führt eine Verringerung der Bildrate oder der Auflösung möglicherweise nicht zu einer Reduzierung der Bandbreite des Streams.
Sie können außerdem die Bildrate des Videostreams eines Abonnenten begrenzen. Um die Bildrate eines Abonnenten zu begrenzen, rufen Sie die restrictFrameRate() Methode des Teilnehmers, wobei true:
mySubscriber.restrictFrameRate(true);
Einreichen false und die Bildrate des Videostreams ist nicht begrenzt:
mySubscriber.restrictFrameRate(false);
Wenn die Bildrate eingeschränkt ist, wird das Videobild des Teilnehmers einmal oder weniger pro Sekunde aktualisiert.
Diese Funktion ist nur in Sitzungen verfügbar. Medienbetrieb auf „routed“ gesetzt sein; dies gilt nicht für Sitzungen, bei denen der Medienmodus auf „relayed“ gesetzt ist. In „relayed“-Sitzungen hat der Aufruf dieser Methode keine Auswirkung.
Die Begrenzung der Teilnehmerbildrate hat folgende Vorteile:
- Es reduziert die CPU-Nutzung.
- Dadurch wird die von der Anwendung verbrauchte Netzwerkbandbreite reduziert.
- Damit können Sie mehrere Streams gleichzeitig abonnieren.
Die Reduzierung der Bildrate eines Teilnehmers hat keine Auswirkungen auf die Bildrate des Videos in anderen Clients.
Schließlich kann ein Teilnehmer in Sitzungen, die den OpenTok Media Router nutzen, auf reinen Audiobetrieb umschalten, wenn der OpenTok Media Router feststellt, dass die Netzwerkbedingungen des Clients keine Videoübertragung zulassen. Diese Funktion war in OpenTok.js 1.0 nicht verfügbar. In der neuesten OpenTok-Bibliothek sendet der Client, sobald sich die Netzwerkverbindung des Clients so weit verbessert hat, dass Video unterstützt wird, ein videoEnabled Ereignis, und das Video wird fortgesetzt.
Abschluss-Handler für Methoden
Einige Methoden in der OpenTok.js-Bibliothek enthalten nun eine neue completionHandler Parameter. Für diesen optionalen Parameter können Sie eine Funktion übergeben, die aufgerufen wird, wenn die Methode erfolgreich ist oder fehlschlägt.
Zum Beispiel die connect() Die Methode eines Session-Objekts enthält nun einen Parameter namens „completionHandler“. Dies ist der letzte Parameter der Methode. Diese Funktion nimmt einen Parameter entgegen — error. Bei Erfolg wird die completionHandler Der Funktion werden keine Argumente übergeben. Im Fehlerfall wird der Funktion ein error Objektparameter. Der error Das Objekt hat zwei Eigenschaften: code (eine ganze Zahl) und message (eine Zeichenkette), die die Ursache des Fehlers angibt. Der folgende Code fügt eine completionHandler beim Aufruf der connect() Methode:
// 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.");
}
});
Beachten Sie, dass das Session-Objekt beim Herstellen der Verbindung zur Sitzung eine sessionConnected Ereignis zusätzlich zum Aufruf der completionHandler. Allerdings ist die completionHandler In der OpenTok.js-Bibliothek gibt es eine Standardmethode, um zu prüfen, ob ein Methodenaufruf erfolgreich war oder fehlgeschlagen ist.
Die folgenden Methoden enthalten jeweils eine completionHander Parameter als letzten Parameter der Methode:
OT.initPublisher()Session.connect()Session.forceDisconnect()Session.forceUnpublish()Session.publish()Session.signal()Session.subscribe()
Prüfen Sie die message Eigenschaft für weitere Details über den Fehler.
Im Falle eines Fehlers wird die code Wert des error Der Parameter ist auf ein Error-Objekt gesetzt. Weitere Informationen finden Sie in der Dokumentation zu OpenTok. Fehlerklasse.
Neue Verfahren zur Anmeldung zu Veranstaltungen
Die OpenTok.js-Bibliothek enthält nun neue Methoden — on(), once()und off() — zum Hinzufügen und Entfernen von Ereignis-Listenern. Diese Methoden werden jeder Klasse hinzugefügt, die ein Ereignis auslösen kann:
- Verlag — on(), off(), einmal()
- Sitzung — on(), off(), einmal()
- Abonnent — on(), off(), einmal()
- OT — on(), off(), einmal()
Die addEventListener() und removeEventListener() Die bisherigen Methoden sind veraltet. Sie werden durch die neuen Methoden ersetzt. Die neuen Methoden bieten folgende Vorteile:
-
Sie können mehrere Ereignisbehandler in einem einzigen Aufruf von
on()oderoff().Der folgende Code fügt beispielsweise Ereignis-Listener für das
accessAllowed,accessDeniedundstreamDestroyedEreignisse für ein Publisher-Objekt:Kopierenpublisher.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. }, }); -
Die
once()Mit dieser Methode können Sie ganz einfach einen Ereignis-Listener hinzufügen, der nur einmal aufgerufen wird. (Dies entspricht dem Aufruf vonon()und anschließend den Aufrufoff()in der Ereignisbehandlungsfunktion. -
Sie können die
contextParameter zum Festlegen des Werts vonthisin der Handler-Methode.
Änderungen an Stream- und Verbindungsereignissen
Die OpenTok.js-Bibliothek bietet nun eine Reihe von Verbesserungen bei Ereignissen im Zusammenhang mit Streams sowie beim Hinzufügen und Verlassen einer Sitzung durch Clients.
Ein Eintrag pro StreamEvent oder ConnectionEvent
In der neuesten Version der OpenTok.js-Bibliothek ist die ConnectionEvent Klasse, die die connectionCreated und connectionDestroyed Veranstaltungen, hat eine connection Eigenschaft, die die einzelne erstellte oder gelöschte Verbindung darstellt. Die connections Die Eigenschaft (ab Version 1.0) ist veraltet.
Ähnlich verhält es sich mit der StreamEvent Klasse, die die streamCreated und streamDestroyed Veranstaltungen, hat eine stream Eigenschaft, die den einzelnen erstellten oder gelöschten Stream repräsentiert. Die streams Die Eigenschaft (ab Version 1.0) ist veraltet.
Um also andere Clients und deren Streams in einer Sitzung zu erkennen (sei es bei der ersten Verbindung oder später), registrieren Sie einfach Ereignis-Listener für die connectionCreated und streamCreated Vom Session-Objekt ausgelöste Ereignisse:
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);
} else {
connectionCount++;
}
});
Streams und Verbindungen aus dem „sessionConnected“-Ereignis werden nicht mehr unterstützt
In Version 2 der OpenTok.js-Bibliothek ist die connections und streams Eigenschaft der sessionConnected Ereignisse sind veraltet und werden auf leere Arrays gesetzt. In Version 2 löst das Session-Objekt connectionCreated und streamCreated Ereignisse für jeden Client und jeden Stream in der Sitzung, sowohl beim Herstellen der Verbindung als auch danach.
Um bei der Verbindung andere Clients zu erkennen, die sich bereits in einer Sitzung befinden, vergleichen Sie die connection.creationTime Eigenschaft der connectionCreated Ereignis und vergleiche es mit dem connection.creationTime Eigenschaft des Session-Objekts:
session.on("connectionCreated", function(event) {
if (event.connection.creationTime <= session.connection.creationTime) {
console.log("Detected a client that connected before you.")
}
}
Sie können den Abschluss-Handler für die Session.connect() Methode anstelle der sessionConnected Ereignis (wie im Beispielcode gezeigt).
Änderungen an Ereignissen für von Ihnen veröffentlichte Streams
In Version 2 der OpenTok.js-Bibliothek wird die Übertragung von einem Publisher-Objekt (nicht vom Session-Objekt) ausgelöst streamCreated und streamDestroyed Ereignisse für die von ihr veröffentlichten Streams.
publisher = OT.initPublisher(apiKey)
.on(
{
streamCreated: function(event) {
// The Publisher started streaming.
},
streamDestroyed: function(event) {
// The Publisher stopped streaming.
}
}
);
Das Session-Objekt führt keine Weiterleitung durch streamCreated Ereignisse für Streams, Ihre eigene der Client veröffentlicht. Es ist also nicht erforderlich zu prüfen, ob dieses Ereignis einem Ihrer eigenen veröffentlichten Streams entspricht. Wenn Sie beispielsweise alle Streams von Drittanbietern in der Sitzung abonnieren möchten, können Sie einfach den folgenden Code verwenden:
session.on("streamCreated", function(event) {
session.subscribe(event.stream);
},
}
Ein Publisher-Objekt beibehalten, wenn dessen Stream zerstört wird
Wenn Sie den Publisher im HTML-DOM beibehalten möchten (zur Wiederverwendung), rufen Sie die preventDefault() Methode im Ereignis-Listener für die streamDestroyed Vom Publisher ausgelöstes Ereignis:
publisher = OT.initPublisher(apiKey)
.on("streamDestroyed", function(event){
event.preventDefault(); // This lets you reuse the Publisher.
}
);
Aufrufen der preventDefault() Methode der sessionDisconnected Dieses Ereignis führt nicht mehr dazu, dass ein Publisher beibehalten wird.
Publisher- und Subscriber-DOM-APIs
Version 2 der OpenTok.js-Bibliothek enthält neue APIs zum Einfügen und Entfernen von Publishern und Subscribern in das bzw. aus dem HTML-DOM.
Die insertMode Eigenschaft der properties Parameter des OT.initPublisher() legt fest, wie das Publisher-Objekt in das HTML-DOM eingefügt wird, im Verhältnis zum targetElement Parameter. Sie können diesen Parameter auf einen der folgenden Werte einstellen:
"replace"- Das Publisher-Objekt ersetzt den Inhalt des targetElements. Dies ist der Standard."after"- Das Publisher-Objekt ist ein neues Element, das nach dem targetElement im HTML-DOM eingefügt wird. (Publisher und targetElement haben beide dasselbe Elternelement)."before"- Das Publisher-Objekt ist ein neues Element, das vor dem targetElement im HTML-DOM eingefügt wird. (Publisher und targetElement haben beide dasselbe Elternelement)."append"- Das Publisher-Objekt ist ein neues Element, das als untergeordnetes Element des targetElements hinzugefügt wird. Wenn es weitere untergeordnete Elemente gibt, wird der Publisher als letztes untergeordnetes Element des targetElements angefügt.
Der folgende Code fügt zum Beispiel ein neues Publisher-Objekt als Kind einer publisherContainer DOM-Element:
var publisherProperties = {insertMode: "append"};
var publisher = OT.initPublisher('publisher', publisherContainer, function(error) {
if (error) {
console.log(error);
} else {
console.log("Publisher initialized.");
}
});
Jedes Publisher- und Subscriber-Objekt verfügt über ein element Eigenschaft, die auf das HTML-DOM-Element gesetzt ist, das den Publisher oder Subscriber enthält.
Jedes Publisher- und Subscriber-Objekt sendet ein destroyed Ereignis, das ausgelöst wird, wenn das Objekt aus dem HTML-DOM entfernt wurde. Als Reaktion auf dieses Ereignis können Sie DOM-Elemente, die mit dem entfernten Publisher oder Subscriber in Verbindung stehen, anpassen (oder entfernen).
Neue Eigenschaft „Publisher.accessAllowed“
Das neue accessAllowed Diese Eigenschaft gibt an, ob ein Client den Zugriff auf die Kamera und das Mikrofon gewährt hat. Darüber hinaus sendet der Publisher weiterhin accessAllowed und accessDenied Ereignisse, so wie es in Version 1.0 der Fall war.