Android

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 Publisher publisher;

A classe Publisher está definida no SDK do Android.

  1. Modificar a implementação do SessionListener.onConnected() método para incluir código para publicar um stream na sessão:
@Override
public void onConnected(Session session) {
    Log.d(TAG, "onConnected: Connected to session: " + session.getSessionId());

    publisher = new Publisher.Builder(MainActivity.this).build();
    publisher.setPublisherListener(publisherListener);
    publisher.getRenderer().setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL);
    
    publisherViewContainer.addView(publisher.getView());

    if (publisher.getView() instanceof GLSurfaceView) {
        ((GLSurfaceView) publisher.getView()).setZOrderOnTop(true);
    }

    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 publisherViewContainer objeto.

  1. Para registrar eventos, adicione um publisherListener propriedade para o sessionListener do MainActivity:
private PublisherKit.PublisherListener publisherListener = new PublisherKit.PublisherListener() {
    @Override
    public void onStreamCreated(PublisherKit publisherKit, Stream stream) {
        Log.d(TAG, "onStreamCreated: Publisher Stream Created. Own stream " + stream.getStreamId());
    }

    @Override
    public void onStreamDestroyed(PublisherKit publisherKit, Stream stream) {
        Log.d(TAG, "onStreamDestroyed: Publisher Stream Destroyed. Own stream " + stream.getStreamId());
    }

    @Override
    public void onError(PublisherKit publisherKit, OpentokError opentokError) {
        Log.e(TAG, "PublisherKit onError: " + opentokError.getMessage());
    }
};

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 ou renderizadores de vídeo 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.