Major Features: - Dual tab interface (Channels and Events) with visible focus - Real-time event status calculation (Live, Upcoming, Finished) - Smart caching system for events (24-hour cache) - Argentina timezone support (America/Argentina/Buenos_Aires) UI/TV Improvements: - Focusable tabs with bg_tab_selector for D-pad navigation - Visual feedback with highlighted borders on focused tabs - Consistent design between tabs and content cards - Enhanced TV navigation experience Real-Time Event System: - EventRepository: Centralized event management with 24h cache - EventAdapter: Optimized RecyclerView for event listings - EventItem: Structured data model for events - Dynamic status calculation (remaining time, live duration, completion) - Automatic link normalization to global2.php Technical Implementation: - activity_main.xml: Complete dual-tab layout - item_event.xml: Dedicated event item layout with RecyclerView - bg_tab_selector.xml: Tab states (selected, focused, pressed) - MainActivity.java: Tab switching and event management - Automatic URL processing for seamless PlayerActivity integration Time Zone Features: - Argentina local time (America/Argentina/Buenos_Aires) - Real-time status updates without page refresh - "En Xh Ym" for upcoming events - "En vivo durante 2h" status for live events - "Finalizado" status for completed events Solutions: - Fixed web page "En vivo" not updating issue - Provides always-current event status in app - Direct event-to-player navigation without manual intervention - Improved TV navigation with clear visual feedback 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
📺 StreamPlayer
Aplicación Android reproductora de streaming con optimización DNS para mejor rendimiento y acceso a contenido multimedia.
🌟 Características
- ▶️ Reproducción Streaming: Reproductor de video streaming optimizado con ExoPlayer
- 🌐 Optimización DNS: Configuración automática de DNS de Google (8.8.8.8, 8.8.4.4) para mejor conectividad
- 🔍 Resolución de URL: Sistema avanzado que resuelve URLs ofuscadas de streaming
- 📱 Orientación Landscape: Diseño optimizado para experiencia multimedia inmersiva
- ⚡ Alto Rendimiento: Implementación asíncrona para respuesta rápida
- 🛡️ Manejo de Errores: Sistema robusto de gestión de errores y estados
📋 Requisitos
- Android SDK: API 21 (Android 5.0) o superior
- Target SDK: API 33 (Android 13)
- Permisos:
INTERNET- Acceso a streamingACCESS_NETWORK_STATE- Verificación de conectividadCHANGE_NETWORK_STATE- Configuración de red
🏗️ Arquitectura
Componentes Principales
-
MainActivity.java (
/app/src/main/java/com/streamplayer/MainActivity.java)- Gestión del ciclo de vida del reproductor
- Configuración de ExoPlayer
- Manejo de estados (loading, error, reproducción)
-
StreamUrlResolver.java (
/app/src/main/java/com/streamplayer/StreamUrlResolver.java)- Resolución de URLs ofuscadas
- Decodificación Base64
- Extracción de claves de JavaScript
-
DNSSetter.java (
/app/src/main/java/com/streamplayer/DNSSetter.java)- Configuración de DNS de Google
- Optimización de red para streaming
- Pre-resolución de dominios
🚀 Instalación y Build
Prerequisites
# Android SDK
# Java 8+
# Gradle 8.2+
Build con Gradle
# Clone el repositorio
git clone https://gitea.cbcren.online/renato97/app.git
cd app
# Build APK debug
./gradlew assembleDebug
# Build APK release
./gradlew assembleRelease
Build con Docker
# Construir imagen
docker build -t streamplayer .
# Ejecutar build
docker run --rm -v $(pwd)/output:/output streamplayer
Build Script Alternativo
# Usar script de build
chmod +x build_apk.sh
./build_apk.sh
📱 Estructura del Proyecto
app/
├── src/main/
│ ├── java/com/streamplayer/
│ │ ├── MainActivity.java # Actividad principal
│ │ ├── StreamUrlResolver.java # Resolvedor de URLs
│ │ └── DNSSetter.java # Configuración DNS
│ ├── res/
│ │ ├── layout/
│ │ │ └── activity_main.xml # UI principal
│ │ ├── mipmap-*/ # Íconos de la app
│ │ ├── values/
│ │ │ ├── strings.xml # Cadenas de texto
│ │ │ ├── colors.xml # Colores
│ │ │ └── themes.xml # Temas
│ │ └── xml/ # Configuraciones
│ └── AndroidManifest.xml # Manifiesto Android
├── build.gradle # Configuración Gradle
└── proguard-rules.pro # Reglas ProGuard
⚙️ Configuración
URL de Streaming
La aplicación está configurada por defecto para:
https://streamtpmedia.com/global2.php?stream=espn
Configuración DNS
// DNS configurados automáticamente
String[] GOOGLE_DNS = {"8.8.8.8", "8.8.4.4"};
🔧 Dependencias Principales
- ExoPlayer 2.18.7: Motor de reproducción multimedia
- AndroidX AppCompat 1.6.1: Compatibilidad hacia atrás
- ConstraintLayout 2.1.4: Layout moderno y flexible
🛠️ Desarrollo
Flujo de Reproducción
- MainActivity inicializa y configura DNS de Google
- StreamUrlResolver obtiene y decodifica la URL real del stream
- ExoPlayer inicia la reproducción con la URL resuelta
- UI actualiza estados (loading, playing, error)
Características Técnicas
- Threading: Operaciones de red en background thread
- Memory Management: Proper lifecycle management de ExoPlayer
- Error Handling: Captura y display de errores al usuario
- Network Optimization: Configuración DNS específica para streaming
📊 Build Configuration
| Atributo | Valor |
|---|---|
applicationId |
com.streamplayer |
minSdk |
21 |
targetSdk |
33 |
versionCode |
1 |
versionName |
"1.0" |
compileSdk |
33 |
🔐 Permisos y Seguridad
La aplicación requiere los siguientes permisos:
- ✅
INTERNET- Para streaming de contenido - ✅
ACCESS_NETWORK_STATE- Para verificar conectividad - ✅
CHANGE_NETWORK_STATE- Para optimización de red
🐛 Troubleshooting
Problemas Comunes
Error de Conexión
- Verificar conexión a internet
- Confirmar configuración DNS
- Revisar disponibilidad del servicio de streaming
Error de Reproducción
- Validar formato de URL
- Verificar permisos de red
- Revisar logs de ExoPlayer
Build Fail
# Limpiar proyecto
./gradlew clean
# Rebuild
./gradlew build
📝 Logs y Debug
La aplicación incluye console logging para:
- Configuración DNS
- Resolución de URLs
- Estados del reproductor
- Errores de red
🤝 Contribución
- Fork del repositorio
- Feature branch (
git checkout -b feature/NuevaCaracteristica) - Commit cambios (
git commit -m 'Add feature') - Push al branch (
git push origin feature/NuevaCaracteristica) - Pull Request
📄 Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver archivo LICENSE para detalles.
👨💻 Autor
renato97 - Gitea Profile
⚠️ Disclaimer: Esta aplicación es para fines educativos y de demostración. El usuario es responsable de cumplir con los términos de servicio de las plataformas de streaming utilizadas.
📞 Soporte
Para soporte y preguntas:
- 📧 Crear un issue en el repositorio
- 💬 Comentarios en el código
- 📱 Testing en dispositivos reales recomendado
🔗 Repositorio: https://gitea.cbcren.online/renato97/app