Streams abonnieren — iOS

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 [OTSubscriberKitDelegate subscriberDidDisconnectFromStream:] Die Nachricht wird an den Delegaten des OTSubscriberKit-Objekts gesendet. Sobald die Verbindung wiederhergestellt ist, wird die [OTSubscriberKitDelegate subscriberDidReconnectToStream:] 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:
- (void)subscriberDidDisconnectFromStream:(OTStream*)stream
{
  // Display a user interface notification.
}

- (void)subscriberDidReconnectToStream:(OTStream*)stream
{
  // Adjust user interface.
}

// OTSession delegate callback:
- (void)session:(OTSession*)session session:streamDestroyed:(OTStream*)stream
{
  // Adjust user interface.
}

Erkennung von Streams in einer Sitzung

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:

- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
    NSLog(@"session streamCreated (%@)", stream.streamId);

    // See the declaration of subscribeToSelf above.
    if ([stream.connection.connectionId isEqualToString: 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 initWithStream:] und übergibt ein OTStream-Objekt und ein Delegate-Objekt, das die Nachrichten der Abonnenten empfängt. Rufen Sie dann die[OTSession subscribe:error] um das Abonnieren des Streams zu starten:

- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
    subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
    OTError* error = nil;
    [session subscribe:subscriber error:&error]
    if (error) {
      NSLog(@"subscribe failed with error: (%@)", error);
    }
}

Die [OTSubscriberDelegate subscriberDidConnectToStream:] 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:

	- (void)subscriberDidConnectToStream:(OTSubscriber*)subscriber
	{
	    [subscriber.view setFrame:CGRectMake(0, 300, 400, 300)];
	    [self.view addSubview:subscriber.view];
	}

Abmelden von einem Stream

Um die Wiedergabe eines Streams, den Sie abonniert haben, zu beenden, rufen Sie die Funktion [OTSession unsubscribe:error:] Methode:

    OTError* error = nil;
    [session unsubscribe:_subscriber error:&error]
    if (error) {
      NSLog(@"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.

- (void)session:(OTSession*)session streamDestroyed:(OTStream *)stream
{
    NSLog(@"session streamDestroyed (%@)", stream.streamId);

    if ([subscriber.stream.streamId isEqualToString: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:

- (void)subscriberVideoDisabled:(OTSubscriber *)subscriber
                         reason:(OTSubscriberVideoEventReason)reason
{
    NSLog(@"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 [OTSubscriberKit 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 OTSubscriberKit.subscribeToVideo Eigentum.

Wenn der Videostream wieder aufgenommen wird, wird die [OTSubscriberKit 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 PublisherKit-Objekts) auf NO.

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 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 OpenTok-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, mit dem das OTSubscriberKit-Objekt die Statistiken für den Stream eines Abonnenten überwacht. Um Stream-Statistiken auf niedriger Ebene abzurufen, verwenden Sie die [OTSubscriberKit getRtcStatsReport:] Methode.

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.