Kotlin

Suscripción a otros flujos de clientes

Queremos que los clientes puedan suscríbase a a (o ver) los flujos de otros clientes en la sesión:

  1. Añadir un subscriber a la clase MainActivity (después de la declaración de la propiedad publisher propiedad):
private var subscriber: Subscriber? = null

La clase Subscriber está definida en el SDK de Android. Define un objeto que un cliente utiliza para suscribirse a (ver) un flujo publicado por otro cliente.

  1. Modificar la aplicación del onStreamReceived(session, stream) (uno de los callbacks de SessionListener) para incluir código para suscribirse a los streams de otros clientes la sesión:
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() crea un nuevo abonado para el Stream.
  • setSubscriberListener() adjunta un receptor de eventos de flujo.
  • session.subscribe() inicia la suscripción al flujo remoto.
  • subscriberView = newSubscriber.view coloca la vista de vídeo en tu maqueta.
  1. Para registrar eventos Añadir subscriberListener propiedad abajo sessionListener de la MainActivity:
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}")
    }
}

Cuando otro cliente publica un flujo en una sesión, se llama a este método y se le pasa un objeto Stream. La clase Stream está definida en el SDK de Android, y representa un flujo de audio-vídeo en la sesión.

El código inicializa una instancia de la clase Subscriber, definida en el SDK de Android. La dirección Subscriber.Builder() toma dos parámetros:

  • El contexto de la aplicación Android asociada a este proceso.
  • El objeto Stream (para el flujo que desea ver)

En Session.subscribe(subscriber) se suscribe al flujo recibido.

  1. Modificar la aplicación del onStreamDropped(Session session, Stream stream) (otro de los callbacks de SessionListener):
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 elimina la vista de un abonado una vez que el flujo ha caído.