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

  • OTSubscriberVideoEventPublisherPropertyChanged
  • OTSubscriberVideoEventQualityChanged
  • OTSubscriberVideoEventSubscriberPropertyChanged

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 Verlagswesen
  • creationTime - Zeitstempel
  • hasAudio - Bool
  • hasVideo - Bool
  • name - Optionaler Streamname
  • session - Assoziierte Sitzung
  • streamId - Eindeutige ID
  • videoDimensions - CGS-Größe
  • videoType - 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.preferredFrameRate
  • SubscriberKit.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() - Anschlussobjekt
  • getCreationTime() - Zeitstempel der Erstellung
  • hasAudio() - boolesch
  • hasVideo() - boolesch
  • getName() - Name des Stroms
  • getStreamId() - Eindeutige ID
  • getVideoHeight() - Höhe in Pixel
  • getVideoWidth() - Breite in Pixel
  • getVideoType() - 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 Verlagswesen
  • CreationTime - Zeitstempel der Stream-Erstellung
  • HasAudio - Ob der Stream Audio enthält
  • HasVideo - Ob der Stream Video enthält
  • Name - Name des Stroms
  • Id - Eindeutige Stream-ID
  • Height - Höhe des Videos in Pixeln
  • Width - Videobreite in Pixel
  • VideoSourceType - Kamera, Bildschirmfreigabe oder benutzerdefinierter Quellentyp

Möglicherweise VideoSourceType Werte:

  • VideoSourceType.StreamVideoTypeCamera
  • VideoSourceType.StreamVideoTypeScreen
  • VideoSourceType.StreamVideoTypeCustom

Überwachung der Statistiken

Verwenden Sie diese Ereignisse zur Überwachung der Stream-Statistiken:

  • Subscriber.AudioStatsUpdated
  • Subscriber.VideoStatsUpdated
  • Subscriber.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.PreferredFramerate
  • Subscriber.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ück
  • otc_stream_get_creation_time() - Gibt den Zeitstempel der Stream-Erstellung zurück
  • otc_stream_has_audio() - Ob der Stream Audio veröffentlicht
  • otc_stream_has_video() - Ob der Stream 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 Streamnamen zurück
  • otc_stream_get_id() - Gibt die eindeutige Stream-ID zurück
  • otc_stream_get_video_height() - Gibt die Videohöhe in Pixeln zurück
  • otc_stream_get_video_width() - Gibt die Videobreite in Pixeln zurück
  • otc_stream_get_video_type() - Gibt den Stream-Videotyp zurück

Mögliche Videotypen:

  • OTC_STREAM_VIDEO_TYPE_CAMERA
  • OTC_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()