Abonnieren von anderen Kundenströmen
Wir möchten, dass die Kunden in der Lage sind abonnieren auf die Streams anderer Clients in der Sitzung zugreifen (oder diese anzeigen):
- Hinzufügen einer
subscriberEigenschaft zur Klasse MainActivity (nach der Deklaration derpublisherEigenschaft):
private var subscriber: Subscriber? = null
Die Klasse Subscriber ist im Android SDK definiert. Sie definiert ein Objekt, das ein Client zum Abonnieren (Anzeigen) eines von einem anderen Client veröffentlichten Streams verwendet.
- Ändern Sie die Implementierung der
onStreamReceived(session, stream)Methode (einer der SessionListener-Callbacks), um Code zum Abonnieren der Streams anderer Clients in die Sitzung aufzunehmen:
override fun onStreamReceived(session: Session, stream: Stream) {
Log.d(TAG, "onStreamReceived: New Stream Received ${stream.streamId} in session: ${session.sessionId}")
if (subscriber == null) {
val newSubscriber = Subscriber.Builder(this@MainActivity, stream).build().apply {
renderer.setStyle(
BaseVideoRenderer.STYLE_VIDEO_SCALE,
BaseVideoRenderer.STYLE_VIDEO_FILL
)
setSubscriberListener(subscriberListener)
}
session.subscribe(newSubscriber)
subscriber = newSubscriber
subscriberView = newSubscriber.view
}
}
Subscriber.Builder()erstellt einen neuen Abonnenten für die angegebeneStream.setSubscriberListener()fügt einen Listener für Stream-Ereignisse hinzu.session.subscribe()startet das Abonnement für den Remote-Stream.subscriberView = newSubscriber.viewplatziert die Videoansicht in Ihrem Layout.
- So protokollieren Sie Ereignisse Hinzufügen
subscriberListeneruntenstehendes GrundstücksessionListenerderMainActivity:
private val subscriberListener = object : SubscriberKit.SubscriberListener {
override fun onConnected(subscriberKit: SubscriberKit) {
Log.d(TAG, "onConnected: Subscriber connected. Stream: ${subscriberKit.stream?.streamId}")
}
override fun onDisconnected(subscriberKit: SubscriberKit) {
Log.d(TAG, "onDisconnected: Subscriber disconnected. Stream: ${subscriberKit.stream?.streamId}")
}
override fun onError(subscriberKit: SubscriberKit, opentokError: OpentokError) {
Log.e(TAG, "SubscriberKit onError: ${opentokError.message}")
}
}
Wenn ein anderer Client einen Stream in einer Sitzung veröffentlicht, wird diese Methode aufgerufen und ein Stream-Objekt wird übergeben. Die Stream-Klasse ist im Android SDK definiert und stellt einen Audio-Video-Stream in der Sitzung dar.
Der Code initialisiert eine Instanz der Klasse Subscriber, die im Android SDK definiert ist. Die Subscriber.Builder() Konstruktor benötigt zwei Parameter:
- Der mit diesem Prozess verbundene Android-Anwendungskontext.
- Das Stream-Objekt (für den Stream, den Sie anzeigen möchten)
Die Session.subscribe(subscriber) Methode abonniert den empfangenen Stream.
- Ändern Sie die Implementierung der
onStreamDropped(Session session, Stream stream)Methode (eine weitere der SessionListener Callbacks):
override fun onStreamDropped(session: Session, stream: Stream) {
Log.i(TAG, "onStreamDropped: Stream dropped with ID: ${stream.streamId}")
subscriber?.let {
subscriberView = null
subscriber = null
}
}
subscriberView = null entfernt die Ansicht eines Abonnenten, sobald der Stream unterbrochen wurde.
Einfacher Video-Chat
Lernen Sie die grundlegenden Concepts der Vonage Video API-Plattform kennen und erfahren Sie, wie Benutzer über Video, Voice und Messaging kommunizieren können. Erkunden Sie einen grundlegenden Ablauf der Vonage Video API.