Streams veröffentlichen – iOS

Sobald Sie mit einer Sitzung verbundenkönnen Sie einen Stream veröffentlichen, den andere mit der Sitzung verbundene Clients anzeigen können.

Dieses Thema umfasst die folgenden Abschnitte:

Initialisierung eines OTPublisher-Objekts

Die OTPublisher Das Objekt dient dazu, einen Audio-Video-Stream vom Mikrofon und der Kamera des Geräts für die Verwendung in einer OpenTok-Sitzung zu erfassen. Das view des Objekts enthält die Ansicht des von Ihnen veröffentlichten Videos:

OTPublisher publisher = [[OTPublisher alloc]
                      initWithDelegate:self
                      settings:[[OTPublisherSettings alloc] init]];
[self.view addSubview:publisher.view];
[publisher.view setFrame:CGRectMake(0, 0, 200, 150)];

Implementieren Sie die Methoden des OTPublisherDelegate-Protokolls in dem Objekt, das Sie als Delegate-Objekt angeben. Diese Methoden werden aufgerufen, wenn verlagsbezogene Ereignisse auftreten.

Übergeben Sie das Publisher-Objekt an die [OTSession publish:error] Methode zum Veröffentlichen eines Streams in einer Sitzung. Siehe Veröffentlichen eines Streams.

Sie können weitere Eigenschaften des OTPublisherSettings-Objekts festlegen, um benutzerdefinierte Einstellungen für den Publisher zu definieren:

OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.name = @"Bob's video";
_publisherSettings.audioTrack = NO;
_publisherSettings.videoTrack = YES;
_publisherSettings.cameraResolution = OTCameraCaptureResolutionHigh;
_publisherSettings.cameraFrameRate = OTCameraCaptureFrameRate30FPS;
_publisher = [[OTPublisher alloc]
              initWithDelegate:self
              settings:_publisherSettings];

Beachten Sie, dass in Sitzungen, die den OpenTok Media Router verwenden (Sitzungen mit dem Medienbetrieb Wenn der Medienmodus auf geroutet eingestellt ist, wird durch die Verringerung der Bildrate die vom Stream verwendete Bandbreite proportional reduziert. In Sitzungen, bei denen der Medienmodus auf "Relayed" eingestellt ist, wird die Bandbreite des Streams durch die Verringerung der Bildrate jedoch nicht verringert.

Sie können einen benutzerdefinierten Video-Capturer verwenden, um einen Stream mit einer benutzerdefinierten Videoquelle zu veröffentlichen - siehe Verwendung eines benutzerdefinierten Video-Capturers. Sie können den benutzerdefinierten Video-Capturer auch verwenden, um einen Screen-Sharing-Stream zu veröffentlichen - siehe Bildschirmfreigabe.

Sie können auch eine benutzerdefinierte Audioquelle für den veröffentlichten Stream verwenden - siehe Verwendung eines benutzerdefinierten Audiotreibers.

Einstellung der maximalen Bitrate für einen Stream

Sie können die maximale Bitrate für einen veröffentlichten Stream festlegen. Die Festlegung der maximalen Bitrate kann dazu beitragen, den Bandbreitenverbrauch zu reduzieren, wenn ein Nutzer über eine gebührenpflichtige Verbindung zugreift. Siehe diese Dokumentation.

Prüfen, ob ein Client über Veröffentlichungsfunktionen verfügt

Sobald Sie eine Verbindung zu einer Sitzung hergestellt haben, können Sie überprüfen, ob der Client Daten veröffentlichen kann. Überprüfen Sie den Wert des [OTSession.capablilites.canPublish:] Eigenschaft. Wenn sie auf YESkann der Client veröffentlichen:

if (session.capabilities.canPublish) {
    // The client can publish.
} else {
    // The client cannot publish.
    // You may want to notify the user.
}

Um zu veröffentlichen, muss der Client eine Verbindung zur Sitzung mit einem Token herstellen, dem eine Rolle zugewiesen ist, die die Veröffentlichung unterstützt. Siehe die Token-Erstellung Übersicht.

Kamera-Zugriff prüfen

Wir empfehlen Ihnen, vor der Veröffentlichung zu überprüfen, ob die App Zugriff auf die Kamera hat, und dem Endnutzer gegebenenfalls Hinweise zur Einrichtung der Zugriffsberechtigungen für die App zu geben, falls der Zugriff verweigert wird. (Ein Endnutzer kann den Zugriff auf die Kamera über die iOS-Einstellungen aktivieren: „Datenschutz“ > „Kamera“.)

Der Endbenutzer wird aufgefordert, jeder App, die dies anfordert, Zugriff auf die Kamera zu gewähren. Sie können steuern, wann diese Aufforderung angezeigt wird, indem Sie [AVCaptureDevice requestAccessForMediaType:completionHandler:] mit AVMediaTypeVideo, die beim ersten Aufruf die Eingabeaufforderung ausgibt. Nachfolgende Aufrufe führen den Completion-Handler mit der vom Benutzer gespeicherten Präferenz aus.

[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
        if(granted){
            // Access to the camera is granted. You can publish.
        } else {
           // Access to the camera is not granted.
        }
    }];

