Kotlin

Publicação de um fluxo na sessão

Quando o aplicativo se conectar à sessão do Vonage Video, queremos que ele transmita um fluxo de áudio e vídeo para a sessão, utilizando a câmera e o microfone:

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

A classe Publisher está definida no SDK do Android.

  1. Modificar o onConnected() função de retorno de chamada no seu SessionListener para configurar e publicar a transmissão:
override fun onConnected(session: Session) {
    Log.d(TAG, "onConnected: Connected to session: ${session.sessionId}")

    publisher = Publisher.Builder(this@MainActivity).build().apply {
        setPublisherListener(publisherListener)
        renderer.setStyle(
            BaseVideoRenderer.STYLE_VIDEO_SCALE,
            BaseVideoRenderer.STYLE_VIDEO_FILL
        )
    }

    // Add the publisher view to the UI
    publisherView = publisher?.view

    // Publish the stream to the session
    session.publish(publisher)
}

O código acima utiliza Publisher.Builder() para instanciar um objeto Publisher. O construtor recebe um parâmetro: o contexto associado a este processo (embora possa ser diferente em um aplicativo de produção).

O Publisher.setPublisherListener() O método define o objeto que implementará a interface PublisherListener. Essa interface inclui métodos de retorno de chamada que são acionados em resposta a eventos relacionados ao editor.

Importante: O contexto utilizado depende do caso de uso específico. No entanto, geralmente é preferível que a sessão permaneça fora da Activity (por exemplo, entre atividades). Para Applications em produção, é mais prático usar o contexto do aplicativo em vez do contexto da atividade.

Em seguida, o código passa o objeto Publisher como parâmetro da função Session.publish() método. Esse método transmite um fluxo de áudio e vídeo para a sessão, utilizando a câmera e o microfone do dispositivo Android. (Observe que, em um dispositivo virtual Android, o SDK do Android utiliza um vídeo de teste ao transmitir um fluxo).

O objeto Publisher possui um getView() retorna um objeto View do Android. Essa view exibe o vídeo capturado pela câmera do dispositivo. O código adiciona essa view como uma subview da publisherView objeto.

  1. Para registrar eventos, adicione um publisherListener propriedade para o sessionListener do MainActivity:
private val publisherListener = object : PublisherKit.PublisherListener {
    override fun onStreamCreated(publisherKit: PublisherKit, stream: Stream) {
        Log.d(TAG, "onStreamCreated: Publisher Stream Created. Stream ID: ${stream.streamId}")
    }

    override fun onStreamDestroyed(publisherKit: PublisherKit, stream: Stream) {
        Log.d(TAG, "onStreamDestroyed: Publisher Stream Destroyed. Stream ID: ${stream.streamId}")
    }

    override fun onError(publisherKit: PublisherKit, opentokError: OpentokError) {
        Log.e(TAG, "PublisherKit onError: ${opentokError.message}")
    }
}

Observe que a classe `Publisher` estende a classe `PublisherKit` (também definida pelo SDK do Android). A classe `PublisherKit` é uma classe base que você pode usar para criar publicadores avançados (como aqueles que utilizam capturadores de vídeo ou renderizadores personalizados).

Isso implementa o PublisherListener métodos:

  • onStreamCreated(publisherKit, stream) — É chamado quando o editor inicia a transmissão para a sessão.
  • onStreamDestroyed(publisherKit, stream) — É chamado quando o editor interrompe a transmissão para a sessão.
  • onError(error) — É chamado quando o cliente não consegue publicar na sessão. Um OpentokError o objeto é passado para o método.