Iniciando a captura
startCapture() é o próximo método que precisamos implementar. Ele é chamado pelo SDK quando o editor inicia a captura (por exemplo, após Session.publish(publisher)). Isso deve iniciar seu ciclo de captura ou ouvinte. Como você verá, os quadros aqui são fornecidos por ImageReader.setOnImageAvailableListener, então startCapture() servirá principalmente para indicar que a captura está ativa.
override fun startCapture(): Int {
capturing = true
return 0
}
Ciclo de vida:
init()– CriarImageReadere iniciar uma thread em segundo plano. AImageReaderoferece umSurfacequeVirtualDisplayse transforma em.createVirtualDisplay()– Criar umVirtualDisplaycom o apoio doImageReaderda superfície. O conteúdo da tela é exibido nesse visor.startCapture()– Chamado quando o publisher é iniciado. Marca a captura como ativa.stopCapture()– Desligue a tela virtual, interrompa a projeção de mídia e faça a limpeza.
Inserindo Frames no SDK
Quando o sistema renderiza um novo quadro na VirtualDisplay, ImageReader envia por meio 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
)
O provideIntArrayFrame método, definido pelo BaseVideoCapturer classe, envia uma matriz de inteiros com dados ao editor, para serem usados no próximo quadro de vídeo publicado.
Se o editor ainda estiver capturando vídeo, o ciclo recomeça após mais 1/15 de segundo, de modo que o capturador continue a fornecer ao editor novos quadros de vídeo para publicação.
Compartilhamento de tela
Saiba como implementar o recurso de compartilhamento de tela usando a plataforma Vonage Video API.