Android

Suscribirse a otros flujos de clientes

Queremos que los clientes puedan suscríbase a para ver las transmisiones de otros clientes en la sesión:

  1. Añade 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 utiliza un cliente para suscribirse a (visualizar) 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ñade 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. El Subscriber.Builder() El constructor toma dos parámetros:

  • El contexto de la aplicación de Android asociado a este proceso.
  • El objeto Stream (correspondiente al flujo que deseas visualizar)

El Session.subscribe(subscriber) El método se suscribe al flujo que se ha 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 visualización de un suscriptor una vez que se ha interrumpido la transmisión.