Streams abonnieren — iOS (Swift)

Sobald Sie mit einer Sitzung verbunden, können Sie Streams in der Sitzung abonnieren. Wenn Sie einen Stream abonnieren, können Sie dessen Videoansicht in die App einbinden.

Dieses Thema umfasst die folgenden Abschnitte:

Automatische Wiedereinschaltung

Wenn ein Client die Verbindung zu einem abonnierten Stream verliert (beispielsweise aufgrund einer Unterbrechung der Netzwerkverbindung bei einem der beiden Clients), versucht er, die Verbindung zum Stream automatisch wiederherzustellen. Wenn die Verbindung zum Stream unterbrochen wird und der Client versucht, die Verbindung wiederherzustellen, wird die OTSubscriberDelegate subscriberDidDisconnect(fromStream:) Die Nachricht wird an den Delegaten des OTSubscriber-Objekts gesendet. Sobald die Verbindung wiederhergestellt ist, wird die OTSubscriberDelegate subscriberDidReconnect(toStream:) Nachricht gesendet wird. Wenn der Client die Verbindung nicht wiederherstellen kann, wird die OTSessionDelegate session(_:streamDestroyed:) Nachricht gesendet wird.

Als Reaktion auf diese Ereignisse kann Ihre Anwendung (optional) Benachrichtigungen auf der Benutzeroberfläche anzeigen, die den Zustand der vorübergehenden Unterbrechung, der Wiederverbindung und der Trennung der Verbindung angeben.

// OTSubscriber delegate callbacks:
func subscriberDidDisconnect(fromStream subscriber: OTSubscriberKit) {
  // Display a user interface notification.
}

func subscriberDidReconnect(toStream subscriber: OTSubscriberKit) {
  // Adjust user interface.
}

// OTSession delegate callback:
func session(_ session: OTSession, streamDestroyed stream: OTStream) {
  // Adjust user interface.
}

Erkennung von Streams in einer Sitzung

Die OTSessionDelegate session(_ 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:

func session(_ session: OTSession, streamCreated stream: OTStream) {
    print("Session streamCreated: \(stream.streamId)")

    // See the declaration of subscribeToSelf above.
    if stream.connection.connectionId == session.connection.connectionId {
        // This is my own stream
    } else {
        // This is a stream from another client.
    }
}

Sie können einen Stream abonnieren, um ihn in Ihrer App anzuzeigen. Weitere Informationen finden Sie im nächsten Abschnitt.

Einen Stream abonnieren

Um einen Stream zu abonnieren, rufen Sie die OTSubscriber init(stream:delegate:) und übergibt ein OTStream-Objekt und ein Delegate-Objekt, das die Nachrichten der Abonnenten empfängt. Rufen Sie dann dieOTSession subscribe(_:error:) um das Abonnieren des Streams zu starten:

func session(_ session: OTSession, streamCreated stream: OTStream) {
    subscriber = OTSubscriber(stream: stream, delegate: self)
    var error: OTError?
	session.subscribe(subscriber!, error: &error)
	
    if error {
      print("subscribe failed with error: \(error)")
    }
}

Die OTSubscriberDelegate subscriberDidConnect(toStream:) Nachricht wird gesendet, wenn die App beginnt, den Stream des Abonnenten zu empfangen. Zu diesem Zeitpunkt können Sie die Ansicht des Abonnenten (dargestellt durch das Feld OTSubscriber view Eigenschaft) an die App:

func subscriberDidConnect(toStream subscriber: OTSubscriberKit) {
	if let subscriberView = self.subscriber?.view {
		subscriberView.frame = CGRect(x: 0, y: 300, width: 400, height: 300)
		self.view.addSubview(subscriberView)
	}
}

Abmelden von einem Stream

Um die Wiedergabe eines Streams, den Sie abonniert haben, zu beenden, rufen Sie die Funktion OTSession unsubscribe(_:error:) Methode:

var error: OTError?
session.unsubscribe(subscriber, error: &error)
if (error) {
    print("unsubscribe failed with error: \(error)")
}

Die Verbindung des Abonnenten ist unterbrochen. Entfernen Sie als Nächstes seine Ansicht aus seiner Superview:

subscriber.view?.removeFromSuperview()

Erkennen, wann Streams eine Sitzung verlassen

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.

func session(_ session: OTSession, streamDestroyed stream: OTStream) {
    print("Session streamDestroyed: \(stream.streamId)")

    if subscriber?.stream?.streamId == stream.streamId {
        subscriber?.view?.removeFromSuperview()
        subscriber = nil
    }
}

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:

func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
    print("subscriber video disabled.")
}

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 OpenTok Media Router und die Medienmodi.) Diese Funktion des OpenTok Media Routers sorgt dafür, dass ein Teilnehmer den Videostream unterbricht, sobald sich die Qualität des Videostreams verschlechtert, und eine entsprechende Meldung gesendet wird. Sobald sich die Bedingungen wieder verbessern, wird der Videostream fortgesetzt, und der OTSubscriberDelegate 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 der OTSubscriber subscribeToVideo Eigentum.

Wenn der Videostream wieder aufgenommen wird, wird die OTSubscriberDelegate subscriberVideoEnabled(_:reason:) Nachricht gesendet wird.

Wenn Sie einen Stream veröffentlichen, können Sie den Audio-Fallback für Publisher und Subscriber aktivieren oder deaktivieren. Die Audio-Fallback-Funktion deaktiviert die Videoübertragung (bei Publishern und Subscribern), wenn die Netzwerk- oder CPU-Bedingungen die Videoübertragung nicht zulassen. Siehe Audio-Fallback (Web).

Informationen zu einem Stream abrufen

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 dem connection Eigenschaft 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 OpenTok-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, mit dem das OTSubscriberKit-Objekt die Statistiken für den Stream eines Abonnenten überwacht.

Siehe das Handbuch für Entwickler von Client Observability für detaillierte Informationen.

Einstellung der bevorzugten Bildrate und Auflösung

Beim Abonnieren eines Streams, der die Skalierbare Videofunktion, können Sie die gewünschte Bildrate und Auflösung für den Stream festlegen, den der abonnierende Client vom OpenTok Media Router empfängt. Weitere Informationen finden Sie unter SubscriberKit.preferredFrameRate und SubscriberKit.preferredResolution.

Anmerkung: Diese Einstellungen setzen voraus, dass der Publisher das Standardlayout der Skalierbarkeitsschicht verwendet. Falls der Publisher einen vom Standard abweichenden Zielskalierbarkeitsmodus festgelegt hat (siehe Festlegen des Zielskalierbarkeitsmodus), stimmt die vom Media Router gewählte Ebene möglicherweise nicht mit der angeforderten Auflösung oder Bildrate überein. Siehe Anpassung an die vom Teilnehmer bevorzugte Auflösung und Bildfrequenz für Einzelheiten.