15.1 Grabación de pantalla, streaming y superposiciones

15.1 Grabación de pantalla, streaming y superposiciones

1. Introducción

En Android avanzado, capturar el contenido de la pantalla, enviarlo en tiempo real (streaming)
y superponer elementos sobre otras apps son tareas muy útiles para crear tutoriales,
herramientas de asistencia o aplicaciones de transmisiones en vivo.

2. APIs clave

  • MediaProjection: Permite capturar el framebuffer de la pantalla tras
    solicitar el permiso del usuario.
  • MediaRecorder / MediaCodec: Codificación de vídeo y audio
    en formatos como H.264, AAC.
  • VirtualDisplay: Crea una “pantalla virtual” que recibe los fotogramas
    capturados por MediaProjection.
  • WindowManager ltSYSTEM_ALERT_WINDOWgt: Gestiona superposiciones
    (ventanas flotantes) sobre otras aplicaciones.

3. Flujo general de la grabación de pantalla

  1. Solicitar permiso al usuario:

    startActivityForResult(MediaProjectionManager.createScreenCaptureIntent(), REQUEST_CODE)

  2. Obtener MediaProjection:

    mediaProjection = projectionManager.getMediaProjection(resultCode, dataIntent)

  3. Configurar MediaRecorder / MediaCodec:

    • Formato (MPEG_4), bitrate, resolución, frame rate.
    • Canal de audio (AudioSource.MIC o AudioSource.VOICE_COMMUNICATION).
  4. Crear VirtualDisplay:

    mediaProjection.createVirtualDisplay(
    ScreenCapture,
    width, height, densityDpi,
    DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
    mediaRecorder.getSurface(), null, null)

  5. Iniciar grabación:

    mediaRecorder.start()

  6. Detener y liberar recursos cuando finalice.

4. Streaming en tiempo real

  • Codificación: Usar MediaCodec en modo configurado para retornar
    ByteBuffer codificados.
  • Transmisión: Conectar con un servidor RTMP/WebRTC a través de librerías
    de terceros (p. ej. libstreaming, rtmp-rtsp-stream-client-java).
  • Parámetros de red:

    Bitrate vídeo 1000–3000 kbps (adaptive)
    Resolución 720p o 1080p
    Frame rate 24–30 fps
  • Manejo de errores y reconexión: Implementar callbacks para reconectar
    automáticamente ante pérdida de red.

5. Superposiciones (Overlays)

  • Permiso SYSTEM_ALERT_WINDOW:

    Debe solicitarse en Settings.ACTION_MANAGE_OVERLAY_PERMISSION.

  • WindowManager.LayoutParams:

    • TYPE_APPLICATION_OVERLAY (API ≥ 26)
    • Flags: FLAG_NOT_FOCUSABLE, FLAG_LAYOUT_IN_SCREEN, etc.
  • Ejemplos de uso:

    • Chat Heads.
    • Controles flotantes para zoom o convertir texto.
    • Indicadores de grabación (LED rojo).
  • Consideraciones de rendimiento:

    • Reducir sobrecarga de dibujo usando Canvas optimizado.
    • Evitar layouts complejos mientras se graba/streaming para mantener fps.

6. Buenas prácticas y consejos

  • Solicitar y liberar permisos/recursos respetuosamente para no agotar memoria ni batería.
  • Mostrar al usuario un indicador claro de que la pantalla está siendo capturada.
  • Adaptar la calidad al ancho de banda disponible mediante bitrate adaptation.
  • Testear en distintos dispositivos (diferentes dpi, versiones de API).

Profundizando sobre: 15.1 Grabación de pantalla, streaming y superposiciones

Libros recomendados:

  • Android Programming: The Big Nerd Ranch Guide (Bill Phillips, Chris Stewart) – capítulo sobre multimedia y APIs de captura.
  • Professional Android, 4th Edition (Reto Meier, Ian Lake) – sección sobre MediaProjection y servicios en segundo plano.
  • Android Graphics Programming (Wallace Jackson) – explicación de Canvas, SurfaceView y superposiciones.

Recursos en línea:

Ejemplos y repositorios:

PreviusNext


¿Necesitas ayuda con este punto? Nuestra IA te puede ayudar

  • Hola 👋 , soy la IA de Synzen.org, puedes preguntarme siempre sobre la página donde estás leyendo, yo también la leo, así que puedo ayudarte a entenderlo, expandirlo, ponerte ejercicios…¡y mucho más!
Quiero saber más sobre… ...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *