Abonnieren: Management & Veranstaltungen
Dieser Leitfaden behandelt die Steuerung des Verhaltens von Abonnenten und die Reaktion auf Laufzeitereignisse.
Verwalten von Abonnenten-Streams (React Native)
Erkennen, wenn sich die Videodimensionen eines Streams ändern
Die Videoabmessungen eines Streams können sich ändern, wenn ein von einem Mobilgerät veröffentlichter Stream in der Größe angepasst wird (beispielsweise aufgrund von Änderungen der Geräteausrichtung) oder wenn die Größe eines Quellfensters bei der Bildschirmfreigabe angepasst wird.
Wenn sich die Videoabmessungen eines Streams ändern, wird die Session Objekt sendet eine streamPropertyChanged Veranstaltung, mit changedProperty eingestellt auf videoDimensions.
<OTSubscriber
eventHandlers={{
streamVideoDimensionsChanged: (event) => {
console.log('stream video dimensions changed -- stream ID:', event.streamId);
console.log('new dimensions:', event.width, 'x', event.height);
},
}}
/>
Einstellen der bevorzugten Bildrate und Auflösung
Beim Abonnieren eines Streams, der die skalierbares Video Mit dieser Funktion können Sie preferredResolution zu 'auto' um die Videoauflösung der Abonnenten automatisch zu verwalten und die CPU- und Netzwerkauslastung zu optimieren.
Für erweiterte Steuerungsmöglichkeiten legen Sie die gewünschte Bildrate und Auflösung für den abonnierten Stream fest:
<OTSubscriber
properties={{
preferredFrameRate: 15,
preferredResolution: { width: 640, height: 480 },
}}
/>
Dies sind Empfehlungen, keine Vorschriften. Der Media Router wählt die nächstgelegene verfügbare Schicht aus, die den tatsächlichen Netzwerkbedingungen des Teilnehmers entspricht. Sie haben keine Auswirkungen auf weitergeleitete Sitzungen, wenn skalierbares Video deaktiviert ist oder wenn der ausgehandelte Codec H.264 ist. Weitere Techniken zur Reduzierung des Ressourcenverbrauchs bei großen Sitzungen finden Sie unter Anleitung zur Einzelverbindung zwischen Peers.
Erkennen, wenn Streams eine Sitzung verlassen
Wenn ein Remote-Stream eine Sitzung verlässt, wird die OTSubscriber Komponente versendet eine streamDestroyed Veranstaltung. Die Veranstaltung umfasst unter anderem folgende Details: streamId, name, reason, hasAudio, hasVideound videoType. Ausführliche Informationen zur Veranstaltung und deren reason Werte, siehe Diagnosehandbuch abonnieren.
<OTSubscriber
eventHandlers={{
streamDestroyed: (event) => {
console.log('Stream stopped. Reason: ' + event.reason);
},
}}
/>
Benutzerdefiniertes Rendering von Abonnenten
Standardmäßig, OTSubscriber rendet untergeordnete Ansichten für Abonnentenvideos. Sie können auch eine Render-Funktion bereitstellen, um das Rendern mithilfe von renderView:
<OTSubscriber
renderView={(streamId) => (
<View style={styles.subscriberTile}>
<OTSubscriberView streamId={streamId} style={styles.video} />
</View>
)}
/>
Stream-Eigenschaften einstellen
Legen Sie globale Eigenschaften für alle Abonnenten über die subscriberProperties aufstützen OTSession, oder legen Sie streamspezifische Eigenschaften über die properties aufstützen OTSubscriber. Die vollständige Liste der verfügbaren Immobilien finden Sie unter OTSubscriber-API-Referenz.
// Global defaults for all subscribers in the session
<OTSession
subscriberProperties={{
subscribeToAudio: true,
subscribeToVideo: true,
}}
/>
// Per-stream override
<OTSubscriber
properties={{
subscribeToAudio: true,
subscribeToVideo: false,
}}
/>
Verwalten von Abonnentenströmen (iOS Swift)
Verwalten Sie Abonnenten, behandeln Sie Ereignisse und passen Sie Einstellungen in iOS an.
Erkennen, wenn das Video eines Abonnenten deaktiviert ist
func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
print("subscriber video disabled.")
}
Mögliche Gründe
OTSubscriberVideoEventPublisherPropertyChangedOTSubscriberVideoEventQualityChangedOTSubscriberVideoEventSubscriberPropertyChanged
Wenn das Video fortgesetzt wird:
func subscriberVideoEnabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
print("subscriber video enabled.")
}
Informationen über einen Stream erhalten
Die OTStream Objekt umfasst:
connection- Die Verbindung zum VerlagswesencreationTime- ZeitstempelhasAudio- BoolhasVideo- Boolname- Optionaler Streamnamesession- Assoziierte SitzungstreamId- Eindeutige IDvideoDimensions- CGS-GrößevideoType- Kamera, Bildschirm, oder benutzerdefiniert
Sie können Statistiken überwachen mit OTSubscriberKitNetworkStatsDelegate.
Siehe die Leitfaden zur Beobachtung der Kunden für weitere Einzelheiten.
Einstellen der bevorzugten Bildrate und Auflösung
Für skalierbare Videostreams können Sie die Einstellungen vornehmen:
SubscriberKit.preferredFrameRateSubscriberKit.preferredResolution
Verwaltung von Abonnentenströmen (JavaScript)
Einschränken der Bildrate eines abonnierten Streams
Sie können auch die Bildrate des Videostreams eines Abonnenten begrenzen.
Um die Bildrate eines Teilnehmers zu begrenzen, rufen Sie die restrictFrameRate() Methode des Subscriber-Objekts, wobei true:
subscriber.restrictFrameRate(true);
Einreichen false und die Bildrate des Videostreams ist nicht begrenzt:
subscriber.restrictFrameRate(false);
Wenn die Bildrate begrenzt ist, wird das Video des Abonnenten höchstens einmal pro Sekunde aktualisiert. Diese Funktion ist nur verfügbar in weitergeleitete Sitzungen. Bei weitergeleiteten 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 Verringerung der Bildrate eines Teilnehmers hat keine Auswirkungen auf die Bildrate des Videos bei anderen Clients. Weitere Methoden zur Reduzierung des Ressourcenverbrauchs bei großen Sitzungen finden Sie unter Anleitung zur Einzelverbindung zwischen Peers.
Erkennen, wann das Audio eines Teilnehmers blockiert oder freigegeben ist
Einige Browser blockieren die Audiowiedergabe automatisch, bis der Nutzer mit der Seite interagiert. Eine vollständige Anleitung zum Umgang mit blockierten Audiodateien, einschließlich der Deaktivierung der Standard-Wiedergabetaste und der Anzeige einer eigenen Benutzeroberfläche, finden Sie unter Anzeige eines benutzerdefinierten UI-Elements, wenn Teilnehmer-Audio blockiert ist.
Außerdem fügt der Abonnent ein isAudioBlocked() Methode, die Folgendes zurückgibt true falls der Ton blockiert ist oder false falls dies nicht der Fall ist.
Erkennen, wenn das Video eines Abonnenten deaktiviert ist
Wenn das Video des Abonnenten deaktiviert wird, löst das „Subscriber“-Objekt ein videoDisabled Ereignis. Wenn der Media Router das Video eines Teilnehmers deaktiviert, möchten Sie möglicherweise die Benutzeroberfläche für diesen Teilnehmer anpassen.
Die reason Eigenschaft der videoDisabled Das Ereignisobjekt gibt den Grund an, warum das Video deaktiviert wurde ('publishVideo', 'quality', oder 'subscribeToVideo'). Eine ausführliche Beschreibung der einzelnen Gründe finden Sie unter Diagnosehandbuch abonnieren. Bevor das Video aufgrund von quality, der Abonnent versendet eine videoDisableWarning Ereignis. Um zu verhindern, dass die Videoübertragung eines Streams aus Qualitätsgründen deaktiviert wird, lesen Sie den Abschnitt Leitfaden zum Audio-Fallback für Abonnenten.
subscriber.on('videoDisableWarning', () => {
showConnectionWarning(subscriber.id);
});
subscriber.on('videoDisableWarningLifted', () => {
hideConnectionWarning(subscriber.id);
});
subscriber.on('videoDisabled', (event) => {
if (event.reason === 'quality') {
showVideoDisabledOverlay(subscriber.id);
}
});
subscriber.on('videoEnabled', () => {
hideVideoDisabledOverlay(subscriber.id);
});
Standardmäßig zeigt der Abonnent seine eigene Anzeige für deaktivierte Videos an, wenn quality ist der Grund dafür. Um es durch Ihre eigene Benutzeroberfläche zu ersetzen, legen Sie Folgendes fest: style.videoDisabledDisplayMode zu 'off' in den Abonnementoptionen. Informationen zum codec-spezifischen Verhalten (z. B. warum H.264-Streams nicht vom qualitätsbasierten Fallback betroffen sind) finden Sie unter Video-Codecs-Leitfaden.
Abonnentenstatistiken abrufen (Web)
Die getStats() Die Methode eines „Subscriber“-Objekts liefert Ihnen Informationen zum Stream des Abonnenten. Eine vollständige Liste der verfügbaren Felder finden Sie in der Diagnosehandbuch abonnieren.
Der folgende Code protokolliert die Verlustquoten und Bitraten jede Sekunde:
window.setInterval(() => {
subscriber.getStats((error, stats) => {
if (error) {
console.error('Error getting subscriber stats:', error.message);
return;
}
if (stats.video) {
console.log('video bitrate:', stats.video.bitrate, 'bps');
const total = stats.video.packetsLost + stats.video.packetsReceived;
console.log('video packet loss ratio:', total > 0 ? stats.video.packetsLost / total : 0);
}
if (stats.audio) {
console.log('audio bitrate:', stats.audio.bitrate, 'bps');
}
});
}, 1000);
Um Statistiken für einen vom lokalen Client veröffentlichten Stream abzurufen, müssen Sie eine geroutete Sitzung verwenden und die testNetwork Option zu true Bei der Anmeldung:
const subscriber = session.subscribe(stream, 'container', {
testNetwork: true,
});
Um detailliertere Stream-Statistiken zu erhalten, verwenden Sie subscriber.getRtcStatsReport(). Eine vollständige Beschreibung aller verfügbaren Felder finden Sie in der Leitfaden zur Client-Observability.
Einstellen der bevorzugten Bildrate und Auflösung (Web)
Beim Abonnieren eines Streams, der die skalierbares Video Mit dieser Funktion können Sie preferredResolution zu 'auto' um die Videoauflösung der Abonnenten automatisch zu verwalten und die CPU- und Netzwerkauslastung zu optimieren. Eine ausführliche Erläuterung zur Funktionsweise dieser Hinweise, zu den unterstützten Werten und zu den Einschränkungen finden Sie unter Skalierbare Videoanleitung.
Satz preferredResolution und preferredFrameRate in den Optionen, die Sie an Session.subscribe() (oder verwende Subscriber.setPreferredResolution() und Subscriber.setPreferredFrameRate() (nach der Anmeldung):
// Set at subscribe time using 'auto' (recommended)
const subscriber = session.subscribe(stream, 'container', {
preferredResolution: 'auto',
});
// Or set explicitly after subscribing
subscriber.setPreferredResolution({ width: 1280, height: 720 });
subscriber.setPreferredFrameRate(30);
// Downgrade for a thumbnail tile
subscriber.setPreferredResolution({ width: 320, height: 240 });
subscriber.setPreferredFrameRate(7);
Verwalten von Abonnentenströmen (Android)
Verwalten Sie Abonnenten, behandeln Sie Ereignisse und passen Sie Einstellungen in Android an.
Erkennen, wenn das Video eines Abonnenten deaktiviert ist
Wenn Video deaktiviert ist:
override fun onVideoDisabled(subscriber: SubscriberKit, reason: String) {
// Video disabled
}
Wenn das Video fortgesetzt wird:
override fun onVideoEnabled(subscriber: SubscriberKit, reason: String) {
// Video resumed
}
Die reason Parameter erklärt, warum die Änderung aufgetreten ist.
Informationen über einen Stream erhalten
Die Stream Objekt bietet:
getConnection()- AnschlussobjektgetCreationTime()- Zeitstempel der ErstellunghasAudio()- booleschhasVideo()- booleschgetName()- Name des StromsgetStreamId()- Eindeutige IDgetVideoHeight()- Höhe in PixelgetVideoWidth()- Breite in PixelgetVideoType()- Kamera, Bildschirmfreigabe oder benutzerdefiniert
Sie können auch Statistiken überwachen:
setAudioStatsListener()setVideoStatsListener()setMediaLinkStatsListener()getRtcStatsReport()
Einstellen der bevorzugten Bildrate und Auflösung
Für skalierbare Videostreams können Sie Einstellungen vornehmen:
SubscriberKit.setPreferredFrameRate()SubscriberKit.setPreferredResolution()
Verwalten von Abonnentenströmen (Windows)
Verwalten Sie Abonnenten, behandeln Sie Ereignisse und passen Sie Einstellungen in Windows an.
Erkennen, wenn das Video eines Abonnenten deaktiviert ist
Der OpenTok Media Router kann die Übertragung von Videos unterbrechen, wenn sich die Netzwerkbedingungen verschlechtern.
Der Teilnehmer empfängt weiterhin Audio, sofern verfügbar.
Wenn Video deaktiviert ist, wird die Subscriber Objekt sendet eine VideoDisabled Veranstaltung:
subscriber.VideoDisabled += Subscriber_VideoDisabled;
public void Subscriber_VideoDisabled(object sender)
{
// Display a user interface notification.
}
Wenn das Video fortgesetzt wird:
subscriber.VideoEnabled += Subscriber_VideoEnabled;
public void Subscriber_VideoEnabled(object sender)
{
// Video resumes for the subscriber.
}
Möglicherweise möchten Sie die Benutzeroberfläche als Reaktion auf diese Ereignisse anpassen.
Informationen über einen Stream erhalten
Die Stream Objekt weist die folgenden Eigenschaften auf:
Connection- Die Verbindung zum VerlagswesenCreationTime- Zeitstempel der Stream-ErstellungHasAudio- Ob der Stream Audio enthältHasVideo- Ob der Stream Video enthältName- Name des StromsId- Eindeutige Stream-IDHeight- Höhe des Videos in PixelnWidth- Videobreite in PixelVideoSourceType- Kamera, Bildschirmfreigabe oder benutzerdefinierter Quellentyp
Möglicherweise VideoSourceType Werte:
VideoSourceType.StreamVideoTypeCameraVideoSourceType.StreamVideoTypeScreenVideoSourceType.StreamVideoTypeCustom
Überwachung der Statistiken
Verwenden Sie diese Ereignisse zur Überwachung der Stream-Statistiken:
Subscriber.AudioStatsUpdatedSubscriber.VideoStatsUpdatedSubscriber.MediaLinkStatsUpdated
Zum Abrufen von RTC-Statistiken auf niedriger Ebene:
subscriber.GetRtcStatsReport();
Einstellen der bevorzugten Bildrate und Auflösung
Für Streams, die die skalierbare Videofunktion verwenden, konfigurieren Sie:
Subscriber.PreferredFramerateSubscriber.PreferredResolution
Verwalten von Abonnentenströmen (Linux)
Verwalten Sie Abonnenten, behandeln Sie Ereignisse und passen Sie Einstellungen unter Linux an.
Erkennen, wenn das Video eines Streams deaktiviert ist
Die on_stream_has_video_changed Callback-Funktion des otc_session_callbacks struct wird aufgerufen, wenn sich die Videoverfügbarkeit eines Streams ändert.
Die stream Parameter ist ein Zeiger auf ein otc_stream Struktur.
Verwendung:
otc_stream_get_id(stream)
um die Stream-ID abzurufen.
Informationen über einen Stream erhalten
Verwenden Sie die folgenden Funktionen zum Abrufen von Stream-Informationen:
otc_stream_get_connection()- Gibt die Veröffentlichungsverbindung zurückotc_stream_get_creation_time()- Gibt den Zeitstempel der Stream-Erstellung zurückotc_stream_has_audio()- Ob der Stream Audio veröffentlichtotc_stream_has_video()- Ob der Stream ein Video veröffentlichtotc_stream_has_audio_track()- ob der Stream eine Tonspur hatotc_stream_has_video_track()- Ob der Stream eine Videospur hatotc_stream_get_name()- Gibt den Streamnamen zurückotc_stream_get_id()- Gibt die eindeutige Stream-ID zurückotc_stream_get_video_height()- Gibt die Videohöhe in Pixeln zurückotc_stream_get_video_width()- Gibt die Videobreite in Pixeln zurückotc_stream_get_video_type()- Gibt den Stream-Videotyp zurück
Mögliche Videotypen:
OTC_STREAM_VIDEO_TYPE_CAMERAOTC_STREAM_VIDEO_TYPE_SCREEN
Überwachung der Statistiken
Verwenden Sie diese Teilnehmer-Rückruffunktionen:
on_audio_stats()on_video_stats()on_media_link_stats()
Um RTC-Statistiken auf niedriger Ebene abzurufen, verwenden Sie:
otc_subscriber_get_rtc_stats_report()
Einstellen der bevorzugten Bildrate und Auflösung
Für Streams, die die skalierbare Videofunktion verwenden, können Sie die bevorzugte Bildrate und Auflösung mit einstellen:
otc_subscriber_set_preferred_framerate()otc_subscriber_set_preferred_resolution()