Kotlin

Inscrever-se em outros fluxos de clientes

Queremos que os clientes possam inscrever-se para (ou visualizar) as transmissões de outros clientes na sessão:

  1. Adicione um subscriber propriedade à classe MainActivity (após a declaração da publisher propriedade):
private var subscriber: Subscriber? = null

A classe `Subscriber` está definida no SDK do Android. Ela define um objeto que um cliente utiliza para se inscrever (visualizar) em um fluxo publicado por outro cliente.

  1. Modificar a implementação do onStreamReceived(session, stream) método (uma das chamadas de retorno do SessionListener) para incluir código que permita assinar os fluxos de outros clientes na sessão:
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() cria um novo assinante para o Stream.
  • setSubscriberListener() atribui um ouvinte para eventos de fluxo.
  • session.subscribe() inicia a assinatura do fluxo remoto.
  • subscriberView = newSubscriber.view insere o visualizador de vídeo no seu layout.
  1. Para registrar eventos, adicione subscriberListener imóvel abaixo sessionListener do 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}")
    }
}

Quando outro cliente publica um fluxo em uma sessão, esse método é chamado, e um objeto `Stream` é passado como parâmetro. A classe `Stream` está definida no SDK do Android e representa um fluxo de áudio e vídeo na sessão.

O código inicializa uma instância da classe Subscriber, definida no SDK do Android. O Subscriber.Builder() O construtor recebe dois parâmetros:

  • O contexto do aplicativo Android associado a este processo.
  • O objeto Stream (correspondente ao stream que você deseja visualizar)

O Session.subscribe(subscriber) O método assina o fluxo que foi recebido.

  1. Modificar a implementação do onStreamDropped(Session session, Stream stream) método (mais um dos callbacks do 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 remove a visualização de um assinante assim que a transmissão for interrompida.