Kotlin

Suscribirse a otros flujos de clientes

Queremos que los clientes puedan suscríbase a para ver las transmisiones de otros clientes en la sesión:

  1. Añade 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 utiliza un cliente para suscribirse a (visualizar) 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 inserta el visor de vídeo en tu diseño.
  1. Para registrar eventos, añade 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. El Subscriber.Builder() El constructor toma dos parámetros:

  • El contexto de la aplicación de Android asociado a este proceso.
  • El objeto Stream (correspondiente al flujo que deseas visualizar)

El Session.subscribe(subscriber) El método se suscribe al flujo que se ha 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 visualización de un suscriptor una vez que se ha interrumpido la transmisión.