Kotlin

Multipartito: Suscríbase a cada flujo remoto

Cada cliente remoto aparece como Stream. Implementar onStreamReceived / onStreamDropped:

  1. Para cada nuevo flujo, construye un Subscriberllame al session.subscribe(subscriber)a continuación, adjunte subscriber.view a un celda dedicada en su diseño.

Esta muestra utiliza un número fijo de franjas horarias (maxSubscribers): matrices paralelas para Subscriber?ID de flujo opcionales y FrameLayout? celdas. El siguiente índice libre recibe al nuevo participante; si todas las ranuras están llenas, ignórelas o sustitúyalas según las reglas de su producto.

private val maxSubscribers = 4
private val subscribers = arrayOfNulls<Subscriber>(maxSubscribers)
private val subscriberContainers = arrayOfNulls<FrameLayout>(maxSubscribers)
private val subscriberStreamIds = arrayOfNulls<String>(maxSubscribers)

override fun onStreamReceived(session: Session, stream: Stream) {
    val subscriber = Subscriber.Builder(this@MainActivity, stream).build()
    session.subscribe(subscriber)
    addSubscriber(subscriber) 
}

private fun addSubscriber(subscriber: Subscriber) {
    val index = subscribers.indexOfFirst { it == null }
    if (index == -1) {
        Toast.makeText(
            this,
            "New subscriber ignored, maxSubscribers limit reached",
            Toast.LENGTH_LONG
        ).show()
        return
    }

    subscribers[index] = subscriber
    subscriberStreamIds[index] = subscriber.stream.streamId

    subscriber.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL)
    subscriber.subscribeToAudio = true

    runOnUiThread {
        subscriberContainers[index]?.removeAllViews()
        subscriberContainers[index]?.addView(subscriber.view)
    }

    subscriberAudioEnabled[index] = true
    subscriberVisible[index] = true
}
  1. Cuando finalice un flujo, elimine la vista de ese abonado y libere la ranura.
override fun onStreamDropped(session: Session, stream: Stream) {
    val index = subscriberStreamIds.indexOfFirst { it == stream.streamId }
    if (index == -1) return

    val subscriber = subscribers[index] ?: return

    runOnUiThread {
        subscriberContainers[index]?.removeView(subscriber.view)
    }
    subscribers[index] = null
    subscriberStreamIds[index] = null
    subscriberVisible[index] = false
    subscriberAudioEnabled[index] = true
}

Alternar audio remoto con subscriber.subscribeToAudio = enabled. Conmute su A/V saliente con publisher.publishAudio / publisher.publishVideo.

Desmontaje limpio

A la salida, darse de baja cada abonado, despublicar el editor, entonces session.disconnect(). Hacer esto evita sesiones filtradas y cámaras/micrófonos bloqueados en algunos dispositivos.

Multipartito simple

Aprende a usar el SDK para Android de Vonage para una llamada multipartita. La aplicación publica audio/video desde un dispositivo y puede conectarse a múltiples suscriptores.

Disponible en:
Kotlin
Pasos
1
Introducción
2
Primeros pasos
3
Crear un nuevo proyecto
4
Añadir el SDK de Android
5
Configuración de la autenticación
6
Solicitud de permisos
7
Conéctate publica y muéstrate
8
Suscripción multipartita a cada flujo remoto
9
Alojar vistas SDK en AndroidView
10
Ejecutar la aplicación
11
Conclusión