Android

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 Subscriber subscriber;

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
    public void onStreamReceived(Session session, Stream stream) {
        Log.d(TAG, "onStreamReceived: New Stream Received " + stream.getStreamId() + " in session: " + session.getSessionId());
    
        if (subscriber == null) {
            subscriber = new Subscriber.Builder(MainActivity.this, stream).build();
            subscriber.getRenderer().setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL);
            subscriber.setSubscriberListener(subscriberListener);
            session.subscribe(subscriber);
            subscriberViewContainer.addView(subscriber.getView());
        }
    }
  1. Para registrar eventos, adicione subscriberListener imóvel abaixo sessionListener do MainActivity:
SubscriberKit.SubscriberListener subscriberListener = new SubscriberKit.SubscriberListener() {
    @Override
    public void onConnected(SubscriberKit subscriberKit) {
        Log.d(TAG, "onConnected: Subscriber connected. Stream: " + subscriberKit.getStream().getStreamId());
    }

    @Override
    public void onDisconnected(SubscriberKit subscriberKit) {
        Log.d(TAG, "onDisconnected: Subscriber disconnected. Stream: " + subscriberKit.getStream().getStreamId());
    }

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

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.

subscriberViewContainer.addView(subscriber.getView()) exibe a visualização do novo stream assinado na tela.

  1. Modificar a implementação do onStreamDropped(Session session, Stream stream) método (mais um dos callbacks do SessionListener):
@Override
public void onStreamDropped(Session session, Stream stream) {
    Log.i(TAG, "Stream Dropped");

    if (subscriber != null) {
        subscriber = null;
        subscriberViewContainer.removeAllViews();
    }
}

subscriberViewContainer.removeAllViews() remove a visualização de um assinante assim que a transmissão for interrompida.