15.2 Códecs, tasas de bits, estabilización y FPS variables

15.2 Códecs, tasas de bits, estabilización y FPS variables

Códecs en Android

Android expone a través de MediaCodec y MediaRecorder una variedad de códecs para comprimir audio y vídeo. La elección del códec impacta en calidad, tamaño de archivo y compatibilidad.

Códec Tipo Ventajas Desventajas
H.264/AVC Vídeo Amplia compatibilidad, hardware acelerado Menor eficiencia vs HEVC
HEVC/H.265 Vídeo Mayor compresión, buena calidad Requiere hardware reciente, licencias
VP8 / VP9 / AV1 Vídeo Libre de royalties, buena eficiencia Soporte hardware limitado (AV1)
AAC / AAC-LC Audio Alta calidad a bitrates bajos Nivel de complejidad media
Opus Audio Excelente para voz, muy baja latencia Inmadura en algunos dispositivos

Tasas de bits (Bitrates)

La tasa de bits define cuántos bits por segundo se asignan a la pista de vídeo o audio.

  • CBR (Constant Bit Rate): tasa fija. Sencillo de predecir, pero puede sobredimensionar o degradar calidad según la escena.
  • VBR (Variable Bit Rate): ajusta la tasa en función de complejidad de la imagen. Más eficiente en tamaño y calidad, pero requiere buffer de salida mayor.

Configuración típica en MediaRecorder o MediaCodec:

  1. Seleccionar perfil de códec (AVC, HEVC) y nivel.
  2. Establecer MediaFormat.KEY_BIT_RATE (por ejemplo, 4_000_000 para 4 Mbps).
  3. Opcional: en VBR usar parámetros propios del códec (en HEVC el modo “quality”).

Estabilización de Vídeo

La estabilización compensa movimientos de mano o vibraciones.

  • OIS (Optical Image Stabilization): estabiliza físicamente el sensor o lente. Requiere hardware de cámara.
  • EIS (Electronic Image Stabilization): recorta y alinea fotogramas digitalmente. Se configura en Camera2 API:
Modo Constante Uso
CONTROL_VIDEO_STABILIZATION_MODE_OFF Sin estabilizar Captura nativa
CONTROL_VIDEO_STABILIZATION_MODE_ON EIS Requiere soporte de HW

Pasos para activar EIS en Camera2:

  1. Obtener CaptureRequest.Builder.
  2. Invocar builder.set(CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE, CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON).
  3. Enviar repetidamente peticiones de captura al CameraCaptureSession.

FPS Variables (Frame Rates Dinámicos)

En entornos con luz cambiante o para ahorro de batería, puede convenir ajustar dinámicamente los frames por segundo.

  • Rango de FPS: consultar StreamConfigurationMap.getHighSpeedVideoFpsRanges() o getOutputFormats.
  • Selección de rango: mediante CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE.
  • FPS dinámico: ajustar en tiempo real según condiciones de luz o detección de movimiento.

Ejemplo de ajuste programático:

  1. Detectar condiciones (p.ej. baja luz).
  2. Calcular nuevo rango FPS (por ejemplo, [15, 30]).
  3. Actualizar CaptureRequest con builder.set(CONTROL_AE_TARGET_FPS_RANGE, nuevoRango).
  4. Enviar repetición de solicitud al CameraCaptureSession.

Profundizando sobre: 15.2 Códecs, tasas de bits, estabilización y FPS variables

Libros recomendados:

  • Android High Performance Programming – Enrique López Mañas. Capítulos sobre codificadores MediaCodec, ajuste de tasas de bits y optimización de FPS.
  • Professional Android – Reto Meier amp Ian Lake. Sección avanzada de multimedia: códecs, renderizado de vídeo y estabilización.
  • Learning FFmpeg – Taner Şenyurt amp Ralf Willenbacher. Guía práctica de procesamiento de vídeo, transcodificación y control de bitrates.

Recursos en línea:

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 *