Kotlin

Démarrage de la capture

startCapture() est la méthode suivante que nous devons mettre en œuvre. Elle est appelée par le SDK lorsque l'éditeur commence à capturer (par exemple, après que Session.publish(publisher)). Il devrait démarrer votre boucle de capture ou votre écouteur. Comme vous le verrez, les images sont livrées par ImageReader.setOnImageAvailableListenerAinsi startCapture() signale principalement que la capture est active.

override fun startCapture(): Int {
    capturing = true
    return 0
}

Cycle de vie :

  1. init() - Créer ImageReader et lancer un fil de discussion. Les ImageReader fournit une Surface que VirtualDisplay se traduit par .
  2. createVirtualDisplay() - Créer un VirtualDisplay soutenu par la ImageReaderLa surface de l'écran. Le contenu de l'écran est rendu dans cet affichage.
  3. startCapture() - Appelé au démarrage de l'éditeur. Marque la capture comme active.
  4. stopCapture() - Libérer l'affichage virtuel, arrêter la projection des médias et nettoyer.

Alimenter le SDK en images

Lorsque le système restitue une nouvelle image dans le fichier VirtualDisplay, ImageReader le délivre par l'intermédiaire de onImageAvailable:

imageReader?.setOnImageAvailableListener(
    { reader ->
        val image = reader.acquireLatestImage()
        if (image != null) {
            val planes = image.planes
            provideBufferFrame(planes[0].buffer, ABGR, width, height, 0, false)
            image.close()
        }
    },
    backgroundHandler
)

Les provideIntArrayFrame définie par la méthode BaseVideoCapturer envoie un tableau entier de données à l'éditeur, qui sera utilisé pour la prochaine image vidéo publiée.

Si l'éditeur est toujours en train de capturer de la vidéo, le fil de discussion recommence après 1/15 de seconde, de sorte que le capteur continue à fournir à l'éditeur de nouvelles images vidéo à publier.