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
:
- Seleccionar perfil de códec (AVC, HEVC) y nivel.
- Establecer
MediaFormat.KEY_BIT_RATE
(por ejemplo, 4_000_000 para 4 Mbps). - 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:
- Obtener
CaptureRequest.Builder
. - Invocar
builder.set(CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE, CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON)
. - 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()
ogetOutputFormats
. - 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:
- Detectar condiciones (p.ej. baja luz).
- Calcular nuevo rango FPS (por ejemplo, [15, 30]).
- Actualizar
CaptureRequest
conbuilder.set(CONTROL_AE_TARGET_FPS_RANGE, nuevoRango)
. - 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:
- Documentación Media Formats (MediaCodec) – Descripción de códecs soportados, manejo de bitrates y perfiles.
- Camera2 FPS Range – Control de tasas de cuadros variables en Camera2 API.
- CameraX Video Capture – Opciones de estabilización de vídeo en CameraX.
- Ejemplos MediaCodec – Implementaciones prácticas de codificación y decodificación de vídeo.
- Artículo en Medium: Streaming y MediaCodec – Transmisión en tiempo real, ajuste dinámico de bitrate y manejo de FPS variables.
Deja una respuesta