Abonnieren: Diagnostik
Verwenden Sie diesen Leitfaden, um Stream-Details zu prüfen, das Ende von Streams zu erkennen und häufige Teilnehmerprobleme zu beheben. Er enthält auch Hinweise zur Behandlung von Verbindungsproblemen in der Benutzeroberfläche.
Informationen zum Stream
Abrufen von Diagnosedetails für aktive Streams zur Unterstützung von Fehlersuche und Analyse.
Um Audio- und Videostatistiken für Abonnenten zu erhalten, fügen Sie Ereignisbehandler für die audioNetworkStats und videoNetworkStats Ereignis, das vom OTSubscriber ausgelöst wird. Sie enthalten Informationen über den Stream des Abonnenten, darunter die 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.
<OTSubscriber
eventHandlers={{
audioNetworkStats: event => {
console.log('subscriber audioNetworkStats event', event);
},
videoNetworkStats: event => {
console.log('subscriber videoNetworkStats event', event);
},
}}
/>
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die Subscriber.getRtcStatsReport() Methode des OTSubscriber-Objekts. Sie gibt ein Versprechen zurück, das im Erfolgsfall mit einer JSON-Darstellung eines RtcStatsReport Objekt für den abonnierten Stream:
<OTSubscriber
eventHandlers={{
connected: event => {
setTimeout(() => {
this.subscriber.getRtcStatsReport();
}, 4000);
},
rtcStatsReport: event => {
console.log('subscriber rtcStatsReport event', event);
},
}}
/>
Das Stream-Objekt hat die folgenden Eigenschaften, die den Stream definieren:
connection- Das Connection-Objekt, das der Verbindung entspricht, über die der Stream veröffentlicht wird. Sie können dies mit der Verbindungseigenschaft des Sitzungsobjekts vergleichen, um festzustellen, ob der Stream von der lokalen Webseite veröffentlicht wird.creationTime- Der Zeitstempel (eine Zahl) für die Erstellung des Streams. Dieser Wert wird in Millisekunden berechnet. Sie können diesen Wert in ein Date-Objekt umwandeln, indem Sienew Date(stream.creationTime).hasAudio- (Boolean) Ob der Stream Audio enthält. Diese Eigenschaft kann sich ändern, wenn der Herausgeber Audio ein- oder ausschaltet (durch Aufruf von Publisher.publishAudio()). Wenn dies geschieht, wird die Sitzung Objekt sendet einestreamPropertyChangedVeranstaltung.hasVideo- (Boolean) Ob der Stream Video enthält. initials-(Boolean) Die Initialen für den Stream (wenn die Initialen beim Veröffentlichen des Streams festgelegt wurden) initialisiert).name- (String) Der Name des Streams. Dieser wird standardmäßig angezeigt, wenn der Benutzer mit der Maus über den Abonnenten im HTML-DOM fährt. Sie können jedoch die Benutzeroberfläche anpassen, um den Namen auszublenden oder ihn ohne Überfahren mit der Maus anzuzeigen.videoDimensions- Dieses Objekt hat zwei Eigenschaften:widthundheight. Beides sind Numbers. Diewidthist die Breite des kodierten Streams; die EigenschaftheightEigenschaft ist die Höhe des kodierten Streams. (Diese sind unabhängig von der tatsächlichen Breite der Publisher- und Subscriber-Objekte, die dem Stream entsprechen). Diese Eigenschaft kann sich ändern, wenn sich die Größe eines von einem iOS-Gerät veröffentlichten Streams aufgrund einer Änderung der Geräteausrichtung ändert.videoType- Die Art des Videos: entweder "Kamera", "Bildschirm", "Benutzerdefiniert" oder undefiniert. Ein "Bildschirm"-Video verwendet die Bildschirmfreigabe auf dem Herausgeber als Videoquelle; ein "benutzerdefiniertes" Video verwendet ein VideoTrack-Element als Videoquelle auf dem Herausgeber. Die SeitevideoTypeistundefinedwenn es sich um einen reinen Sprachstrom handelt (siehe die Anleitung nur mit Stimme). Diese Eigenschaft kann sich ändern, wenn ein von einem mobilen Gerät veröffentlichter Stream von einem Kamera- zu einem Bildschirmfreigabevideotyp wechselt. Für weitere Informationen, siehe Bildschirmfreigabe - Web.
Die hasAudio, hasVideo, videoDimensionsund videoType Eigenschaften ändern können (z. B. wenn der Herausgeber das Video ein- oder ausschaltet). Wenn dies geschieht, sendet das Sitzungsobjekt ein streamPropertyChanged-Ereignis (siehe StreamPropertyChangedEvent).
Die getStats() Methode eines Subscriber-Objekts liefert Ihnen Informationen über den Stream des Abonnenten, 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 Teilnehmer:
var prevStats;
window.setInterval(function() {
subscriber.getStats(function(error, stats) {
if (error) {
console.error('Error getting subscriber 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 Subscriber.getRtcStatsReport() Methode. Sie gibt ein Versprechen zurück, das im Erfolgsfall mit einer RtcStatsReport Objekt für den abonnierten Stream:
subscriber.getRtcStatsReport()
.then((stats) => stats.forEach(console.log))
.catch(console.log);
Das Stream-Objekt hat die folgenden Methoden, die Werte zurückgeben, die den Stream definieren:
getConnection()- (Verbindung) Gibt das Verbindungsobjekt zurück, das der Verbindung entspricht, über die der Stream veröffentlicht wird. Sie können dies mit dem Wert vergleichen, der von der FunktiongetConnection()Methode des Session-Objekts, um zu sehen, ob der Stream von Ihrem Client veröffentlicht wird.getCreationTime()- (Datum) Der Datumszeitstempel für die Erstellungszeit des Streams.hasAudio()- (boolesch) Ob der Stream Audio enthält.hasVideo()- (boolesch) Ob der Stream Video enthält.getName()- (String) Gibt den Namen des Streams wieder. Dieser wird gesetzt, wenn Sie den Publisher des Streams initialisieren (siehe Initialisierung eines Publisher-Objekts).getStreamId()- (String) Die eindeutige ID für den Stream.getVideoHeight()- (int) Die Höhe des Streams in Pixeln.getVideoType()- (StreamVideoType) Ob der Stream eine Kamera-Videoquelle verwendet (StreamVideoTypeCamera.StreamVideoTypeCamera), eine Videoquelle zur Bildschirmfreigabe (StreamVideoTypeScreen.StreamVideoTypeScreen), oder eine benutzerdefinierte Videoquelle (StreamVideoTypeScreen.StreamVideoTypeScreen).
Siehe Bildschirmfreigabe.
getVideoWidth()- (int) Die Breite des Streams in Pixeln.
Sie können Listener so einstellen, dass sie die folgenden Statistiken für den Stream eines Abonnenten überwachen:
- Die Gesamtzahl der verlorenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videobytes
Siehe die SubscriberKit.setAudioStatsListener(AudioStatsListener listener) und SubscriberKit.setVideoStatsListener(VideoStatsListener listener) Methoden.
Um Statistiken für einen vom lokalen Client veröffentlichten Stream zu erhalten, müssen Sie eine Sitzung verwenden, die den Vonage Video Media Router nutzt (Sitzungen mit der Option Medienbetrieb auf geroutet gesetzt).
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die SubscriberKit.getRtcStatsReport() Methode. Dies liefert einen RTC-Statistikbericht für den Medienstrom.
Dies ist ein asynchroner Vorgang. Rufen Sie die SubscriberKit.setRtcStatsReportListener(SubscriberKit.SubscriberRtcStatsReportListener listener) Methode, und implementieren Sie dann die SubscriberKit.SubscriberRtcStatsReportListener.onRtcStatsReport(SubscriberKit subscriber, java.lang.String jsonArrayOfReports) Methode vor dem Aufruf SubscriberKit.getRtcStatsReport().
Wenn die Statistiken verfügbar sind, wird die Implementierung der SubscriberKit.SubscriberRtcStatsReportListener.onRtcStatsReport(SubscriberKit subscriber, java.lang.String jsonArrayOfReports) Methode aufgerufen wird. Die jsonArrayOfReports ist ein JSON-Array von RTC-Statistikberichten, die dem Format des in Webbrowsern implementierten RtcStatsReport-Objekts ähneln (siehe diese Mozilla-Dokumente).
Siehe auch diese W3C-Dokumentation.
Das OTStream-Objekt hat die folgenden Eigenschaften, die den Stream definieren:
connection-Das OTConnection-Objekt, das der Verbindung entspricht, die den Stream veröffentlicht. Sie können dies mit demconnectionEigenschaft des OTSession-Objekts, um festzustellen, ob der Stream von Ihrem Client veröffentlicht wird.creationTime-Der Datumszeitstempel für die Erstellungszeit des Streams.hasAudio-(Bool) Ob der Stream Audio enthält.hasVideo-(Bool) Ob der Stream Video enthält.name-(String?) Der Name des Streams. Dieser wird gesetzt, wenn Sie den Publisher des Streams initialisieren (siehe Initialisierung eines OTPublisher-Objekts).session-(OTSession) Die Vonage Video-Sitzung, an die der Stream gebunden ist.streamId-(String) Die eindeutige ID für den Stream.videoDimensionsEin CGSize-Objekt, das die aktuellen Abmessungen der Videospur in diesem Stream definiert.videoType-(OTStreamVideoType) Angabe, ob der Stream eine Kamera-Videoquelle verwendet (OTStreamVideoTypeCamera), eine Videoquelle zur Bildschirmfreigabe (OTStreamVideoTypeScreen), oder eine benutzerdefinierte Videoquelle (OTStreamVideoTypeCustom).
Siehe Bildschirmfreigabe.
Sie können eine OTSubscriberKitNetworkStatsDelegate Objekt für das OTSubscriberKit-Objekt, um die folgenden Statistiken für den Stream eines Abonnenten zu überwachen:
- Die Gesamtzahl der verlorenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videobytes
Siehe die SubscriberKit.networkStatsDelegate Eigentum.
Um Statistiken für einen vom lokalen Client veröffentlichten Stream zu erhalten, müssen Sie eine Sitzung verwenden, die den Vonage Video Media Router nutzt (Sitzungen mit der Option Medienbetrieb auf geroutet gesetzt).
Das OTStream-Objekt hat die folgenden Eigenschaften, die den Stream definieren:
connection-Das OTConnection-Objekt, das der Verbindung entspricht, die den Stream veröffentlicht. Sie können dies mit demconnectionEigenschaft des OTSession-Objekts, um festzustellen, ob der Stream von Ihrem Client veröffentlicht wird.creationTime-Der NSDate-Zeitstempel für die Erstellungszeit des Streams.hasAudio-(Boolean) Ob der Stream Audio enthält.hasVideo-(Boolean) Ob der Stream Video enthält.name-(NSString) Der Name des Streams. Dieser wird gesetzt, wenn Sie den Publisher des Streams initialisieren (siehe Initialisierung eines OTPublisher-Objekts).session-(OTSession) Die Vonage Video-Sitzung, an die der Stream gebunden ist.streamId-(NSString) Die eindeutige ID für den Stream.videoDimensionsEin CGSize-Objekt, das die aktuellen Abmessungen der Videospur in diesem Stream definiert.videoType-(OTStreamVideoType) Angabe, ob der Stream eine Kamera-Videoquelle verwendet (OTStreamVideoTypeCamera), eine Videoquelle zur Bildschirmfreigabe (OTStreamVideoTypeScreen), oder eine benutzerdefinierte Videoquelle (OTStreamVideoTypeCustom).
Siehe Bildschirmfreigabe.
Sie können eine OTSubscriberKitNetworkStatsDelegate Objekt für das OTSubscriberKit-Objekt, um die folgenden Statistiken für den Stream eines Abonnenten zu überwachen:
- Die Gesamtzahl der verlorenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videobytes
Siehe die SubscriberKit.networkStatsDelegate Eigentum.
Um Statistiken für einen vom lokalen Client veröffentlichten Stream zu erhalten, müssen Sie eine Sitzung verwenden, die den Vonage Video Media Router nutzt (Sitzungen mit der Option Medienbetrieb auf geroutet gesetzt).
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die [OTSubscriberKit getRtcStatsReport:] Methode. Dies liefert einen RTC-Statistikbericht für den Medienstrom.
Dies ist ein asynchroner Vorgang. Setzen Sie die [OTSubscriberKit rtcStatsReportDelegate]> Eigenschaft und implementieren die >[OTSubscriberKitRtcStatsReportDelegate subscriber:rtcStatsReport:]> Methode vor dem Aufruf [OTSubscriberKit getRtcStatsReport:].
Wenn die Statistiken verfügbar sind, wird die Implementierung der >[OTSubscriberKitRtcStatsReportDelegate subscriber:rtcStatsReport:]> Nachricht gesendet wird. Die Nachricht enthält ein a jsonArrayOfReports Parameter.
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.
Das Stream-Objekt hat die folgenden Eigenschaften, die den Stream definieren:
Connection- (Verbindung) Das Verbindungsobjekt, das der Verbindung entspricht, über die der Stream veröffentlicht wird. Sie können dies mit demConnectionEigenschaft des Session-Objekts, um zu sehen, ob der Stream von Ihrem Client veröffentlicht wird.CreationTime- (DateTime) Der DateTime-Zeitstempel für die Erstellungszeit des Streams.HasAudio- (bool) Ob der Stream Audio enthält.HasVideo- (bool) Ob der Stream Video enthält.Name- (string) Der Name des Streams. Dieser wird gesetzt, wenn Sie den Publisher des Streams initialisieren (siehe Initialisierung eines Publisher-Objekts).Id- (string) Die eindeutige ID für den Stream.Height- (int) Die Höhe des Streams in Pixeln.VideoSourceType- (VideoSourceType) Gibt an, ob der Stream eine Kamera-Videoquelle verwendet (VideoSourceType.StreamVideoTypeCamera), eine Videoquelle zur Bildschirmfreigabe (VideoSourceType.StreamVideoTypeScreen), oder eine benutzerdefinierte Videoquelle (VideoSourceType.StreamVideoTypeCustom).
Siehe Bildschirmfreigabe.
Width- (int) Die Breite des Streams in Pixeln.
Sie verwenden die Subscriber.AudioStatsUpdated und Subscriber.VideoStatsUpdated Ereignisse, um die folgenden Statistiken für den Stream eines Abonnenten zu überwachen:
- Die Gesamtzahl der verlorenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videobytes
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die Subscriber.GetRtcStatsReport() Methode. Dies liefert einen RTC-Statistikbericht 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 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.
Rufen Sie die folgenden Funktionen auf, um Informationen über einen Stream zu erhalten:
otc_stream_get_connection()- Gibt dieotc_connectionInstanz, die der Verbindung entspricht, die den Stream veröffentlicht. Sie können die Verbindungs-ID für diese mit der Verbindungs-ID für dieotc_connectionInstanz, die von derotc_session_get_connection()Funktion, um zu sehen, ob der Stream von Ihrem Client veröffentlicht wird.otc_stream_get_creation_time()- Gibt den Zeitstempel für die Erstellungszeit des Streams zurück.otc_stream_has_audio()- Ob der Stream gerade Audio veröffentlicht.otc_stream_has_video()- Ob der Stream gerade ein Video veröffentlicht.otc_stream_has_audio_track()- Ob der Stream eine Tonspur hat.otc_stream_has_video_track()- Ob der Stream eine Videospur hat.otc_stream_get_name()- Gibt den Namen des Streams zurück. Dieser wird gesetzt, wenn Sie den Publisher des Streams initialisieren (siehe Initialisierung einer otc_publisher-Struktur und Setzen von Publisher-Callbacks).otc_stream_get_id()- Gibt die eindeutige ID für den Stream zurück.otc_stream_get_video_height()- Die Höhe des Streams in Pixeln.otc_stream_get_video_type()- Ob der Stream eine Kamera-Videoquelle verwendet (OTC_STREAM_VIDEO_TYPE_CAMERA) oder eine Videoquelle für die Bildschirmfreigabe (OTC_STREAM_VIDEO_TYPE_SCREEN).otc_stream_get_video_width()- Die Breite des Streams in Pixeln.
Verwenden Sie die on_audio_stats() und on_video_stats() Callback-Funktionen des otc_subscriber_callbacks um die folgenden Statistiken für den Stream eines Abonnenten zu überwachen:
- Die Gesamtzahl der verlorenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videopakete
- Die Gesamtzahl der empfangenen Audio- und Videobytes
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie die otc_subscriber_get_rtc_stats_report() Funktion. Diese Funktion liefert einen RTC-Statistikbericht für den Medienstrom.
Dies ist ein asynchroner Vorgang. Erstellen einer otc_subscriber_rtc_stats_report_cb Struktur und übergeben Sie sie an die otc_subscriber_set_rtc_stats_report_cb Funktion vor dem Aufruf von otc_subscriber_get_rtc_stats_report(). Wenn die Statistiken verfügbar sind, wird die otc_subscriber_rtc_stats_report_cb.on_rtc_stats_report Callback-Funktion aufgerufen wird.
Diese Rückruffunktion enthält eine json_array_of_reports Parameter. 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.
Erkennen von Stream-Ende und deaktiviertem Video
Erkennen Sie, wann ein Stream endet, damit Sie die Bereinigung durchführen und die Benutzeroberfläche anpassen können.
Wenn das Video eines Abonnenten deaktiviert wird, sendet das OTSubscriber-Objekt eine videoDisabled Veranstaltung:
<OTSubscriber
eventHandlers={{
videoDisabled: (event) => {
console.log('stream video disabled -- stream ID:', event.streamId);
// Display a user interface notification.
},
}}/>
Wenn der Media Router das Video eines Teilnehmers deaktiviert, möchten Sie möglicherweise die Benutzeroberfläche für den Teilnehmer anpassen.
Die reason Eigenschaft der videoDisabled Ereignisobjekt definiert den Grund, warum das Video deaktiviert wurde. Dieser kann auf einen der folgenden Werte gesetzt werden:
"PublisherPropertyChanged"- Der Verlag hat die Veröffentlichung von Videos eingestellt."QualityChanged"- Der Media Router hat das Senden von Video an den Teilnehmer aufgrund von Änderungen der Streamqualität eingestellt. Mit dieser Funktion des Media Routers wird der Videostream eines Teilnehmers bei einer Verschlechterung der Konnektivität unterbrochen. (Der Teilnehmer empfängt weiterhin den Audiostream, sofern vorhanden.)
Vor dem Senden dieses Ereignisses, wenn sich die Streamqualität des Teilnehmers auf ein Niveau verschlechtert, das so niedrig ist, dass die Gefahr besteht, dass der Videostream deaktiviert wird, wird das OTSubscriber objet versendet eine videoDisableWarning Veranstaltung.
Wenn sich die Konnektivität so verbessert, dass wieder Video unterstützt wird, wird die OTSubscriber Objekt sendet eine videoEnabled und der Abonnent nimmt den Videoempfang wieder auf.
Diese Funktion ist nur in Sitzungen verfügbar, die die Medien-Router (Sitzungen, bei denen der Medienmodus auf geroutet eingestellt ist), nicht aber in Sitzungen, bei denen der Medienmodus auf weitergeleitet eingestellt ist.
Wenn Sie einen Stream veröffentlichen, können Sie verhindern, dass das Video aufgrund der Streamqualität deaktiviert wird. einstellen audioFallbackEnabled zu false im properties Prop in die OTPublisher-Komponente übergeben.
"SubscriberPropertyChanged"- Der Abonnent hat das Videoabonnement gestartet oder gestoppt, indem er subscribeToVideo in der Eigenschaftsliste, die an die Funktion "Video" übergeben wird, auf false gesetzt hat.OTSubscriberKomponente."CodecNotSupported"- Der Abonnent hat das Videoabonnement aufgrund eines inkompatiblen Codecs beendet (siehe die Leitfaden für Entwickler von Videocodecs).
Die OTSubscriber Objektverteilungen videoEnabled Ereignis, wenn das Video fortgesetzt wird:
Die Eigenschaft reason des videoEnabled-Ereignisobjekts definiert den Grund, aus dem das Video aktiviert wurde. Diese Eigenschaft kann auf einen der folgenden Werte gesetzt werden:
"PublisherPropertyChanged"- Der Verlag hat die Veröffentlichung von Videos wieder aufgenommen."QualityChanged"- Der Media Router hat das Senden von Videos an den Abonnenten auf der Grundlage von Änderungen der Streamqualität wieder aufgenommen. Mit dieser Funktion des Medienrouters kann ein Teilnehmer den Videostream unterbrechen, wenn sich die Konnektivität verschlechtert, und den Videostream wieder aufnehmen, wenn sich die Qualität des Streams verbessert.
Diese Funktion ist nur in Sitzungen verfügbar, die den Medien-Router verwenden (Sitzungen, deren Medienmodus auf geroutet eingestellt ist), nicht in Sitzungen, deren Medienmodus auf weitergeleitet eingestellt ist.
"SubscriberPropertyChanged"- Der Abonnent hat ein Videoabonnement begonnen oder beendet, indem ersubscribeToVideoin der Eigenschaftsliste, die an die Komponente OTSubscriber übergeben wird, auf false setzen."CodecNotSupported"- Das Teilnehmervideo wurde nach einem Codec-Wechsel von einem inkompatiblen Codec aktiviert (siehe die Leitfaden für Entwickler von Videocodecs).
Wenn ein Stream, der nicht Ihr eigener ist, eine Sitzung verlässt, sendet das Sitzungsobjekt eine streamDestroyed Veranstaltung:
session.on("streamDestroyed", function (event) {
console.log("Stream stopped. Reason: " + event.reason);
});
Wenn ein Stream, den Sie veröffentlichen, eine Sitzung verlässt, sendet das Publisher-Objekt eine streamDestroyed Veranstaltung:
var publisher = OT.initPublisher();
publisher.on("streamDestroyed", function (event) {
console.log("Stream stopped. Reason: " + event.reason);
});
Die streamDestroyed Ereignis wird durch die Klasse StreamEvent definiert. Das Ereignis enthält eine reason die angibt, warum der Stream beendet wurde. Diese Gründe umfassen "clientDisconnected", "forceDisconnected", "forceUnpublished", oder "networkDisconnected". Für Einzelheiten siehe StreamEvent.
Standardmäßig, wenn ein streamDestroyed Ereignis für einen Stream ausgelöst wird, den Sie abonniert haben, werden die entsprechenden Abonnenten-Objekte (es kann mehr als eines geben) zerstört und aus dem HTML-DOM entfernt. Sie können dieses Standardverhalten verhindern, indem Sie die Funktion preventDefault() Methode des StreamEvent-Objekts:
session.on("streamDestroyed", function (event) {
event.preventDefault();
var subscribers = session.getSubscribersForStream(event.stream);
// Now you can adjust the DOM elements around each
// subscriber to the stream, and then delete it yourself.
});
Beachten Sie, dass die getSubscribersForStream() Methode eines Session-Objekts gibt alle Subscriber-Objekte für einen Stream zurück.
Wenn Sie verwandte DOM-Elemente anpassen möchten, bevor Sie den Abonnenten selbst löschen, können Sie das Standardverhalten verhindern und den Abonnenten beibehalten. Sie können dann das Subscriber-Objekt (und sein DOM-Element) löschen, indem Sie die Funktion destroy() Methode des Subscriber-Objekts.
Ein Subscriber-Objekt sendet eine destroyed Ereignis, wenn das Objekt aus dem HTML-DOM entfernt wurde. Als Reaktion auf dieses Ereignis können Sie DOM-Elemente anpassen (oder entfernen), die sich auf den entfernten Teilnehmer beziehen.
Wenn von anderen Clients veröffentlichte Streams eine Sitzung verlassen, wird die onStreamDropped(Session session, Stream stream) Methode des Session.SessionListener-Objekts aufgerufen wird. Wenn ein Stream gelöscht wird, wird die Ansicht für jedes Subscriber-Objekt für den Stream aus seiner Superview entfernt.
Erkennen, wenn das Video eines Abonnenten deaktiviert ist
Der Vonage Video Media Router unterbricht die Übertragung von Video an den Teilnehmer, wenn er eine Verschlechterung der Verbindung feststellt. Der Teilnehmer empfängt weiterhin den Audiostrom, sofern vorhanden. Der onVideoDisabled(Teilnehmer, Teilnehmer) Methode des SubscriberKit.VideoListener-Objekts wird aufgerufen, wenn der Vonage Video Media Router keine Videos mehr sendet:
Die reason gibt den Grund an, warum der Abonnent das Videostreaming beendet hat.
Wenn der Vonage Video Media Router das Video eines Teilnehmers deaktiviert, möchten Sie möglicherweise die Benutzeroberfläche für den Teilnehmer anpassen.
Die onVideoEnabled(Teilnehmer, Grund) Methode des SubscriberKit.VideoListener-Objekts wird aufgerufen, wenn das Video fortgesetzt wird:
Die reason identifiziert den Grund für die Wiederaufnahme des Videos des Abonnenten.
Wenn Sie einen Stream veröffentlichen, können Sie verhindern, dass das Video aufgrund der Streamqualität deaktiviert wird. Bevor Sie den Session.publish(publisher) Methode, rufen Sie die setAudioFallbackEnabled(boolean enabled) Methode des Publisher-Objekts (oder PublisherKit-Objekts) und übergeben Sie in false.
Wenn Ströme eine Sitzung verlassen, wird die OTSession session(_:streamDestroyed:) Nachricht gesendet wird. Wenn ein Stream gelöscht wird, wird die Ansicht für jedes OTSubscriber-Objekt für den Stream aus seiner Superview entfernt. Prüfen Sie, ob der Stream nicht von Ihrem eigenen Client veröffentlicht wird, und entfernen Sie seine Ansicht aus seiner Superview.
Erkennen, wenn das Video eines Abonnenten deaktiviert ist
Der Delegierte des Abonnenten sendet die OTSubscriberDelegate subscriberVideoDisabled(_:reason:) Nachricht, wenn das Video des Abonnenten deaktiviert ist:
Die reason kann auf eine der folgenden Konstanten gesetzt werden, die in der Aufzählung OTSubscriberVideoEventReason definiert sind:
OTSubscriberVideoEventPublisherPropertyChanged- Das Videoereignis wurde durch das Anhalten des Videostreams durch den Herausgeber des Streams verursacht.OTSubscriberVideoEventQualityChanged- Das Videoereignis wurde durch eine Änderung der Qualität des Video-Streams verursacht. Die Qualität des Videostroms kann sich aufgrund von Netzwerkbedingungen oder CPU-Auslastung beim Teilnehmer oder Herausgeber ändern. Dieser Grund wird nur in Sitzungen verwendet, bei denen der Medienmodus auf "geroutet" eingestellt ist. (Siehe Der Vonage Video Media Router und die Medienmodi.) Mit dieser Funktion des Vonage Video Media Routers kann ein Teilnehmer den Videostream unterbrechen, wenn sich die Qualität des Videostreams verschlechtert, und die Nachricht wird gesendet. Wenn sich die Bedingungen verbessern, wird der Videostream wieder aufgenommen, und dieOTSubscriberDelegate subscriberVideoEnabled(_:reason:)Nachricht gesendet wird. Wenn der Videostream unterbrochen wird, empfängt der Abonnent weiterhin den Audiostream, sofern ein solcher vorhanden ist.OTSubscriberVideoEventSubscriberPropertyChanged- Das Videoereignis wurde durch eine Änderung derOTSubscriber subscribeToVideoEigentum.
Wenn der Videostream wieder aufgenommen wird, wird die OTSubscriberDelegate subscriberVideoEnabled(_:reason:) Nachricht gesendet wird.
Wenn Sie einen Stream veröffentlichen, können Sie verhindern, dass das Video aufgrund der Streamqualität deaktiviert wird. Bevor Sie den OTSession publish(_:error:) Methode, setzen Sie die audioFallbackEnabled Eigenschaft des Publisher-Objekts (oder des PublisherKit-Objekts) auf false.
Die [OTSessionDelegate session:streamCreated:] Nachricht wird gesendet, wenn ein neuer Stream in einer Sitzung erstellt wird. (Ein Stream wird erstellt, wenn ein Client veröffentlicht einen Stream zur Sitzung). Die OTStream-Objekt hat Eigenschaften, die den Stream definieren. Vergleichen Sie die connection Eigenschaft des OTStream-Objekts mit der connection Eigenschaft des OTSession-Objekts, um festzustellen, ob der Stream von Ihrem Client veröffentlicht wurde:
Wenn von anderen Clients veröffentlichte Streams eine Sitzung verlassen, sendet das Sitzungsobjekt eine StreamDropped Veranstaltung:
Die Ereignisargumente, die an dieses Objekt übergeben werden, sind durch die Klasse OpenTok.Session.StreamEventArgs definiert. Diese Klasse enthält eine Stream Eigenschaft. Vergleichen Sie dies Stream Objekt zum Stream Eigenschaft jedes Subscriber-Objekts, um den Abonnenten des Streams zu identifizieren.
Erkennen, wenn das Video eines Abonnenten deaktiviert ist
Der Vonage Video Media Router unterbricht die Übertragung von Video an den Teilnehmer, wenn er eine Verschlechterung der Verbindung feststellt. Der Abonnent empfängt weiterhin den Audiostrom, sofern vorhanden. Wenn der Vonage Video Media Router das Senden von Video stoppt, sendet das Subscriber-Objekt eine VideoDisabled Veranstaltung:
Wenn der Vonage Video Media Router das Video eines Teilnehmers deaktiviert, möchten Sie möglicherweise die Benutzeroberfläche für den Teilnehmer anpassen.
Das Subscriber-Objekt sendet eine VideoDisabled Ereignis, wenn das Video fortgesetzt wird:
Die on_stream_dropped Callback-Funktion des otc_session_callbacks struct wird aufgerufen, wenn der Stream eines anderen Clients von der Vonage Video-Sitzung getrennt wird. Die stream Parameter, der an diese Funktion übergeben wird, ist ein Zeiger auf eine otc_stream Struktur für den Stream. Rufen Sie die otc_stream_get_id() Methode und übergibt dabei die otc_stream struct, um die Stream-ID zu erhalten.
Erkennen, wenn das Video eines Streams deaktiviert ist
Die on_stream_has_video_changed Callback-Funktion des otc_session_callbacks struct wird aufgerufen, wenn der Stream eines anderen Clients von der Vonage Video-Sitzung getrennt wird. Die stream Parameter, der an diese Funktion übergeben wird, ist ein Zeiger auf eine otc_stream Struktur für den Stream. Rufen Sie die otc_stream_get_id() Methode und übergibt dabei die otc_stream struct, um die Stream-ID zu erhalten.
Fehlersuche (JavaScript)
Tipps zum Umgang mit Anmeldefehlern und Konnektivitätsproblemen.
Allgemeine Informationen zur Fehlerbehebung finden Sie unter Fehlersuche.
Umgang mit Fehlern
Es gibt nur eine Möglichkeit, sich anzumelden - mit Session.subscribe()-und die meisten Fehler sind netzwerkbedingt. Wenn der Teilnehmer keine Verbindung herstellen kann, zeigt er seine eigene Fehlermeldung an, aber es ist besser, wenn Sie selbst eine klare Meldung anzeigen:
session.subscribe(event.stream, 'subscriber', {insertMode: 'append'}, function (err) {
if (err) {
showMessage('Streaming connection failed. This could be due to a restrictive firewall.');
}
});
Verlust der Konnektivität
Ein Subscriber kann seine Verbindung verlieren, nachdem er sich verbunden hat. Behandeln Sie die streamDestroyed Ereignis auf der Sitzung, wenn der Grund ist networkDisconnected und informieren den Nutzer, ohne den Abonnenten sofort zu entfernen:
session.on({
streamDestroyed: function (event) {
if (event.reason === 'networkDisconnected') {
event.preventDefault();
var subscribers = session.getSubscribersForStream(event.stream);
if (subscribers.length > 0) {
var subscriber = document.getElementById(subscribers[0].id);
subscriber.innerHTML = 'Lost connection. This could be due to your internet connection or because the other party lost their connection.';
event.preventDefault();
}
}
}
});
Für die Behandlung von Teilnehmerereignissen und Laufzeiteinstellungen (Audio blockiert, Video deaktiviert, Statistiken), siehe Abonnieren: Management & Veranstaltungen.