Esta página reproduce la señal real de CONEXION TV en directo y resume el análisis completo del APK actual: su tecnología, lo que ya resuelve y lo que le falta.
El paquete se descompiló por completo: manifiesto, recursos, layouts y código. No tiene ofuscación, así que el resultado es legible línea por línea.
Versión 1.0 · versionCode 1
ExoPlayer con layout XML. Sin Compose, sin librerías nativas.
Una sola Activity de unas 60 líneas. Todo lo demás es AndroidX.
minSdk 24 · targetSdk 34
Nombres originales intactos: descompilación limpia.
2 archivos DEX · 1.100 recursos
El manifiesto confirma que la app ya está preparada para televisor y para teléfono con un único paquete. Lo que no existe es todo el sistema de avisos.
Los valores del recuadro superior no son estimaciones: se miden ahora mismo sobre la emisión que estás viendo.
Segmentos TS de 4 segundos
Se han medido 720p y 1080p según la emisión, con picos de 2.200 a 5.000 kbps
Sin EXT-X-KEY: no requiere servidor de licencias
Detectados leyendo el código descompilado. Los tres afectan a la estabilidad de una emisión que debe funcionar sin interrupciones.
Un temporizador de 7200000 ms llama a recreate() y reconstruye la
pantalla completa. Produce un corte visible cada dos horas. Es un parche para tapar otro
problema, no una solución.
Al fallar la señal reintenta pasado DEFAULT_DETACH_SURFACE_TIMEOUT_MS, una
constante que nada tiene que ver con reintentos. El efecto es que insiste cada 2 segundos
indefinidamente, sin espera creciente ni límite.
Cada error programa un reintento nuevo sin cancelar los pendientes. Con varios fallos seguidos se crean y destruyen varios reproductores a la vez.
Fragmento real de MainActivity reconstruido
desde el APK, con los dos puntos críticos señalados.
// Reconstruido desde classes.dex — sin ofuscación private val RESTART_INTERVAL = 7200000L // ← reinicio forzado cada 2 h override fun onStart() { initializePlayer() handler.postDelayed(restartRunnable, RESTART_INTERVAL) } private fun initializePlayer() { player?.release() player = ExoPlayer.Builder(this).build().apply { setMediaItem(MediaItem.fromUri("https://stream.conexion.com.ve:3468/…")) prepare() playWhenReady = true } player?.addListener(object : Player.Listener { override fun onPlayerError(error: PlaybackException) { handler.postDelayed({ initializePlayer() }, ExoPlayer.DEFAULT_DETACH_SURFACE_TIMEOUT_MS) // ← constante incorrecta } }) }
Google TV no dispone de barra de notificaciones del sistema, de modo que el aviso se dibuja sobre la propia emisión. Los mensajes que lleguen con la aplicación cerrada se acumulan y se muestran al abrirla, sin que se pierda ninguno.