Veröffentlichen: Diagnostik
In diesem Leitfaden erfahren Sie, wie Sie Diagnosen für Verlage erstellen und häufige Probleme beheben können.
Abrufen von Statistiken über den Stream eines Verlegers
Die Publisher.getStats() Methode liefert Ihnen ein Array von Objekten, die die aktuellen Audio-Video-Statistiken für den Publisher definieren. Für einen Herausgeber in einer gerouteten Sitzung (eine, die den Media Router verwendet), enthält dieses Array ein Objekt, das die Statistiken für den einzelnen Audio-Media-Stream definiert, der an den OpenTok Media Router gesendet wird. In einer weitergeleiteten Sitzung enthält das Array ein Objekt für jeden Abonnenten des veröffentlichten Streams. Jedes Objekt im Array enthält eine stats die die folgenden Eigenschaften enthält:
- Die Gesamtzahl der gesendeten Audio- und Videopakete
- Die Gesamtzahl der verlorenen Audio- und Videopakete
- Die Gesamtzahl der gesendeten Audio- und Videobytes
- Die aktuelle durchschnittliche Videobildrate
Außerdem enthält jedes Objekt im Array für einen Verleger in einer weitergeleiteten Sitzung die folgenden zwei Eigenschaften:
connectionId- Die eindeutige ID der Verbindung des Clients, die mit deridEigenschaft derconnectionEigenschaft derconnectionCreatedEreignis, das das Session-Objekt für den Remote-Client ausgelöst hat.subscriberId- Die eindeutige ID des Teilnehmers, die mit deridEigenschaft des Subscriber-Objekts in der Anwendung des abonnierenden Clients.
Diese beiden Eigenschaften sind für einen Verleger in einer gerouteten Sitzung nicht definiert.
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die Publisher.getRtcStatsReport() Methode. Sie gibt ein Versprechen zurück, das im Erfolgsfall mit einem Array von RTCStatsReport Objekte.
Der OTP-Verlag audioNetworkStats und audioNetworkStats Ereignisse liefern ein Array von Objekten, die die aktuellen Audio- oder Videostatistiken für den Herausgeber definieren. Für einen Verleger in einer gerouteten Sitzung (eine, die die Medien-Router), enthalten diese Ereignis-Arrays jeweils ein Objekt, das die Statistiken für die Audio- oder Videodaten definiert, die an den Medien-Router. In einer weitergeleiteten Sitzung enthält das Array ein Objekt für jeden Abonnenten des veröffentlichten Streams. Jedes Objekt im Array hat die folgenden Eigenschaften:
videoBytesSent - Die Gesamtzahl der gesendeten Audio- und Videobytes
videoPacketsSent - Die Gesamtzahl der gesendeten Audio- und Videopakete
videoPacketsSent - Die Gesamtzahl der verlorenen Audio- und Videopakete
Zusätzlich enthält jedes Objekt im Array für einen Publisher in einer weitergeleiteten Sitzung die folgenden zwei Eigenschaften:
connectionId - Die eindeutige ID der Verbindung des abonnierenden Clients, die mit der Eigenschaft connectionId des Ereignisses connectionCreated für die Verbindung dieses Clients übereinstimmt.
subscriberId - Die eindeutige ID des Teilnehmers.
Der folgende Code protokolliert diese Statistiken für den Stream des Herausgebers jede Sekunde:
<OTPublisher
eventHandlers={{
audioNetworkStats: event => {
console.log('publisher audioNetworkStats event', event);
},
videoNetworkStats: event => {
console.log('publisher videoNetworkStats event', event);
},
}}
/>
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die OTPublisher.getRtcStatsReport() Methode. Der Aufruf dieser Methode führt dazu, dass die OTPublisher-Instanz eine rtcStatsReport Veranstaltung:
<OTPublisher
eventHandlers={{
streamCreated: event => {
console.log('publisher streamCreated', event);
setTimeout(() => this.publisher.getRtcStatsReport(), 12000)
},
rtcStatsReport: event => {
console.log('publisher rtcStatsReport event', event);
},
}}
/>
Für einen Publisher in einer gerouteten Sitzung enthält das Event-Array ein Objekt, das die Statistiken des an den OpenTok Media Router gesendeten Streams definiert. In einer weitergeleiteten Sitzung enthält das Array ein Objekt, das die RTC Stats Reports für jeden Teilnehmer des veröffentlichten Streams definiert. Jedes Objekt im Array hat eine jsonArrayOfReports Eigenschaft, die die Daten enthält. Die Struktur des JSON-Arrays ähnelt dem Format des in Webbrowsern implementierten RtcStatsReport-Objekts (siehe die Mozilla-Dokumente). Siehe auch dies W3C-Dokumentation.
Die getStats() Methode eines Publisher-Objekts liefert Ihnen Informationen über den Stream des Publishers, einschließlich der folgenden:
- Die Gesamtzahl der verlorenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videobytes
- Die aktuelle durchschnittliche Videobildrate
Der folgende Code protokolliert jede Sekunde die Audio-Paketverlustrate, die Audio-Bitrate, die Video-Paketverlustrate und die Video-Bitrate für einen Verlag:
var prevStats;
window.setInterval(function() {
publisher.getStats(function(error, stats) {
if (error) {
console.error('Error getting publisher stats. ', error.message);
return;
}
if (prevStats) {
var videoPacketLossRatio = stats.video.packetsLost /
(stats.video.packetsLost + stats.video.packetsReceived);
console.log('video packet loss ratio: ', videoPacketLossRatio);
var videoBitRate = 8 * (stats.video.bytesReceived - prevStats.video.bytesReceived);
console.log('video bit rate: ', videoBitRate, 'bps');
var audioPacketLossRatio = stats.audio.packetsLost /
(stats.audio.packetsLost + stats.audio.packetsReceived);
console.log('audio packet loss ratio: ', audioPacketLossRatio);
var audioBitRate = 8 * (stats.audio.bytesReceived - prevStats.audio.bytesReceived);
console.log('audio bit rate: ', audioBitRate, 'bps');
}
prevStats = stats;
});
}, 1000);
Um Statistiken für einen vom lokalen Client veröffentlichten Stream zu erhalten, müssen Sie eine Sitzung verwenden, die den OpenTok Media Router nutzt (Sitzungen mit der Option Medienbetrieb auf geroutet gesetzt), und Sie müssen die testNetwork Eigenschaft auf true in der options Objekt, das Sie an die Session.subscribe() Methode:
var publisher = OT.initPublisher();
publisher.on('streamCreated', function(event)) {
var subscriberOptions = {testNetwork: true};
var subscriber = session.subscribe(event.stream, 'publisher-element', subscriberOptions);
}
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die Publisher.getRtcStatsReport() Methode. Sie gibt ein Versprechen zurück, das im Erfolgsfall mit einer RtcStatsReport Objekt für den abonnierten Stream:
publisher.getRtcStatsReport()
.then((stats) => stats.forEach(console.log))
.catch(console.log);
Um Callback-Methoden für periodische Berichte über Audio- und Videostatistiken für einen Publisher zu registrieren, rufen Sie die PublisherKit.setAudioStatsListener(listener) und PublisherKit.setVideoStatsListener(listener) Methoden.
Übergeben Sie Objekte, die die PublisherKit.AudioStatsListener und PublisherKit.VideoStatsListener Schnittstellen.
Die Implementierungen der PublisherKit.AudioStatsListener.onAudioStats(publisher, stats) und PublisherKit.VideoStatsListener.onVideoStats(publisher, stats) Methoden werden in regelmäßigen Abständen aufgerufen, um Audio- und Videostatistiken für den Herausgeber zu erstellen. Jeder Methode werden zwei Objekte übergeben: der Herausgeber und ein Array von Statistikobjekten.
Für einen Verleger in einer gerouteten Sitzung (eine, die die Vonage Video-Media-Router), enthält das stats-Array ein Objekt, das die Statistiken für den einzelnen Audio- oder Video-Medienstrom definiert, der an den Vonage Video Media Router gesendet wird. In einer weitergeleiteten Sitzung enthält das stats-Array ein Objekt für jeden Teilnehmer des veröffentlichten Streams.
Die stats Objekt enthält die folgenden Eigenschaften:
- Die Gesamtzahl der gesendeten Audio- oder Videopakete
- Die Gesamtzahl der verlorenen Audio- oder Videopakete
- Die Gesamtzahl der gesendeten Audio- oder Videobytes
- Der Zeitstempel, zu dem die Statistiken erfasst wurden
Außerdem enthält jedes Objekt im Array für einen Verleger in einer weitergeleiteten Sitzung die folgenden zwei Eigenschaften:
connectionId- Die Verbindungs-ID des Clients, der den Stream abonniertsubscriberId- Die Abonnenten-ID des Clients, der den Stream abonniert
Diese beiden Eigenschaften sind für einen Verleger in einer gerouteten Sitzung nicht definiert.
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die PublisherKit.getRtcStatsReport() Methode. Sie liefert RTC-Statistikberichte für den Medienstrom. Dies ist ein asynchroner Vorgang. Rufen Sie die PublisherKit.setRtcStatsReportListener(PublisherKit.PublisherRtcStatsReportListener listener) Methode, und implementieren Sie dann die PublisherKit.PublisherRtcStatsReportListener.onRtcStatsReport(PublisherKit publisher, PublisherKit.PublisherRtcStats[] stats) Methode vor dem Aufruf PublisherKit.getRtcStatsReport().
Wenn die Statistiken verfügbar sind, wird die Implementierung der PublisherKit.PublisherRtcStatsReportListener.onRtcStatsReport(PublisherKit publisher, PublisherKit.PublisherRtcStats[] stats) Methode aufgerufen wird.
Eine Reihe von PublisherRtcStats Objekte an diese Methode übergeben wird. Die PublisherRtcStats Objekt enthält eine jsonArrayOfReports Eigenschaft. Dies ist ein JSON-Array mit RTC-Statistikberichten, die dem Format des in Webbrowsern implementierten RtcStatsReport-Objekts ähneln (siehe diese Mozilla-Dokumente). Siehe auch diese W3C-Dokumentation.
Setzen Sie die networkStatsDelegate Eigenschaft eines OTPublisherKit zu einem Objekt implementiert die OTPublisherKitNetworkStatsDelegate Protokoll.
Dieses Protokoll enthält eine [OTPublisherKitNetworkStatsDelegate publisher: audioNetworkStatsUpdated:] Nachricht und eine [OTPublisherKitNetworkStatsDelegate publisher: videoNetworkStatsUpdated:] die in regelmäßigen Abständen gesendet werden, um Statistiken zur Audio- und Videoqualität des Herausgebers zu übermitteln.
Der zweite Parameter jeder dieser - audioNetworkStatsUpdated und videoNetworkStatsUpdated - ist ein Array von stats-Objekten, die Eigenschaften enthalten, die die Netzwerkstatistiken (Audio und Video) definieren.
Für einen Verleger in einer gerouteten Sitzung (eine, die die Vonage Video-Media-Router), enthält das stats-Array ein Objekt, das die Statistiken für den einzelnen Audio- oder Video-Medienstrom definiert, der an den Vonage Video Media Router gesendet wird. In einer weitergeleiteten Sitzung enthält das Array stats ein Objekt für jeden Teilnehmer des veröffentlichten Streams. Das Objekt enthält die folgenden Eigenschaften:
- Die Gesamtzahl der gesendeten Audio- oder Videopakete
- Die Gesamtzahl der verlorenen Audio- oder Videopakete
- Die Gesamtzahl der gesendeten Audio- oder Videobytes
- Der Zeitstempel, zu dem die Statistiken erfasst wurden
- Der Zeitstempel, ab dem die kumulativen Gesamtwerte zu kumulieren begannen
Außerdem enthält jedes Statistikobjekt im Array für einen Verleger in einer weitergeleiteten Sitzung die folgenden zwei Eigenschaften:
connectionId- Die Verbindungs-ID des Clients, der den Stream abonniertsubscriberId- Die Abonnenten-ID des Clients, der den Stream abonniert
Diese beiden Eigenschaften sind für einen Verleger in einer gerouteten Sitzung nicht definiert.
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die [OTPublisherKit getRtcStatsReport:] Methode. Dies liefert RTC-Statistikberichte für den Medienstrom.
Dies ist ein asynchroner Vorgang. Setzen Sie die >[OTPublisherKit rtcStatsReportDelegate]> Eigenschaft und implementieren die >[OTPublisherKitRtcStatsReportDelegate publisher:rtcStatsReport:]> Methode vor dem Aufruf [OTPublisherKit getRtcStatsReport:].
Wenn die Statistiken verfügbar sind, wird die Implementierung der >[OTPublisherKitRtcStatsReportDelegate publisher:rtcStatsReport:]> Nachricht gesendet wird. Die Nachricht enthält ein Array von OTPublisherRtcStats Objekte, die eine jsonArrayOfReports Eigentum.
Dies ist ein JSON-Array mit RTC-Statistikberichten, die dem Format des in Webbrowsern implementierten RtcStatsReport-Objekts ähnlich sind (siehe diese Mozilla-Dokumente). Siehe auch diese W3C-Dokumentation.
Um Callback-Methoden für periodische Berichte über Audio- und Videostatistiken für einen Publisher zu registrieren, legen Sie einen Event-Handler für die Publisher AudioStatsUpdated und VideoUpdated Veranstaltungen.
Diese Ereignisse werden in regelmäßigen Abständen gesendet, um Audio- und Videostatistiken für den Herausgeber zu melden. Die Ereignisbehandler für diese Ereignisse werden in einem Array von AudioNetworkStats und VideoNetworkStats Jeder Methode werden zwei Objekte übergeben: der Verleger und ein Array von Statistikobjekten. Für einen Verleger in einer gerouteten Sitzung (einer, die die Vonage Video-Media-Router), enthält das Array ein Objekt, das die Statistiken für den einzelnen Audio- oder Video-Medienstrom definiert, der an den Vonage Video Media Router gesendet wird. Bei einer weitergeleiteten Sitzung enthält das Array ein Objekt für jeden Teilnehmer des veröffentlichten Streams. Die stats Objekt enthält die folgenden Eigenschaften:
- Die Gesamtzahl der gesendeten Audio- oder Videopakete
- Die Gesamtzahl der verlorenen Audio- oder Videopakete
- Die Gesamtzahl der gesendeten Audio- oder Videobytes
- Der Zeitstempel, zu dem die Statistiken erfasst wurden
Außerdem enthält jedes Objekt im Array für einen Verleger in einer weitergeleiteten Sitzung die folgenden zwei Eigenschaften:
ConnectionId- Die Verbindungs-ID des Clients, der den Stream abonniertSubscriberId- Die Abonnenten-ID des Clients, der den Stream abonniert
Diese beiden Eigenschaften sind für einen Verleger in einer gerouteten Sitzung nicht definiert.
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die Publisher.GetRtcStatsReport() Methode. Sie liefert RTC-Statistikberichte für den Medienstrom. Dies ist ein asynchroner Vorgang. Wenn die Statistiken verfügbar sind, wird das Ereignis RtcStatsReport gesendet. Die RtcStatsReportArgs Objekt enthält ein Array von PublisherRtcStats Objekte, die eine JsonArrayOfReports Eigenschaft. Dies ist ein JSON-Array mit RTC-Statistikberichten, die dem Format des in Webbrowsern implementierten RtcStatsReport-Objekts ähnlich sind (siehe diese Mozilla-Dokumente). Siehe auch diese W3C-Dokumentation.
Um Callback-Methoden für periodische Berichte von Audio- und Videostatistiken für einen Publisher zu registrieren, setzen Sie die on_audio_stats() und on_video_stats() Callback-Funktionen, wenn Sie die Initialisierung der otc_publisher_callbacks Struktur, die vom Verleger zu verwenden ist.
Diese Callback-Funktionen werden in regelmäßigen Abständen aufgerufen, um Audio- und Videostatistiken für den Herausgeber zu erstellen. Jede Funktion wird wie folgt übergeben: Ein Zeiger auf den publisher struct, Ein Zeiger auf den user_data den Sie für den Herausgeber festgelegt haben, ein Array mit Statistiken und die Anzahl der Statistiken im Array. Der Parameter stats wird durch den Parameter otc_publisher_audio_stats und otc_publisher_video_stats Strukturen. Für einen Verleger in einer gerouteten Sitzung (eine, die die Medien-Router), enthält das Array ein Objekt, das die Statistiken für den einzelnen Audio- oder Video-Medienstrom definiert, der an den Media Router gesendet wird. In einer weitergeleiteten Sitzung enthält das Array ein Objekt für jeden Abonnenten des veröffentlichten Stroms. Die als stats-Parameter übergebene Struktur umfasst die folgenden Eigenschaften:
- Die Gesamtzahl der gesendeten Audio- oder Videopakete
- Die Gesamtzahl der verlorenen Audio- oder Videopakete
- Die Gesamtzahl der gesendeten Audio- oder Videobytes
- Der Zeitstempel, zu dem die Statistiken erfasst wurden
- Der Audiopegel (für Audiostatistiken)
Außerdem enthält jedes Objekt im Array für einen Verleger in einer weitergeleiteten Sitzung die folgenden zwei Eigenschaften:
ConnectionId- Die Verbindungs-ID des Clients, der den Stream abonniertSubscriberId- Die Abonnenten-ID des Clients, der den Stream abonniert
Diese beiden Eigenschaften sind für einen Verleger in einer gerouteten Sitzung nicht definiert.
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die otc_publisher_get_rtc_stats_report() Funktion. Sie liefert RTC-Statistikberichte für den Medienstrom. Dies ist ein asynchroner Vorgang. Erstellen einer otc_publisher_rtc_stats_report_cb struct und leiten es in die otc_publisher_set_rtc_stats_report_cb Funktion vor dem Aufruf von otc_publisher_get_rtc_stats_report(). Wenn die Statistiken verfügbar sind, wird die otc_publisher_rtc_stats_report_cb.on_rtc_stats_report() Callback-Funktion aufgerufen wird. Diese Funktion enthält eine stats Parameter, der ein Zeiger auf ein Array von otc_publisher_rtc_stats Strukturen. Diese Struktur enthält eine json_array_of_reports Eigenschaft. Dies ist ein JSON-Array mit RTC-Statistikberichten, die dem Format des in Webbrowsern implementierten RtcStatsReport-Objekts ähnlich sind (siehe diese Mozilla-Dokumente). Siehe auch diese W3C-Dokumentation.
Test stream
Sie können einen Teststream veröffentlichen und dessen Audio- und Videostatistiken überprüfen, um die Art des Streams (z. B. hochauflösend oder nur Audio) zu ermitteln, die von Ihrer Verbindung unterstützt wird.
Um Statistiken für einen Stream zu erhalten, der vom lokalen Client veröffentlicht wurde, müssen Sie eine Sitzung verwenden, die den Media Router nutzt (Sitzungen, bei denen der Medienmodus auf geroutet eingestellt ist), und Sie müssen die Option testNetwork Eigenschaft zu true im options Objekt, das Sie an die Session.subscribe() Methode. Sie können dann die getStats() Methode des Subscriber-Objekts, um Audio- und Videostatistiken für den von Ihnen veröffentlichten Stream zu erhalten.
Sie können die SubscriberKit.setAudioStatsListener(AudioStatsListener listener) und SubscriberKit.setVideoStatsListener(VideoStatsListener listener) Methoden des Subscriber-Objekts, um Audio- und Videostatistiken für den von Ihnen veröffentlichten Stream zu erhalten.
Siehe dieses Thema für weitere Informationen.
Sie können die networkStatsDelegate Methode des OTSubscriberKit-Objekts, um Audio- und Videostatistiken für den von Ihnen veröffentlichten Stream zu erhalten.
Die vonage-video-api-network-test-samples Repo enthält Beispielcode, der zeigt, wie die Statistiken eines Teststreams vor der Veröffentlichung in einer Sitzung verwendet werden können.
Sie können die networkStatsDelegate Methode des OTSubscriberKit-Objekts, um Audio- und Videostatistiken für den von Ihnen veröffentlichten Stream zu erhalten.
Die vonage-video-api-network-test-samples Repo enthält Beispielcode, der zeigt, wie die Statistiken eines Teststreams vor der Veröffentlichung in einer Sitzung verwendet werden können.
Sie können dann den Stream abonnieren und die Subscriber.AudioStatsUpdated und Subscriber.VideoStatsUpdated Ereignisse, um Audio- und Videostatistiken für den von Ihnen veröffentlichten Stream zu erhalten.
Bewährte Praktiken bei der Veröffentlichung
Dieser Abschnitt enthält Tipps für die erfolgreiche Veröffentlichung von Streams.
Zugriff auf das Gerät zulassen
Es empfiehlt sich, die Nutzer darüber zu informieren, dass sie aufgefordert werden, den Zugriff auf ihre Kamera und ihr Mikrofon zu gestatten.
Wir haben festgestellt, dass die weitaus meisten Fehler bei der Veröffentlichung darauf zurückzuführen sind, dass Benutzer auf die Schaltfläche "Verweigern" klicken oder die Schaltfläche "Zulassen" überhaupt nicht anklicken. Wir stellen Ihnen alle Ereignisse zur Verfügung, die Sie benötigen, um Ihre Benutzer durch diesen Prozess zu führen:
publisher.on({
accessDialogOpened: function (event) {
// Show allow camera message
pleaseAllowCamera.style.display = 'block';
},
accessDialogClosed: function (event) {
// Hide allow camera message
pleaseAllowCamera.style.display = 'none';
}
});
Es ist auch eine gute Idee, Ihre Website über SSL bereitzustellen. Der Grund dafür ist, dass Chrome von den Nutzern nur einmal pro Domain verlangt, den Zugriff auf Geräte zu erlauben, wenn diese Domain über SSL bereitgestellt wird. Das bedeutet, dass Ihre Nutzer (wenn sie Chrome verwenden) nicht jedes Mal, wenn sie die Seite laden, mit dem lästigen Dialogfeld "Zulassen/Ablehnen" konfrontiert werden.
OT.initPublisher() und Session.publish() aufteilen
Außerdem empfehlen wir die Aufteilung der OT.initPublisher() und Session.publish() Schritte. Dadurch wird die anfängliche Verbindungszeit verkürzt, da Sie eine Verbindung zur Sitzung herstellen, während Sie darauf warten, dass der Benutzer auf die Schaltfläche "Zulassen" klickt. Also statt:
session.connect(token, function (err) {
{... your error handling code ...}
if (!err) {
var publisher = OT.initPublisher();
session.publish(publisher);
}
});
Bewegen Sie die OT.initPublisher() bevor Sie eine Verbindung herstellen, wie im Folgenden beschrieben:
var publisher = OT.initPublisher();
session.connect(token, function (err) {
{... your error handling code ...}
if (!err) {
session.publish(publisher);
}
});
Auflösung und Bildrate
Sie können die Auflösung und die Bildrate des Publishers bei der Initialisierung einstellen:
OT.initPublisher(divId, {
resolution: '320x240',
frameRate: 15
});
Standardmäßig ist die Auflösung eines Publishers 640x480, aber Sie können sie auch auf 1920x1080, 1280x720 oder 320x240 einstellen. Am besten versuchen Sie, die Auflösung an die Größe anzupassen, in der das Video angezeigt werden soll. Wenn Sie das Video nur mit 320x240 Pixeln anzeigen, macht es keinen Sinn, mit 1280x720 oder 1920x1080 zu streamen. Durch die Verringerung der Auflösung können Sie Bandbreite sparen und Überlastungen und Verbindungsabbrüche vermeiden.
Standardmäßig beträgt die Bildrate des Videos 30 Bilder pro Sekunde, aber Sie können sie auch auf 15, 7 oder 1 einstellen. Durch die Verringerung der Bildrate kann die erforderliche Bandbreite reduziert werden. Videos mit geringerer Auflösung können eine niedrigere Bildrate haben, ohne dass der Benutzer einen großen Unterschied bemerkt. Wenn Sie also eine niedrige Auflösung verwenden, sollten Sie auch eine niedrige Bildrate in Betracht ziehen.
Fehlersuche
Befolgen Sie die Tipps in diesem Abschnitt, um Konnektivitätsprobleme bei der Veröffentlichung zu vermeiden. Allgemeine Informationen zur Fehlerbehebung finden Sie unter Fehlersuche - Web.
Umgang mit Fehlern
Es gibt Callback-Methoden für beide Session.publish() und OT.initPublisher(). Wir empfehlen, die Fehlerantworten auf diese beiden Methoden zu behandeln. Wie bereits erwähnt, ist es am besten, diese Schritte aufzuteilen und die OT.initPublisher() bevor Sie mit der Verbindung zu Ihrer Sitzung begonnen haben. Es erleichtert auch die Fehlerbehandlung, wenn Sie nicht beide Methoden gleichzeitig aufrufen. Der Grund dafür ist, dass beide Fehlerbehandlungsmethoden ausgelöst werden, wenn ein Fehler veröffentlicht wird. Es ist am besten, zu warten, bis OT.initPublisher() zu vervollständigen und Session.connect() zu vervollständigen, und rufen Sie dann Session.publish(). Auf diese Weise können Sie alle hardwarebezogenen Probleme in der OT.initPublisher() Rückruf und alle netzbezogenen Fragen in der Session.publish() Rückruf.
var connected = false,
publisherInitialized = false;
var publisher = OT.initPublisher(function(err) {
if (err) {
// handle error
} else {
publisherInitialized = true;
publish();
}
});
var publish = function() {
if (connected && publisherInitialized) {
session.publish(publisher);
}
};
session.connect(token, function(err) {
if (err) {
// handle error
} else {
connected = true;
publish();
}
});
Zugang verweigert
Die höchste Anzahl von Misserfolgen bei OT.initPublisher() sind darauf zurückzuführen, dass der Endnutzer den Zugang zu Kamera und Mikrofon verweigert. Dies kann entweder durch Abhören des accessDenied Ereignis oder durch Abwarten einer Fehlerantwort auf die Methode OT.initPublisher() mit einer code Eigenschaft auf 1500 gesetzt und eine message Eigenschaft auf "Publisher Access Denied:" gesetzt. Wir empfehlen, dass Sie diesen Fall behandeln und dem Benutzer eine Meldung anzeigen, dass er versuchen sollte, erneut zu veröffentlichen und den Zugriff auf die Kamera zu erlauben.
publisher.on({
'accessDenied': function() {
showMessage('Please allow access to the Camera and Microphone and try publishing again.');
}
});
Zugang zum Gerät
Ein weiterer Grund für OT.initPublisher() Wenn OpenTok nicht auf eine Kamera oder ein Mikrofon zugreifen kann, schlägt das Programm fehl. Dies kann passieren, wenn keine Kamera oder kein Mikrofon an den Rechner angeschlossen ist, wenn etwas mit dem Treiber für die Kamera oder das Mikrofon nicht stimmt oder wenn eine andere Anwendung die Kamera oder das Mikrofon verwendet (dies geschieht nur unter Windows). Sie können versuchen, das Auftreten dieser Probleme zu minimieren, indem Sie unsere Hardware-Setup-Komponente verwenden oder die Funktion OT.getDevices() Methode direkt. Sie sollten jedoch auch jeden Fehler behandeln, wenn Sie OT.initPublisher() denn es kann immer noch etwas schief gehen. Zum Beispiel könnte der Benutzer den Zugriff auf die Kamera oder das Mikrofon verweigert haben. In diesem Fall muss die error.name Eigenschaft wird auf "OT_USER_MEDIA_ACCESS_DENIED":
publisher = OT.initPublisher('publisher', {}, function (err) {
if (err) {
if (err.name === 'OT_USER_MEDIA_ACCESS_DENIED') {
// Access denied can also be handled by the accessDenied event
showMessage('Please allow access to the Camera and Microphone and try publishing again.');
} else {
showMessage('Failed to get access to your camera or microphone. Please check that your webcam'
+ ' is connected and not being used by another application and try again.');
}
publisher.destroy();
publisher = null;
}
});
Netzwerk-Fehler
Die anderen Gründe für Fehler bei der Veröffentlichung sind in der Regel auf eine Art von Netzwerkfehler zurückzuführen. Wir behandeln diese in dem Callback zu Session.publish(). Wenn der Benutzer nicht mit dem Netz verbunden ist, wird der Callback-Funktion ein Fehlerobjekt mit dem name Eigenschaft eingestellt auf "OT_NOT_CONNECTED". Wenn der Benutzer über eine sehr restriktive Netzwerkverbindung verfügt, die keine WebRTC-Verbindungen zulässt, kann der Publisher keine Verbindung herstellen, und das Publisher-Element zeigt ein sich drehendes Rad an. Dieser Fehler hat eine name Eigenschaft eingestellt auf "OT_CREATE_PEER_CONNECTION_FAILED". In diesem Fall empfiehlt es sich, dem Benutzer eine Nachricht zu übermitteln, die ihn darauf hinweist, dass die Veröffentlichung fehlgeschlagen ist und dass er seine Netzwerkverbindung überprüfen sollte. Die Behandlung dieser Fehler sieht folgendermaßen aus:
session.publish(publisher, function(err) {
if (err) {
switch (err.name) {
case "OT_NOT_CONNECTED":
showMessage("Publishing your video failed. You are not connected to the internet.");
break;
case "OT_CREATE_PEER_CONNECTION_FAILED":
showMessage("Publishing your video failed. This could be due to a restrictive firewall.");
break;
default:
showMessage("An unknown error occurred while trying to publish your video. Please try again later.");
}
publisher.destroy();
publisher = null;
}
});
Verlust der Konnektivität
Ihr Publisher kann auch die Verbindung verlieren, nachdem er bereits eine Verbindung hergestellt hat. In den meisten Fällen führt dies dazu, dass auch die Sitzung ihre Verbindung verliert, aber das ist nicht immer der Fall. Sie können das Trennen der Verbindung des Publishers behandeln, indem Sie auf die streamDestroyed Ereignis mit einer reason Eigenschaft auf "networkDisconnected" wie folgt eingestellt:
publisher.on({
streamDestroyed: function (event) {
if (event.reason === 'networkDisconnected') {
showMessage('Your publisher lost its connection. Please check your internet connection and try publishing again.');
}
}
});