diff --git a/README.md b/README.md index ea43a33..ecc227e 100644 --- a/README.md +++ b/README.md @@ -1,258 +1,75 @@ -# 📺 StreamPlayer +# 📺 StreamPlayer - Android IPTV Application -[![Android](https://img.shields.io/badge/Platform-Android-green.svg)](https://android.com) -[![Java](https://img.shields.io/badge/Language-Java-orange.svg)](https://www.oracle.com/java/) -[![API](https://img.shields.io/badge/Min%20SDK-21%2B-brightgreen.svg)](https://android-developers.blogspot.com/) -[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) +## 📝 Description / Descripción -Aplicación Android reproductora de streaming con optimización DNS para mejor rendimiento y acceso a contenido multimedia. +**English:** +A modern Android IPTV streaming application built with Java. Features include live TV channel browsing, event-based content, video-on-demand (VOD), and a robust DNS fallback system for uninterrupted streaming. -## 🌟 Características +**Español:** +Una aplicación moderna de streaming IPTV para Android desarrollada en Java. Incluye navegación de canales de TV en vivo, contenido basado en eventos, video bajo demanda (VOD) y un sistema robusto de respaldo DNS para streaming ininterrumpido. -- **▶️ 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 +## 🚀 Features / Características -## 📋 Requisitos +**English:** +- Live TV channel browsing with categories +- Event-based content (sports, movies, series) +- Video-on-demand (VOD) support +- Multiple stream URL resolution strategies +- DNS fallback system for reliability +- TV-optimized UI with remote control support +- Real-time updates via Gitea releases -- **Android SDK**: API 21 (Android 5.0) o superior -- **Target SDK**: API 33 (Android 13) -- **Permisos**: - - `INTERNET` - Acceso a streaming - - `ACCESS_NETWORK_STATE` - Verificación de conectividad - - `CHANGE_NETWORK_STATE` - Configuración de red +**Español:** +- Navegación de canales de TV en vivo con categorías +- Contenido basado en eventos (deportes, películas, series) +- Soporte para Video bajo demanda (VOD) +- Múltiples estrategias de resolución de URLs de streaming +- Sistema de respaldo DNS para mayor confiabilidad +- Interfaz optimizada para TV con soporte de control remoto +- Actualizaciones en tiempo real mediante releases de Gitea -## 🏗️ Arquitectura +## 🛠️ Tech Stack / Stack Tecnológico -### Componentes Principales +- **Language:** Java +- **Platform:** Android (API 21+) +- **Build System:** Gradle +- **Video Player:** VLC (libVLC) +- **Networking:** OkHttp +- **Architecture:** Repository Pattern -- **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) +## 📱 Screenshots / Capturas de Pantalla -- **StreamUrlResolver.java** (`/app/src/main/java/com/streamplayer/StreamUrlResolver.java`) - - Resolución de URLs ofuscadas - - Decodificación Base64 - - Extracción de claves de JavaScript +*Coming soon / Próximamente* -- **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 +## 🔧 Installation / Instalación -## 🚀 Instalación y Build +**English:** +1. Download the latest APK from the releases page +2. Enable "Install from Unknown Sources" in Android settings +3. Install the APK +4. Configure your IPTV provider settings -### Prerequisites -```bash -# Android SDK -# Java 8+ -# Gradle 8.2+ -``` +**Español:** +1. Descarga el último APK de la página de releases +2. Habilita "Instalar desde fuentes desconocidas" en ajustes de Android +3. Instala el APK +4. Configura los ajustes de tu proveedor IPTV -### Build con Gradle -```bash -# Clone el repositorio -git clone https://gitea.cbcren.online/renato97/app.git -cd app +## 🌐 API Integration / Integración API -# Build APK debug -./gradlew assembleDebug +- Gitea API for release management +- Custom IPTV stream URL resolution +- DNS over HTTPS (DoH) support -# Build APK release -./gradlew assembleRelease -``` +## 👨‍💻 Author / Autor -### Build con Docker -```bash -# Construir imagen -docker build -t streamplayer . +**Renato CBC** +- GitHub: [renato97](https://gitea.cbcren.online/renato97) -# Ejecutar build -docker run --rm -v $(pwd)/output:/output streamplayer -``` +## 📄 License / Licencia -### Build Script Alternativo -```bash -# Usar script de build -chmod +x build_apk.sh -./build_apk.sh -``` - -## 🔄 Control de Instalaciones y Actualizaciones - -StreamPlayer ahora consulta automáticamente las releases públicas del repositorio Gitea y puede forzar o sugerir actualizaciones directamente desde la app. Para aprovecharlo: - -1. Ejecuta un build nuevo incrementando `versionCode`/`versionName` en `app/build.gradle`. -2. Crea una release en Gitea asignando un tag como `v9.1` y sube el APK. -3. Adjunta un archivo `update-manifest.json` en la misma release (puedes partir de `release/update-manifest.example.json`). - -### Formato de `update-manifest.json` - -```json -{ - "versionCode": 91000, - "versionName": "9.1.0", - "minSupportedVersionCode": 90000, - "forceUpdate": false, - "downloadUrl": "https://gitea.cbcren.online/renato97/app/releases/download/v9.1/StreamPlayer-v9.1.apk", - "fileName": "StreamPlayer-v9.1.apk", - "sizeBytes": 12345678, - "notes": "Novedades destacadas que aparecerán en el diálogo dentro de la app" -} -``` - -- `versionCode` / `versionName`: deben coincidir con el APK publicado. -- `minSupportedVersionCode`: define desde qué versión mínima se permite seguir usando la app (ideal para bloquear instalaciones antiguas). -- `forceUpdate`: si es `true` la app mostrará un diálogo sin opción de omitir. -- `downloadUrl` / `fileName`: apuntan al asset `.apk` publicado en Gitea (puede ser el enlace de descarga directo). -- `notes`: texto libre mostrado en el diálogo dentro de la app; si lo omitís se usará el cuerpo de la release. - -Si por algún motivo olvidas subir el manifiesto, la app igualmente tomará el primer asset `.apk` de la release, pero no podrá forzar versiones mínimas. - -### Flujo dentro de la app - -- Cada vez que se abre `MainActivity` se consulta `https://gitea.cbcren.online/api/v1/repos/renato97/app/releases/latest`. -- Si `versionCode` del servidor es mayor al instalado se muestra un diálogo para actualizar; el usuario puede abrir la release o descargarla directamente. -- Si `minSupportedVersionCode` es mayor al instalado la app bloqueará el uso hasta actualizar, cumpliendo con el requerimiento de controlar instalaciones. -- La descarga se gestiona con `DownloadManager` y, una vez completada, se lanza el instalador usando FileProvider. - -## 📱 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 -```java -// 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 -1. **MainActivity** inicializa y configura DNS de Google -2. **StreamUrlResolver** obtiene y decodifica la URL real del stream -3. **ExoPlayer** inicia la reproducción con la URL resuelta -4. 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` | 90000 | -| `versionName` | "9.0.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** -```bash -# 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 - -1. Fork del repositorio -2. Feature branch (`git checkout -b feature/NuevaCaracteristica`) -3. Commit cambios (`git commit -m 'Add feature'`) -4. Push al branch (`git push origin feature/NuevaCaracteristica`) -5. Pull Request - -## 📄 Licencia - -Este proyecto está licenciado bajo la Licencia MIT - ver archivo [LICENSE](LICENSE) para detalles. - -## 👨‍💻 Autor - -**renato97** - [Gitea Profile](https://gitea.cbcren.online/renato97) +Private project / Proyecto privado --- -⚠️ **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 +**Tags / Etiquetas:** `android` `iptv` `streaming` `java` `vlc` `tv-app`