Conectando…

La señal funciona.
Y ya sabemos qué hay dentro de la app.

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.

Resolución
Bitrate
Retardo
Reconexiones0
En directo0s
Ver el análisis

Diagnóstico en vivo

Estado
Motor
Búfer
Fotogramas
Segmentos0
Lo que extrajimos

El contenido del APK, al descubierto

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.

Paquete
com.laplataformaconexion.tv

Versión 1.0 · versionCode 1

Tecnología
Kotlin + Media3

ExoPlayer con layout XML. Sin Compose, sin librerías nativas.

Código propio
1 clase

Una sola Activity de unas 60 líneas. Todo lo demás es AndroidX.

Compatibilidad
Android 7+

minSdk 24 · targetSdk 34

Ofuscación
Ninguna

Nombres originales intactos: descompilación limpia.

Tamaño
10,7 MB

2 archivos DEX · 1.100 recursos

Estado actual

Qué ya resuelve y qué falta

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.

  • Reproductor sin controles use_controller="false": no hay pausa ni avance
  • Compatible con Google TV LEANBACK_LAUNCHER, banner de TV y leanback declarado
  • Compatible con móvil LAUNCHER y pantalla táctil como no obligatoria
  • Pantalla siempre encendida KEEP_SCREEN_ON: el salvapantallas no interrumpe
  • !
    Reconexión ante cortes Existe, pero mal implementada — ver defectos
  • Sistema de avisos Cero rastro de Firebase o FCM en todo el bytecode
  • Pantalla de ajustes No existe ninguna opción configurable
  • Panel de administración No hay forma de enviar mensajes a los dispositivos
Medición real

La señal, verificada en directo

Los valores del recuadro superior no son estimaciones: se miden ahora mismo sobre la emisión que estás viendo.

Formato
HLS

Segmentos TS de 4 segundos

Calidad
Variable

Se han medido 720p y 1080p según la emisión, con picos de 2.200 a 5.000 kbps

Cifrado
Sin DRM

Sin EXT-X-KEY: no requiere servidor de licencias

Un punto de atención en la infraestructura. La señal se emite en una única calidad, sin bitrate adaptativo. Un televisor con conexión débil no puede bajar a una resolución menor: se congela en lugar de degradarse. Y el caudal no es estable — se ha medido oscilando entre 2.200 y 5.000 kbps, con la resolución cambiando entre 720p y 1080p según lo que se emita. Con una conexión justa, los tramos de mayor caudal son exactamente donde la imagen se detendrá. Esto no se corrige en la aplicación, sino generando calidades adicionales en el servidor de emisión.
Hallazgos

Tres defectos en el reproductor actual

Detectados leyendo el código descompilado. Los tres afectan a la estabilidad de una emisión que debe funcionar sin interrupciones.

1 · Se reinicia entero cada 2 horas

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.

2 · El reintento usa una constante equivocada

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.

3 · Los reintentos se acumulan

Cada error programa un reintento nuevo sin cancelar los pendientes. Con varios fallos seguidos se crean y destruyen varios reproductores a la vez.

Evidencia

El código, tal como salió

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
        }
    })
}
La pieza que falta

Así se verían los avisos sobre la señal

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.

En móvil el comportamiento es distinto. Allí sí existe la barra de notificaciones, así que el mensaje llega al instante aunque la aplicación esté cerrada. Un mismo envío, dos formas de entrega.
Aviso de la empresa
Reunión general mañana a las 9:00
Se convoca a todo el personal al salón principal. Asistencia obligatoria.