Streams veröffentlichen – Android
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 Publisher-Objekts
- Vorschau des Videos des Anbieters vor dem Streaming
- Veröffentlichen eines Streams
- Einstellung der maximalen Bitrate für einen Stream
- Einen Anbieter am Streaming hindern
- Abrufen von Statistiken über den Stream eines Verlegers
- Testen des Streams eines Verlegers
Initialisierung eines Publisher-Objekts
Ein „Publisher“-Objekt wird verwendet, um einen Audio-Video-Stream vom Mikrofon und der Kamera des Geräts für die Verwendung in einer OpenTok-Sitzung zu erfassen.
Für einen einfachen Publisher verwenden Sie die Publisher.Builder Klasse, um ein Publisher-Objekt zu instanziieren. Geben Sie den Android-Anwendungskontext für den Publisher ein:
mPublisher = new Publisher.Builder(context)
.build();
Stellen Sie sicher, dass Sie einen Verweis auf das Publisher-Objekt behalten, um zu verhindern, dass es von der Garbage Collection entfernt wird, was zu Abstürzen und unerwartetem Verhalten führen kann.
Fügen Sie ein Listener-Objekt für grundlegende verlagsbezogene Ereignisse hinzu, indem Sie die setPublisherListener(PublisherKit.PublisherListener listener) Methode des Publisher-Objekts:
mPublisher.setPublisherListener(this);
Implementieren Sie die Methoden der Schnittstelle PublisherKit.PublisherListener in dem Objekt, das Sie als Ereignis-Listener-Objekt angeben. Diese Methoden werden aufgerufen, wenn verlagsbezogene Ereignisse auftreten.
Die getView() Methode des Publisher-Objekts gibt die Ansicht des von Ihnen veröffentlichten Videos zurück. Fügen Sie sie als Unteransicht eines android.view.ViewGroup-Objekts hinzu, um sie in der App anzuzeigen:
mPublisherViewContainer.addView(mPublisher.getView());
Übergeben Sie das Publisher-Objekt an die Session.publish() Methode zum Veröffentlichen eines Streams in einer Sitzung. Siehe Veröffentlichen eines Streams.
Sie können andere Methoden des Publisher.Builder-Objekts aufrufen, um benutzerdefinierte Einstellungen für den Publisher zu definieren:
mPublisher = new Publisher.Builder(context)
.name("Bob")
.audioTrack(true)
.frameRate(CameraCaptureFrameRate.FPS_7)
.resolution(CameraCaptureResolution.LOW)
.videoTrack(false)
.capturer(mCapturer)
.renderer(mRenderer)
.build();
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.
Vorschau des Videos des Anbieters vor dem Streaming
Beachten Sie, dass die Ansicht des Publishers standardmäßig das Video des Publishers enthält, sobald dieser mit dem Streaming in die Sitzung beginnt. Um eine Vorschau des Videos anzuzeigen, bevor der Publisher mit dem Streaming beginnt, rufen Sie die startPreview() Methode des Publisher-Objekts:
mPublisher.startPreview();
Wenn Sie die startPreview() Methode, müssen Sie die destroy() Methode des Herausgebers, um die Ansicht des Herausgebers (und das Video) zu entfernen, wenn der Herausgeber das Streaming beendet (wenn die onStreamDestroyed(PublisherKit publisher, Stream stream) Methode des PublisherListeners aufgerufen wird).
Anmerkung: Die startPreview() Die Methode stellt keine Verbindung zwischen dem Audioeingang und dem Publisher her. Um eine Vorschau des Audios zu erhalten, bevor der Publisher mit dem Streaming in die Sitzung beginnt, verwenden Sie eine benutzerdefinierter Audiotreiber.
Veröffentlichen eines Streams
Sobald Sie ein Publisher-Objekt erstellt haben (siehe Initialisierung eines Publisher-Objekts), können Sie es an die publish(PublisherKit publisher) Methode eines Session-Objekts, um den Stream in der Session zu veröffentlichen:
mSession.publish(mPublisher);
Dieser Code geht davon aus, dass mSession ein Session-Objekt ist und dass der Client eine Verbindung zur Session aufgebaut hat. Für weitere Informationen, siehe Beitritt zu einer Sitzung.
Die PublisherKit.PublisherListener.onStreamCreated(PublisherKit publisher, Stream stream) Methode wird aufgerufen, wenn der Verleger mit dem Streaming in die Sitzung beginnt:
@Override
public void onStreamCreated(publisher, stream) {
// The publisher started streaming.
}
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.
Einen Anbieter am Streaming hindern
Sie können das Streaming des Publishers in die Sitzung unterbinden, indem Sie die Funktion unpublish(PublisherKit publisher) Methode des Session-Objekts:
mSession.unpublish(mPublisher);
Die PublisherKit.PublisherListener.onStreamDestroyed(PublisherKit publisher, Stream stream) Methode wird aufgerufen, wenn der Verleger das Streaming in die Sitzung beendet:
@Override
public void onStreamDestroyed(publisher, stream) {
// The publisher stopped streaming.
}
Abrufen von Statistiken über den Stream eines Verlegers
Um Callback-Methoden für periodische Berichte über Audio- und Videostatistiken für einen Publisher zu registrieren, rufen Sie die PublisherKit.setAudioStatsListener(listener) und PublisherKit.setVideoStatsListener(listener) Methoden. Übergeben Sie Objekte, die die PublisherKit.AudioStatsListener und PublisherKit.VideoStatsListener Schnittstellen.
Die Implementierungen der PublisherKit.AudioStatsListener.onAudioStats(publisher, stats) und PublisherKit.VideoStatsListener.onVideoStats(publisher, stats) Methoden werden in regelmäßigen Abständen aufgerufen, um Audio- und Videostatistiken für den Herausgeber zu erstellen. Jeder Methode werden zwei Objekte übergeben: der Herausgeber und ein Array von Statistikobjekten.
Um Low-Level-Stream-Statistiken zu erhalten, verwenden Sie die PublisherKit.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 SubscriberKit.setAudioStatsListener(AudioStatsListener listener) und SubscriberKit.setVideoStatsListener(VideoStatsListener listener) Methoden des „Subscriber“-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.