- 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
4.5 KiB
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:
- Inicia en alta calidad (asume buena conexión)
- Se adapta hacia abajo si detecta buffering
- Vuelve a subir cuando la conexión mejora
- 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
-
Selector Manual de Calidad (UI)
- Botón para forzar 1080p/720p/auto
- Requiere agregar controles personalizados
-
Preferencias de Usuario
- Guardar preferencia de calidad
- Modo "WiFi-only HD"
-
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