A simple containerized IPTV Player with native xtream support
4.0K
** Disclaimer: This is a work in progress. I'm actively finding and fixing bugs, adding enhancements and refining this player when I have time. **
A feature-rich IPTV player with DVR, EPG integration, and multi-user support. Built with ASP.NET Core 8.0 and video.js.
services:
iptv-player:
image: lanedfritz/iptv-player:latest
container_name: iptv-player
# Uncomment if you have NVIDIA Container Toolkit installed on the host
# AND want GPU-accelerated transcoding. Also enable "Use GPU" in app Settings.
# runtime: nvidia
ports:
- "8000:5000"
volumes:
# Database and app data — persisted across updates
- /your/data/path:/app/data
# Recordings storage
- /your/recordings:/data/recordings
# HLS stream buffer (live TV)
- /your/streams:/data/streams
# Docker socket — required for container restart from the UI
- /var/run/docker.sock:/var/run/docker.sock
environment:
# Database — SQLite by default (file lives in /app/data)
- ConnectionStrings__DefaultConnection=Data Source=/app/data/iptv.db
# Directories (must match volume mounts above)
- StreamSettings__StreamsDirectory=/data/streams
- DVRSettings__RecordingsDirectory=/data/recordings
# Timezone — adjust to your local timezone
- TZ=America/Chicago
- ASPNETCORE_ENVIRONMENT=Production
# Optional: uncomment to use PostgreSQL instead of SQLite
# (also uncomment the postgres service and depends_on below)
# - PostgresConnection=Host=postgres;Database=iptv;Username=iptv;Password=CHANGE_ME
# Uncomment if using PostgreSQL
# depends_on:
# postgres:
# condition: service_healthy
restart: unless-stopped
networks:
- iptv-network
# Optional: PostgreSQL
# Remove the '#' from every line in this block to enable it.
# Also uncomment PostgresConnection and depends_on above.
#
# postgres:
# image: postgres:16-alpine
# container_name: iptv-postgres
# environment:
# - POSTGRES_DB=iptv
# - POSTGRES_USER=iptv
# - POSTGRES_PASSWORD=CHANGE_ME # must match PostgresConnection above
# volumes:
# - /your/postgres/data:/var/lib/postgresql/data
# restart: unless-stopped
# networks:
# - iptv-network
# healthcheck:
# test: ["CMD-SHELL", "pg_isready -U iptv -d iptv"]
# interval: 10s
# timeout: 5s
# retries: 5
networks:
iptv-network:
driver: bridge
volumes: {}
docker-compose up -d
Access at: http://localhost:8080
| Path | Purpose | Required |
|---|---|---|
/app/data | Database (SQLite) | ✅ Yes |
/data/recordings | DVR recordings (MP4) | ✅ Yes |
/data/streams | HLS buffers (temporary) | Optional |
Optional overrides:
environment:
- ConnectionStrings__DefaultConnection=Data Source=/app/data/iptv.db
- DVRSettings__RecordingsDirectory=/data/recordings
- DVRSettings__MaxConcurrentRecordings=4
- StreamSettings__StreamsDirectory=/data/streams
- TMDbSettings__ApiKey=your-api-key # Get free key at themoviedb.org
Interactive API docs: http://localhost:8080/scalar/v1
Channels not loading:
Streams not playing:
docker exec iptv-player ffmpeg -versionHigh memory (10k+ channels):
deploy:
resources:
limits:
memory: 1G
dotnet restore
dotnet run
# Access at http://localhost:5000
Free for personal use.
Built with ASP.NET Core 8.0, video.js, FFmpeg, TMDb, and Scalar.
Content type
Image
Digest
sha256:362d7c4e8…
Size
321.4 MB
Last updated
3 months ago
docker pull lanedfritz/iptv-player