Kotlin
Contenedores para vídeos
El SDK de Vonage devuelve View para el editor y el suscriptor. El ejemplo los aloja en FrameLayout creados a partir de Compose mediante AndroidView:
Copia
@Composable
private fun VideoContainers(
onContainersReady: (subscriber: FrameLayout, publisher: FrameLayout) -> Unit,
) {
AndroidView(
factory = { ctx ->
val root = FrameLayout(ctx)
val subscriberFrame = FrameLayout(ctx) // full screen
val publisherFrame = FrameLayout(ctx) // small overlay, bottom-end
root.addView(subscriberFrame)
root.addView(publisherFrame)
onContainersReady(subscriberFrame, publisherFrame)
root
},
modifier = Modifier.fillMaxSize(),
)
}
Pasa los contenedores a tu actividad para que pueda añadir vistas de editor y suscriptor cuando la sesión se conecte:
Copia
VideoCallScreen(
isInPipMode = isInPipMode,
onContainersReady = { subscriberFrame, publisherFrame ->
subscriberViewContainer = subscriberFrame
publisherViewContainer = publisherFrame
containersReady = true
tryStartSession()
},
onEnterPictureInPicture = ::enterPictureInPicture,
)
Fije la vista cuando esté listo
En onConnected, publicar y adjuntar la vista del editor:
Copia
override fun onConnected(session: Session) {
if (publisher == null) {
publisher = Publisher.Builder(applicationContext).build()
session.publish(publisher)
publisherViewContainer.addView(publisher?.view)
if (publisher?.view is GLSurfaceView) {
(publisher?.view as GLSurfaceView).setZOrderOnTop(true)
}
}
}
Suscribirse cuando llega un flujo remoto:
Copia
override fun onStreamReceived(session: Session, stream: Stream) {
if (subscriber == null) {
subscriber = Subscriber.Builder(applicationContext, stream).build()
session.subscribe(subscriber)
subscriberViewContainer.addView(subscriber?.view)
}
}
Imagen en imagen
Aprende a agregar la función Picture in Picture a tu aplicación con Vonage Video SDK.
Disponible en:
Pasos
1
Introducción2
Primeros pasos3
Crear un nuevo proyecto4
Añadir el SDK de Android5
Configuración de la autenticación6
Solicitud de permisos7
Activar Picture-in-Picture en tu actividad8
Contenedores para vídeos9
Iniciar Picture-in-Picture10
Gestión de los cambios de modo PiP11
Ejecutar la aplicación12
Conclusión