Iniciar la captura
startCapture() es el siguiente método que debemos implementar. Es llamado por el SDK cuando el editor comienza a capturar (por ejemplo, después de que Session.publish(publisher)). Debería iniciar su bucle de captura o escucha. Como verás los frames aquí, son entregados por ImageReader.setOnImageAvailableListenerAsí que startCapture() señalará principalmente que la captura está activa.
override fun startCapture(): Int {
capturing = true
return 0
}
Ciclo de vida:
init()- CrearImageReadere iniciar un hilo de fondo. EnImageReaderproporciona unaSurfacequeVirtualDisplayse convierte en.createVirtualDisplay()– Crear unVirtualDisplaycon el respaldo de laImageReader. El contenido de la pantalla se renderiza en esta pantalla.startCapture()- Se ejecuta cuando se inicia el editor. Marca la captura como activa.stopCapture()– Cierra la pantalla virtual, detén la proyección multimedia y recoge todo.
Introducción de marcos al SDK
Cuando el sistema representa un nuevo fotograma en el VirtualDisplay, ImageReader lo envía a través 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
)
El provideIntArrayFrame definido por el método BaseVideoCapturer envía una matriz entera de datos al editor, que se utilizará para el siguiente fotograma de vídeo publicado.
Si el editor sigue capturando vídeo, el ciclo vuelve a comenzar tras otro 1/15 de segundo, de modo que el capturador sigue proporcionando al editor nuevos fotogramas de vídeo para su publicación.
Compartir pantalla
Aprende a implementar la capacidad de compartir pantallas usando la plataforma de Video API de Vonage.