From 6e224ce7b3ebc3c72bd2ffdd912cc89d5b3d888f Mon Sep 17 00:00:00 2001 From: Ren Date: Wed, 25 Feb 2026 19:05:14 -0300 Subject: [PATCH] Update README for VPN Edition --- README.md | 340 +++++++++--------------------------------------------- 1 file changed, 55 insertions(+), 285 deletions(-) diff --git a/README.md b/README.md index b1c5798..4070b69 100644 --- a/README.md +++ b/README.md @@ -1,306 +1,76 @@ -# 📺 StreamPlayer +# 🏆 Furbo VPN Edition [![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/) +[![Version](https://img.shields.io/badge/Version-10.2.0-blue.svg)]() [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) -Aplicación Android reproductora de streaming con optimización DNS para mejor rendimiento y acceso a contenido multimedia. +**StreamPlayer con VPN integrada** - La única app de streaming con Mullvad VPN built-in. -## 🌟 Características +## ✨ 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 +- 📺 **Streaming**: Reproducción de canales en vivo +- 🔒 **VPN Integrada**: Con Mullvad WireGuard - sin app externa +- 🌎 **Sin Bloqueos Geográficos**: VPN incluida para evitar restricciones +- 📱 **Android TV**: Optimizado para Android TV y control remoto +- ⚡ **Alto Rendimiento**: DNS over HTTPS con fallback + +## 🚀 Instalación + +### Opción 1: Descargar APK +Descargar el APK más reciente de [Releases](https://gitea.cbcren.online/renato97/furbo-vpn-edition/releases) + +### Opción 2: Compilar +```bash +# Clonar repositorio +git clone https://gitea.cbcren.online/renato97/furbo-vpn-edition.git +cd furbo-vpn-edition + +# Compilar +./gradlew assembleDebug + +# APK en: app/build/outputs/apk/debug/app-debug.apk +``` + +## 🔧 Uso de la VPN + +1. **Primera vez**: Tocar el botón "Conectar VPN" en el menú +2. **Permiso**: Aceptar el permiso de VPN cuando se solicite +3. **Listo**: La VPN se conecta automáticamente + +### Cambiar servidor VPN +Para cambiar el servidor Mullvad: +1. Descargar config desde [Mullvad Servers](https://mullvad.net/servers/) +2. Reemplazar el archivo `app/src/main/res/raw/mullvad.conf` +3. Recompilar ## 📋 Requisitos -- **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 +- **Android**: 7.0 (API 24) o superior +- **VPN**: WireGuard integrado (no requiere app externa) -## 🏗️ Arquitectura +## 🔐 Privacidad -### Componentes Principales +- **DNS**: Múltiples servidores DoH (Google, Cloudflare, AdGuard, Quad9) +- **VPN**: Mullvad - Sin logs, sin datos personales +- **Todo en uno**: No necesita otras apps -- **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 -```bash -# Android SDK -# Java 8+ -# Gradle 8.2+ -``` - -### Build con Gradle -```bash -# 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 -```bash -# Construir imagen -docker build -t streamplayer . - -# Ejecutar build -docker run --rm -v $(pwd)/output:/output streamplayer -``` - -### 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. - -### Dashboard de Dispositivos y Bloqueo Remoto - -Para saber en qué equipo está instalada la app y bloquear el acceso cuando lo necesites, se incluye un dashboard liviano en `dashboard/`: - -1. Instala dependencias y ejecuta el servidor: - -```bash -cd dashboard -npm install -npm start # escucha en http://localhost:4000 -``` - -2. Copia `dashboard/config.example.json` a `dashboard/config.json` y completa `telegramBotToken` + `telegramChatId` (o usa variables de entorno `TELEGRAM_BOT_TOKEN` / `TELEGRAM_CHAT_ID`). -3. Ajusta `DEVICE_REGISTRY_URL` en `app/build.gradle` para apuntar al dominio/puerto donde despliegues el servidor (ya configurado como `http://194.163.191.200:4000`). -4. Distribuye el APK; cada instalación reportará `ANDROID_ID`, modelo, IP pública y país. -5. Entra a `http://TU_HOST:4000/` para ver el listado, asignar alias, bloquear/desbloquear o validar tokens. - -El servidor guarda los datos en `dashboard/data/devices.json`, por lo que puedes versionarlo o respaldarlo fácilmente. Cada registro almacena: - -- `deviceId`: `Settings.Secure.ANDROID_ID` del equipo -- `deviceName`, `manufacturer`, `model`, `osVersion` -- `appVersionName`/`Code` -- `ip`, `country` detectados automáticamente -- `firstSeen`, `lastSeen`, `blocked`, `notes`, `verification.status` - -Cuando presionas “Bloquear”, la app recibe la respuesta `{"blocked": true}` y muestra un diálogo irreversible hasta que lo habilites. Esto añade una capa adicional de control aparte del sistema de actualizaciones. - -### Flujo dentro de la app y tokens divididos - -- 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. -- Mientras el dashboard mantenga un dispositivo "Pendiente" o "Bloqueado", la app muestra un diálogo con el motivo y la mitad del token que debe compartir la persona. - -Cada instalación genera un token interno dividido en dos: - -1. **Parte cliente**: se muestra en el diálogo del dispositivo bloqueado para que el usuario pueda copiarla. -2. **Parte admin**: llega al bot de Telegram configurado junto con la IP, país y datos del dispositivo. - -Para autorizar un dispositivo pendiente: - -1. Obtén la parte cliente desde el usuario (visible en pantalla). -2. Copia la parte admin del mensaje de Telegram. -3. En el dashboard presiona “Verificar token” e introduce ambas mitades. Si coinciden, el estado pasa a "Verificado" y la app se desbloquea automáticamente. -4. A partir de allí puedes bloquear/desbloquear manualmente cuando quieras. - -También puedes gestionar todo desde Telegram: - -- `/allow ` autoriza el dispositivo (verifica el token y lo desbloquea). -- `/deny [motivo]` lo bloquea con un motivo opcional. -- `/pending` lista los registros que aún esperan un token válido. - -Cada nuevo registro dispara una notificación de Telegram con la parte admin del token y recordatorios de esos comandos. - -## 📱 Estructura del Proyecto +## 📁 Estructura ``` -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 +app/src/main/ +├── java/com/streamplayer/ +│ ├── MainActivity.java # UI principal +│ ├── VpnManager.java # Gestión VPN +│ └── ... +├── res/raw/ +│ └── mullvad.conf # Configuración VPN +└── AndroidManifest.xml ``` -## ⚙️ 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) - ---- - -⚠️ **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 +- Issues: [GitHub Issues](https://gitea.cbcren.online/renato97/furbo-vpn-edition/issues) --- -**🔗 Repositorio**: https://gitea.cbcren.online/renato97/app +⚠️ **Disclaimer**: Esta aplicación es para fines educativos. El usuario es responsable de cumplir con los términos de servicio de las plataformas de streaming.