|
# DaddyTV - IPTV PWA |
|
|
|
Aplicación web PWA para reproducir listas IPTV (.m3u/.m3u8) con interfaz amigable y enfoque personal para amigos y familiares. |
|
|
|
## 🚀 Características |
|
|
|
- **PWA Instalable**: Funciona como app nativa en PC, móvil y TV |
|
- **Autenticación por código**: Sin registro, solo validación de código único |
|
- **Control de reproducción única**: Un canal por usuario simultáneamente |
|
- **Navegación con mando**: Compatible con controles remotos de TV |
|
- **Proxy integrado**: Bypass para canales con restricciones CORS/geo |
|
- **Sin base de datos**: Solo caché en memoria con TTL |
|
- **Responsive**: Optimizado para todos los dispositivos |
|
|
|
## 🛠️ Tecnologías |
|
|
|
### Backend |
|
- **FastAPI** (Python) - API REST modular |
|
- **Requests** - Cliente HTTP para M3U y proxy |
|
- **Cryptography** - Cifrado AES para códigos |
|
- **Uvicorn** - Servidor ASGI |
|
|
|
### Frontend |
|
- **React 18** + **TypeScript** - Interfaz de usuario |
|
- **Vite** - Build tool y dev server |
|
- **Tailwind CSS** - Estilos y diseño responsive |
|
- **HLS.js** - Reproductor de video streaming |
|
- **Lucide React** - Iconos |
|
|
|
## 📦 Instalación y Desarrollo |
|
|
|
### Prerrequisitos |
|
- Node.js 18+ |
|
- Python 3.9+ |
|
|
|
### Configuración |
|
|
|
1. **Clonar el repositorio** |
|
```bash |
|
git clone <repo-url> |
|
cd daddytv |
|
``` |
|
|
|
2. **Configurar variables de entorno** |
|
```bash |
|
cp .env.example .env |
|
``` |
|
|
|
Editar `.env` con tus valores: |
|
```env |
|
MAIN_M3U_URL=https://tu-playlist.m3u8 |
|
ADMIN_CODE=tu-codigo-admin-hex |
|
AES_SECRET=tu-secreto-aes |
|
BASE_URL=https://tu-dominio.com |
|
``` |
|
|
|
3. **Instalar dependencias del frontend** |
|
```bash |
|
npm install |
|
``` |
|
|
|
4. **Instalar dependencias del backend** |
|
```bash |
|
cd api |
|
pip install -r requirements.txt |
|
``` |
|
|
|
### Desarrollo Local |
|
|
|
1. **Iniciar backend** (terminal 1): |
|
```bash |
|
cd api |
|
uvicorn main:app --reload --port 8000 |
|
``` |
|
|
|
2. **Iniciar frontend** (terminal 2): |
|
```bash |
|
npm run dev |
|
``` |
|
|
|
La aplicación estará disponible en `http://localhost:5173` |
|
|
|
## 🚀 Despliegue |
|
|
|
### Vercel (Recomendado) |
|
|
|
1. **Conectar repositorio a Vercel** |
|
2. **Configurar variables de entorno** en el dashboard de Vercel |
|
3. **Deploy automático** - Vercel detecta la configuración automáticamente |
|
|
|
### Render |
|
|
|
**Backend (Servicio Web):** |
|
- Build Command: `pip install -r requirements.txt` |
|
- Start Command: `uvicorn main:app --host 0.0.0.0 --port $PORT` |
|
- Root Directory: `api` |
|
|
|
**Frontend (Sitio Estático):** |
|
- Build Command: `npm run build` |
|
- Publish Directory: `dist` |
|
|
|
## 📁 Estructura del Proyecto |
|
|
|
``` |
|
daddytv/ |
|
├── api/ # Backend FastAPI |
|
│ ├── main.py # Punto de entrada |
|
│ ├── auth.py # Autenticación |
|
│ ├── m3u_parser.py # Parser de M3U |
|
│ ├── proxy.py # Proxy para streams |
|
│ ├── viewers.py # Control de visualización |
|
│ ├── admin.py # Panel de administración |
|
│ ├── utils.py # Utilidades |
|
│ └── requirements.txt # Dependencias Python |
|
├── src/ # Frontend React |
|
│ ├── components/ # Componentes UI |
|
│ ├── contexts/ # Context providers |
|
│ ├── hooks/ # Custom hooks |
|
│ ├── services/ # Servicios API |
|
│ ├── types/ # Tipos TypeScript |
|
│ └── main.tsx # Punto de entrada |
|
├── public/ # Archivos estáticos |
|
├── vercel.json # Configuración Vercel |
|
└── package.json # Dependencias Node.js |
|
``` |
|
|
|
## 🔧 API Endpoints |
|
|
|
### Autenticación |
|
- `POST /api/auth` - Validar código de acceso |
|
- `POST /api/logout` - Cerrar sesión |
|
- `POST /api/ping` - Verificar autenticación |
|
|
|
### Canales |
|
- `GET /api/channels` - Obtener lista de canales |
|
- `GET /api/playlist.m3u` - Descargar playlist M3U |
|
|
|
### Streaming |
|
- `GET /api/proxy?url=<stream_url>` - Proxy para streams |
|
- `POST /api/viewers` - Registrar visualización |
|
- `GET /api/viewers/{channel_id}` - Contador de viewers |
|
|
|
### Administración |
|
- `POST /api/admin/update` - Actualizar configuración |
|
- `GET /api/admin/status` - Estado del sistema |
|
|
|
## 🎮 Controles |
|
|
|
### Teclado/Mando |
|
- **↑/↓** - Navegar lista de canales |
|
- **Enter** - Seleccionar canal |
|
- **Escape** - Volver/Cerrar |
|
- **Backspace** - Retroceder |
|
|
|
### Ratón/Táctil |
|
- **Click/Tap** - Seleccionar elementos |
|
- **Scroll** - Navegar listas |
|
- **Hover** - Mostrar controles de video |
|
|
|
## 🔒 Seguridad |
|
|
|
- **Códigos únicos**: Validación sin almacenamiento |
|
- **Tokens temporales**: Sesiones en memoria |
|
- **Rate limiting**: Protección contra abuso |
|
- **Proxy seguro**: Headers de seguridad incluidos |
|
- **CORS configurado**: Acceso controlado |
|
|
|
## 📱 PWA Features |
|
|
|
- **Instalable**: Funciona como app nativa |
|
- **Offline ready**: Caché de recursos estáticos |
|
- **Responsive**: Optimizado para todos los tamaños |
|
- **Manifest**: Configuración completa de PWA |
|
- **Service Worker**: Gestión de caché automática |
|
|
|
## 🤝 Contribuir |
|
|
|
1. Fork el proyecto |
|
2. Crear rama feature (`git checkout -b feature/nueva-funcionalidad`) |
|
3. Commit cambios (`git commit -am 'Agregar nueva funcionalidad'`) |
|
4. Push a la rama (`git push origin feature/nueva-funcionalidad`) |
|
5. Crear Pull Request |
|
|
|
## 📄 Licencia |
|
|
|
Este proyecto es de uso personal/familiar. Consulta con el autor para otros usos. |
|
|
|
## 🆘 Soporte |
|
|
|
Para soporte técnico o dudas, contacta al administrador del sistema. |