
Quick Facts
Client: Regional Telecom Operator
Industry: OTT / IPTV / Streaming
Platform: Android TV Native App + Web Admin Dashboard
Market: Regional (expanding)
Users: Households, Administrators, Operators
Core Tech: Spring Boot, Kotlin, ExoPlayer, PostgreSQL, Redis, React.js
RigRex Services: Product Strategy, Full-Stack Development, Android TV Development, Admin Dashboard, Microservices Architecture
A regional telecom operator expanding into OTT services needed a differentiated offering that combined live TV with modern streaming flexibility. Subscribers were migrating to global streaming platforms, and the client had no unified platform to compete. Content was sourced from multiple providers using M3U and M3U8 playlist formats with no management layer, making it difficult to onboard new channels or update lineups. Family households demanded robust parental controls, a feature absent from generic IPTV players, and the client lacked a centralized dashboard to monitor subscriber activity, manage content, or troubleshoot issues in real time.
Business Challenges
Operational Pain Points
Technical Challenges
Architecture and Tech Stack
Backend:
Android TV:
Admin Dashboard:
Electronic Program Guide (EPG)
A regional telecom operator with 500+ channels and 48 hours of program data needed an EPG system that could deliver sub-second load times without overwhelming mobile devices. The EPG Ingestion Service runs as a scheduled Spring Boot process pulling XMLTV-formatted program data from multiple provider endpoints. A custom parser built with Jackson Streaming API processes large XML files (often exceeding 50 MB) using event-driven parsing rather than loading entire documents into memory.
Program data is normalized into a relational schema with channels, programs, categories, and time slots. A Redis caching layer maintains a 48-hour rolling window of EPG data, serving the Android TV client with sub-50ms response times. On the client side, the EPG is rendered using a custom RecyclerView-based grid component built on top of the Leanback library's browsing framework, supporting horizontal time-based scrolling and vertical channel switching, all optimized for D-pad navigation.
M3U / M3U8 Playlist Import
Users needed the flexibility to import their own channel playlists from any IPTV subscription. The Playlist Management Service exposes REST endpoints for file upload and URL-based import. A robust parser handles both M3U (static playlists) and M3U8 (HLS master playlists) formats, extracting channel metadata including name, group, logo URL, language, and stream URI.
The parser was designed to handle format inconsistencies commonly found in community-maintained playlists, including missing tags, non-standard attributes, UTF-8 BOM markers, and Windows-style line endings. Imported playlists are validated for stream accessibility via async health checks, and channels with unreachable streams are flagged rather than silently dropped.
ExoPlayer was built with a cascading source factory that attempts HLS parsing first, falls back to progressive download, and finally tries RTSP. A pre-flight probe mechanism tests each stream on import and tags it with the verified playback strategy, ensuring zero-delay channel switching.
User Management and Authentication
Authentication is handled via Spring Security with JWT-based stateless sessions supporting three distinct roles: Super Admin (full platform control), Operator (subscriber management and content curation), and Subscriber (profile management and viewing preferences). Each subscriber account supports up to 5 household profiles with independent viewing history, favorites, EPG preferences, and parental control settings.
Profile switching on Android TV is PIN-protected and optimized for D-pad navigation. Token refresh is handled transparently using an OkHttp interceptor that detects 401 responses, acquires a new token, and retries the original request without user intervention.
Parental Controls
Family households needed robust parental controls that could not be bypassed. The Parental Control Service operates at the profile level with server-side enforcement at two layers: Content Rating Filters (channels and programs filtered based on TV-Y, TV-PG, TV-14, TV-MA ratings) and Channel Blocklist (specific channels blocked regardless of rating). Time-based restrictions configure viewing windows per profile, and all settings are protected behind a 4-digit PIN stored as a bcrypt hash.
The app enforces parental controls locally using cached profile rules, ensuring restrictions apply even during network interruptions. Restricted content is excluded from API responses entirely, not merely hidden client-side.
Auto Program Save (Intelligent Recording)
The Recording Scheduler Service combines EPG data with user-defined rules to create an intelligent recording pipeline. Users define capture rules based on specific programs, keywords, time slots, or series linking using EPG series identifiers. The backend evaluates all active rules against the upcoming 48-hour EPG window and pushes matched schedules to the Android TV client via a sync endpoint.
All recording happens entirely on the device using a foreground service that captures the active stream via ExoPlayer's MediaCodec pipeline and writes it directly to local storage (internal or external SD card) as MP4. A StorageManager component monitors available disk space and alerts users when storage drops below a threshold. Automatic cleanup removes recordings older than the configured retention period (default 30 days) with grace period notifications.
Admin Dashboard
The administrative dashboard is a React.js single-page application communicating with the Spring Boot backend via a dedicated Admin REST API secured with role-based access control. Dashboard modules include Subscriber Analytics (real-time active viewers, peak usage patterns, popular channels and programs, geographic distribution), Content Management (bulk playlist upload, EPG source configuration, channel ordering), User Administration (subscriber search, account suspension, device management), System Health (real-time stream health checks, API response time percentiles, error rate tracking), and Recording Management (view scheduled and completed recordings, monitor storage utilization).
Key Engineering Decisions
EPG Data Volume at Scale With 500+ channels and 48 hours of program data, the full EPG payload exceeded 12 MB. Implemented pagination and delta-sync strategy where the initial load fetches only the current 2-hour window for visible channels. Subsequent updates use ETags and server-side diffing to transmit only changed program entries, reducing typical sync payloads to under 50 KB.
Stream Format Compatibility M3U playlists use dozens of stream URL formats (HTTP live streams, RTSP feeds, MMS protocols, direct MP4 links) with inconsistent or missing codec information. Built ExoPlayer with a cascading source factory that attempts HLS parsing first, falls back to progressive download, and finally tries RTSP, with pre-flight probe mechanism testing each stream on import.
D-pad Navigation UX Designing a complex EPG grid and multi-tab interface for television remote input required a focus-management framework maintaining clear visual focus indicators, predictable navigation paths, and contextual shortcut hints. Integrated Android TV's built-in voice input as the primary text entry method with fallback on-screen keyboard.
Platform Performance
Business Impact
User Engagement
StreamVault demonstrates that a well-architected IPTV platform built on proven technologies can compete with established players while offering differentiated features like flexible playlist import, intelligent recording, and robust parental controls.
For RigRex, this project showcases expertise in: