Files
app/QUALITY_OPTIMIZATION.md
renato97 c256dc9aa8 Optimize video quality settings for 720p/1080p streaming
- Implemented DefaultTrackSelector with forceHighestSupportedBitrate
- Configured LoadControl with 30-60s buffer for HD streams
- Set initial bandwidth estimate to 5 Mbps for faster HD start
- Added quality logging for debugging
- Created QUALITY_OPTIMIZATION.md documentation

Cambios en PlayerActivity.java:
- MaxVideoSize hasta 4K
- MaxVideoBitrate sin límite
- ExceedVideoConstraintsIfNecessary habilitado
- Buffer optimizado: 30s min, 60s max
- Inicio rápido: 2s
2026-01-11 19:41:59 -03:00

4.5 KiB

Optimización de Calidad de Streaming

🎯 Objetivo

Maximizar la calidad de transmisión para aprovechar resoluciones 720p y 1080p cuando estén disponibles en los streams HLS.

📊 Cambios Implementados

1. DefaultTrackSelector - Selección Inteligente de Calidad

DefaultTrackSelector trackSelector = new DefaultTrackSelector(this);
trackSelector.setParameters(
    new DefaultTrackSelector.ParametersBuilder(this)
        .setMaxVideoSize(3840, 2160)            // Hasta 4K
        .setMaxVideoBitrate(Integer.MAX_VALUE)   // Sin límite
        .setForceHighestSupportedBitrate(true)   // MÁXIMA CALIDAD
        .setExceedVideoConstraintsIfNecessary(true)
        .build()
);

Impacto:

  • Prioriza automáticamente 1080p sobre 720p
  • Selecciona 720p sobre 480p cuando disponible
  • No limita artificialmente la calidad

2. DefaultLoadControl - Buffering Optimizado

DefaultLoadControl loadControl = new DefaultLoadControl.Builder()
    .setBufferDurationsMs(
        30000,  // Buffer mínimo: 30 segundos
        60000,  // Buffer máximo: 60 segundos
        2000,   // Inicio rápido: 2 segundos
        5000    // Re-buffering: 5 segundos
    )
    .build();

Impacto:

  • Buffers más grandes = menos interrupciones en HD
  • Inicio rápido (2s) para buena UX
  • Recuperación rápida de buffering (5s)

3. DefaultBandwidthMeter - Estimación Optimista

DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(this)
    .setInitialBitrateEstimate(5_000_000)  // Asumir 5 Mbps inicialmente
    .build();

Impacto:

  • Empieza con expectativa de HD (720p)
  • Se adapta dinámicamente según conexión real
  • Evita comenzar en calidad baja innecesariamente

4. Logging de Calidad (Debug)

if (player.getVideoFormat() != null) {
    Log.i("PlayerActivity", 
        "Reproduciendo: " + player.getVideoFormat().width + "x" + 
        player.getVideoFormat().height + " @ " + 
        player.getVideoFormat().bitrate + " bps");
}

Uso: Ver en logcat qué calidad está reproduciendo actualmente

📈 Resultados Esperados

Antes de la Optimización

Conexión Calidad Típica Bitrate
WiFi rápido 480p-720p 2-3 Mbps
4G/5G 360p-480p 1-2 Mbps

Después de la Optimización

Conexión Calidad Típica Bitrate
WiFi rápido 720p-1080p 3-8 Mbps
4G/5G 480p-720p 2-5 Mbps

🔍 Cómo Verificar la Calidad

Método 1: Logcat (Desarrollador)

adb logcat | grep "PlayerActivity"
# Verás: "Reproduciendo: 1920x1080 @ 5500000 bps" (ejemplo 1080p)

Método 2: Visual

  • 1080p: Imagen muy nítida, detalles en textos pequeños
  • 720p: Imagen nítida, buena para la mayoría
  • 480p: Imagen suave, perceptible en pantallas grandes
  • 360p: Imagen pixelada, solo para conexiones lentas

⚠️ Consideraciones

Consumo de Datos

Calidad Consumo/hora
1080p ~3-4 GB
720p ~1.5-2 GB
480p ~500-800 MB
360p ~300-500 MB

Requisitos de Conexión

  • 1080p: Mínimo 5 Mbps estable
  • 720p: Mínimo 2.5 Mbps estable
  • 480p: Mínimo 1 Mbps estable

🎮 Comportamiento Dinámico

El player ahora:

  1. Inicia en alta calidad (asume buena conexión)
  2. Se adapta hacia abajo si detecta buffering
  3. Vuelve a subir cuando la conexión mejora
  4. Prioriza calidad sobre conservar datos

📝 Notas Técnicas

Sobre los Streams HLS

Los streams de streamtpmedia.com típicamente ofrecen:

  • Resolución automática (adaptativa)
  • Múltiples bitrates para cada resolución
  • Fragmentos de 2-6 segundos

El StreamUrlResolver obtiene el manifest master (.m3u8) que contiene todas las calidades. ExoPlayer ahora elige la mejor automáticamente.

Limitaciones del Source

Si un stream específico solo ofrece hasta 720p, no se puede forzar 1080p. La calidad máxima depende de la fuente.

🔧 Futuras Mejoras Posibles

  1. Selector Manual de Calidad (UI)

    • Botón para forzar 1080p/720p/auto
    • Requiere agregar controles personalizados
  2. Preferencias de Usuario

    • Guardar preferencia de calidad
    • Modo "WiFi-only HD"
  3. Estadísticas en Pantalla

    • Mostrar calidad actual en overlay
    • Indicador de buffering/bitrate

📦 Versión

Optimización implementada en: v9.4.3 (pendiente) Archivo modificado: PlayerActivity.java