File size: 5,354 Bytes
84121fd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# 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. |