Kotlin

Multiparty : S'abonner à chaque flux distant

Chaque client distant apparaît comme un Stream. Mettre en œuvre onStreamReceived / onStreamDropped:

  1. Pour chaque nouveau flux, construire un Subscriber, appeler session.subscribe(subscriber)puis joindre subscriber.view à un cellule dédiée dans votre schéma de présentation.

Cet exemple utilise un nombre fixe d'emplacements (maxSubscribers) : tableaux parallèles pour les Subscriber?les identifiants de flux optionnels, et FrameLayout? cellules. L'index libre suivant reçoit le nouveau participant ; si tous les emplacements sont pleins, ignorez ou remplacez selon les règles de votre produit.

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. Lorsqu'un flux se termine, supprimez la vue de l'abonné et libérez l'emplacement.
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
}

Commutation de l'audio de la télécommande avec subscriber.subscribeToAudio = enabled. Faites basculer votre A/V sortant avec publisher.publishAudio / publisher.publishVideo.

Démonter proprement

A la sortie, se désinscrire chaque abonné, dépublier l'éditeur, puis session.disconnect(). Cela permet d'éviter les fuites de sessions et le blocage des caméras/microphones sur certains appareils.

Multipartite simple

Apprenez à utiliser le SDK Android de Vonage pour un appel multipartite. L'application publie de l'audio/vidéo à partir d'un appareil et peut se connecter à plusieurs abonnés.

Disponible sur :
Kotlin
Étapes
1
Introduction
2
Pour commencer
3
Création d'un nouveau projet
4
Ajout du SDK Android
5
Mise en place de l'authentification
6
Demande d'autorisations
7
Connectez-vous, publiez et montrez-vous
8
Abonnement multipartite à chaque flux distant
9
Héberger les vues SDK dans AndroidView
10
Exécution de l'application
11
Conclusion