Veröffentlichen eines Streams

Sobald Sie ein Publisher-Objekt erstellt haben (siehe Initialisierung eines OTPublisher-Objekts), können Sie es an die [OTSession publish:error] Methode eines OTSession-Objekts, um den Stream in der Sitzung zu veröffentlichen:

OTError* error = nil;
[session publish:publisher error:&error];
if (error) {
  NSLog(@"publishing failed with error: (%@)", error);
}

Dieser Code geht davon aus, dass session ein Session-Objekt ist und dass der Client eine Verbindung zur Session aufgebaut hat. Für weitere Informationen, siehe Beitritt zu einer Sitzung.

Die [OTPublisherDelegate publisher:streamCreated:] Nachricht wird gesendet, wenn der Verleger mit dem Streaming in die Sitzung beginnt.

Einen Anbieter am Streaming hindern

Sie können das Streaming des Publishers in die Sitzung unterbinden, indem Sie die Funktion [OTSession unpublish:error:] Methode des OTSession-Objekts:

OTError* error = nil;
[session unpublish:publisher error:&error];
if (error) {
  NSLog(@"publishing failed with error: (%@)", error);
}

Die [OTPublisherDelegate publisher:streamDestroyed:] Nachricht wird gesendet, wenn der Verleger das Streaming in die Sitzung beendet. Wenn diese Nachricht gesendet wird, entfernen Sie die Ansicht des Verlegers aus seiner Superview:

[publisher.view removeFromSuperview:];

Abrufen von Statistiken über den Stream eines Verlegers

Setzen Sie die networkStatsDelegate Eigenschaft eines OTPublisherKit zu einem Objekt implementiert die OTPublisherKitNetworkStatsDelegate Protokoll. Dieses Protokoll umfasst ein [OTPublisherKitNetworkStatsDelegate publisher: audioNetworkStatsUpdated:] Nachricht und eine [OTPublisherKitNetworkStatsDelegate publisher: videoNetworkStatsUpdated:] die in regelmäßigen Abständen gesendet werden, um Statistiken zur Audio- und Videoqualität des Herausgebers zu übermitteln.

Um detaillierte Statistiken zu Peer-Verbindungen abzurufen, verwenden Sie den Befehl [OTPublisherKit getRtcStatsReport:] Methode. Dies liefert RTC-Statistikberichte für den Medienstrom.

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

Testen des Streams eines Verlegers

Sie können einen Teststream veröffentlichen und dessen Audio- und Videostatistiken überprüfen, um die Art des Streams (z. B. hochauflösend oder nur Audio) zu ermitteln, die von Ihrer Verbindung unterstützt wird.

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 „routed“ gesetzt). Anschließend können Sie die networkStatsDelegate Methode des OTSubscriberKit-Objekts, um Audio- und Videostatistiken für den von Ihnen veröffentlichten Stream abzurufen. Siehe dieses Thema für weitere Informationen.

Die opentok-Netzwerk-Test Repo enthält Beispielcode, der zeigt, wie die Statistiken eines Teststreams vor der Veröffentlichung in einer Sitzung verwendet werden können.