Android

Suscripción a otros flujos de clientes

Queremos que los clientes puedan suscríbase a a (o ver) los flujos de otros clientes en la sesión:

  1. Añadir un subscriber a la clase MainActivity (después de la declaración de la propiedad publisher propiedad):
private Subscriber subscriber;

La clase Subscriber está definida en el SDK de Android. Define un objeto que un cliente utiliza para suscribirse a (ver) 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
    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 Añadir subscriberListener propiedad abajo sessionListener de la 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());
    }
};

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. La dirección Subscriber.Builder() toma dos parámetros:

  • El contexto de la aplicación Android asociada a este proceso.
  • El objeto Stream (para el flujo que desea ver)

En Session.subscribe(subscriber) se suscribe al flujo recibido.

subscriberViewContainer.addView(subscriber.getView()) coloca en la pantalla la vista del nuevo flujo suscrito.

  1. Modificar la aplicación del onStreamDropped(Session session, Stream stream) (otro de los callbacks de SessionListener):
@Override
public void onStreamDropped(Session session, Stream stream) {
    Log.i(TAG, "Stream Dropped");

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

subscriberViewContainer.removeAllViews() elimina la vista de un abonado una vez que el flujo ha caído.