Features Categories Tech Stack Screenshots Updates Download
Android TV & Fire TV Optimized

Your Gateway to Premium Streaming

A feature-rich streaming application designed specifically for the big screen experience. Enjoy movies and TV shows with a Netflix-like interface optimized for TV remote navigation.

Android TV
Fire TV
Android 7.0+

Built for the Big Screen

Every feature is designed to deliver an immersive streaming experience on your television.

D-Pad Navigation

Full TV remote and Fire TV controller support with intuitive focus states, scale animations, and smooth back-stack handling for seamless browsing.

Hero Section

Dynamic backdrop carousel showcasing featured content with smooth transitions and auto-play previews for an engaging browsing experience.

Advanced Search

Search movies and TV shows by title, genre, cast, or crew. Browse content by production company and TV network for precise discovery.

Multi-Format Playback

Support for HLS, DASH, and progressive streaming via ExoPlayer with intelligent multi-server failover for uninterrupted viewing.

Subtitle Support

External subtitle fetch via Subdl supporting SRT, VTT, SSA/ASS, and TTML formats. Multiple language options for international content.

Watch History

Your progress is automatically saved and resumed per title. Pick up exactly where you left off across all your favorite shows and movies.

Favorites & Lists

Save your favorite movies and shows for quick access. Curated content lists organized by genre, actor, and theme for easy browsing.

Customizable Settings

Configure playback buffer duration, subtitle preferences, and other settings. All preferences are persisted for a personalized experience.

Curated Categories

Explore hand-picked collections spanning multiple genres and themes.

Oscar Winners 2026

Award-winning films

Hallmark Movies

Heartwarming content

Jason Statham

Action-packed blockbusters

Best Classics

Timeless cinema

Best Sitcoms

Beloved comedy series

Spy Thrillers

CIA, Mossad, espionage

True Stories

Real event documentaries

Time Travel

Sci-fi adventures

Built with Modern Tools

Leveraging the latest Android development technologies for a smooth, performant experience.

Kotlin
1.9.24
Jetpack Compose
BOM 2024.12
Material 3
Latest
Navigation
2.8.5
Retrofit
2.11.0
Room
2.6.1
Coil
2.7.0
Lottie
6.6.2
Coroutines
1.8.1
ExoPlayer
Media3

Screenshots

A glimpse of the immersive streaming experience awaiting you.

Home Screen

Home Screen

Browse curated content with hero carousel

Detail View

Detail View

Comprehensive movie and show information

Detail View

Content Rows

Horizontal scrolling with smooth navigation

What's New

Stay up to date with the latest features, improvements, and fixes in KiduyuTV.

v1.1.338 feat(player): block ad iframes via network interception and DOM suppression — v1.1.338 Stable May 29, 2026 ↗ View on GitHub

Branch: main

---

feat(player): block ad iframes via network interception and DOM suppression

Key changes:

  • Add isAdRequest() matching known ad network URLs and dlhd.pk-specific

banner paths (adbanner, rs4k, data-aa/AdAsia, doubleclick, exoclick, etc.)

  • Add emptyResponse() returning a silent 200 to swallow blocked requests

without triggering onReceivedError or player fallback logic

  • Check isAdRequest at the top of shouldInterceptRequest before autoplay

injection, blocking ad iframe src requests at the network level

  • Replace thin onPageFinished CSS injection with comprehensive selector set

covering data-aa, site-ad, ad-banner, ad-wrap, popup, overlay classes

  • Add MutationObserver in onPageFinished to catch JS-injected ad iframes

added after page load, removing their src and collapsing them to zero size

---

v1.1.337 perf(player): stop autoplay and volume injection after first success — v1.1.337 Stable May 29, 2026 ↗ View on GitHub

Branch: main

---

perf(player): stop autoplay and volume injection after first success

Key changes:

  • Add isAutoplayInjected flag; set true on first successful

tryInjectAutoplayScript call, skipping all subsequent HTML

requests for the same stream

  • Add isVolumeControllerInjected flag; set true on first

injectVideoVolumeController call in onPageFinished, preventing

repeated top-frame JS injection on the same stream

  • Reset both flags in switchToPlayer and tryNextStreamUrl so

each new server receives a fresh injection pass

---

v1.1.336 feat(player): block ad iframes via network interception and DOM suppression — v1.1.336 Stable May 29, 2026 ↗ View on GitHub

Branch: main

---

feat(player): block ad iframes via network interception and DOM suppression

Key changes:

  • Add isAdRequest() matching known ad network URLs and dlhd.pk-specific

banner paths (adbanner, rs4k, data-aa/AdAsia, doubleclick, exoclick, etc.)

  • Add emptyResponse() returning a silent 200 to swallow blocked requests

without triggering onReceivedError or player fallback logic

  • Check isAdRequest at the top of shouldInterceptRequest before autoplay

injection, blocking ad iframe src requests at the network level

  • Replace thin onPageFinished CSS injection with comprehensive selector set

covering data-aa, site-ad, ad-banner, ad-wrap, popup, overlay classes

  • Add MutationObserver in onPageFinished to catch JS-injected ad iframes

added after page load, removing their src and collapsing them to zero size

---

v1.1.335 refactor(player): remove stream sniffing, rename sources to servers — v1.1.335 Stable May 29, 2026 ↗ View on GitHub

Branch: main

---

refactor(player): remove stream sniffing, rename sources to servers

Key changes:

  • Remove all stream sniffing logic: isStreamSniffed flag,

handleSniffedStream(), the shouldInterceptRequest sniffer block

(.m3u8/.mpd/chunk/video-Accept checks), the Fetch/XHR blob

interceptor JS, and onStreamSniffed from the JavaScript interface

  • Remove isStreamSniffed = false resets from switchToPlayer and

tryNextStreamUrl — field no longer exists

  • Rename all user-visible source labels from "P{N}" to "Server {N}",

count badge from "N Players" to "N Servers", section label from

"Sources:" to "Servers:", and switch/fallback toasts accordingly

  • Verify all imports remain valid after removal: no unused imports

introduced, no missing imports for remaining code

---

v1.1.334 fix(player): autoplay injection, reactive state, coroutine leak, dpad timer — v1.1.334 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

fix(player): autoplay injection, reactive state, coroutine leak, dpad timer

Key changes:

  • Inject autoplay/unmute script via shouldInterceptRequest into every HTML

frame response, including cross-origin nested iframes where top-frame JS

injection silently fails due to same-origin policy

  • Add allow="autoplay; encrypted-media; fullscreen" to generated iframe HTML

so Chromium permits autoplay in nested frames

  • Back playerOptions and selectedPlayerIndex with mutableStateOf so the

Compose top bar recomposes automatically when sources change

  • Reset isDpadNavigating to false inside topBarHideRunnable — previously

never reset, permanently blocking the auto-hide timer after first dpad press

  • Replace CoroutineScope(Dispatchers.Main).launch with lifecycleScope.launch

to prevent coroutine leaks on activity destruction

  • Sync isActive flags in PlayerOption when switching players via copy(),

keeping isActive consistent with selectedPlayerIndex

  • Consolidate generateIframeHtml into a single local function, removing

duplicate calls to ScheduleRepository.generateIframeHtml

  • Add setSupportMultipleWindows(false) and LOAD_NO_CACHE to WebView settings

---

v1.1.333 fix(tv): remove duplicate .focusable() from ChannelChip and QuickPlay button — v1.1.333 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

fix(tv): remove duplicate .focusable() from ChannelChip and QuickPlay button

Key Changes:

  • Remove .focusable() from ChannelChip component
  • Remove .focusable() from Quick Play button in EventItem
  • Remove .focusable() from Available Channels label in EventItem
  • Remove .focusable() from tab navigation items
  • Remove .focusable() from all card components (Category, Channel, Scraped)
  • Remove .focusable() from all button components (Back, Search, Retry, Clear)
  • Add .onKeyEvent fallback handler to ChannelChip for edge cases

---

v1.1.332 Update playlist URL to abusaeeidx/IPTV-Scraper-Zilla combined playlist — v1.1.332 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

Update playlist URL to abusaeeidx/IPTV-Scraper-Zilla combined playlist

Replace the JulioCesarXY/EPG-LG-Channels US playlist with the combined

playlist from abusaeeidx/IPTV-Scraper-Zilla to expand channel coverage.

  • Change PLAYLIST_URL constant to new source
  • Update source documentation comment

---

v1.1.331 feat: add CineSrc stream provider — v1.1.331 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: add CineSrc stream provider

Add CineSrc provider (#16) with autoplay, quality, and autonext settings

Key changes:

  • Add CineSrc provider with 1080p default quality
  • Enable autoplay for both movies and TV shows
  • Enable autonext for TV show episodes
  • Renumber subsequent providers (#17-#22)

---

v1.1.330 feat: add Mapple provider and fix numbering — v1.1.330 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: add Mapple provider and fix numbering

Key changes :

Add Mapple stream provider (#15) and correct sequence numbering

for providers #14-#21

---

v1.1.329 Add lordflix provider — v1.1.329 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

Add lordflix provider

---

v1.1.328 feat: implement universal stream sniffer for webview — v1.1.328 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: implement universal stream sniffer for webview

Added comprehensive network and JavaScript interception to the schedule player. This allows the app to detect hidden video streams (HLS/DASH) within the webview and automatically route playback to the highly optimized native ExoPlayer (IptvPlayerActivity).

Key changes:

  • Added handleSniffedStream helper to seamlessly transition from WebView playback to the native player while tearing down the browser instance.
  • Overrode shouldInterceptRequest to catch direct media extensions (.m3u8, .mpd) and inspect HTTP Accept headers for video requests.
  • Injected custom JavaScript via onPageFinished to override fetch and XMLHttpRequest, successfully intercepting obfuscated blob streams.
  • Added onStreamSniffed to the Android JavaScript interface to bridge intercepted blob URLs back to native code.
  • Implemented isStreamSniffed state flag to prevent duplicate activity launches, ensuring it resets when switching player sources.

---

v1.1.327 Filter out 18+ channels from Live TV Channels tab — v1.1.327 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

Filter out 18+ channels from Live TV Channels tab

Prevents channels with names starting with "18+" from being displayed

in the Channels tab for a family-friendly viewing experience.

Key Changes

  • Added channel name filter in ChannelsTabContent to exclude 18+ content
  • Filter is case-insensitive and applied before search filtering
  • Channel count in header now reflects filtered results

---

v1.1.326 feat: add continuous video volume control with toast notification — v1.1.326 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: add continuous video volume control with toast notification

Key changes :

Implement MutationObserver-based JavaScript to continuously monitor for

video tags in WebView, automatically set volume to maximum, and show

toast when video streams are detected. Handles dynamically loaded videos

and includes fallback periodic scanning.

---

v1.1.325 feat(live-tv): Update iframe attributes and remove autoplay from schedule player — v1.1.325 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat(live-tv): Update iframe attributes and remove autoplay from schedule player

Key changes:

  • Updated iframe generation to include all playback attributes:

scrolling="no", frameborder="0", allowfullscreen="true",

allow="autoplay;", allowtransparency="true", id="thatframe"

  • Removed autoplay script from SchedulePlayerActivity WebView
  • Added volume max injection (sets volume to 1 and unmutes videos)
  • Applied changes to: ScheduleApiService, ChannelScraper,

SchedulePlayerActivity, ScrapedChannel

---

v1.1.324 Fixed: ChannelScraper.kt - Player Button Detection Issue Resolved — v1.1.324 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

Fixed: ChannelScraper.kt - Player Button Detection Issue Resolved

Key Changes:

1. Fixed CSS Selectors for Player Buttons

· Added 5 different selector fallbacks to handle various HTML structures

· Primary selector: div#playerBtns button.player-btn[data-url]

· Secondary: div.watch__actions div#playerBtns button.player-btn[data-url]

· Tertiary: div#playerBtns button[data-url]

· Quaternary: button.player-btn[data-url]

· Fallback: .watch__player button[data-url]

2. Added Iframe Fallback Extraction

· Now extracts from iframe#playerFrame if button approach fails

· Provides alternative stream source when button data-urls are missing

3. Enhanced Debugging Capabilities

· Added debugPlayerButtonsStructure() function

· Logs actual HTML structure when selectors fail

---

v1.1.323 Fix border issue — v1.1.323 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

Fix border issue

---

v1.1.322 refactor: refine stream extraction logic and update Quick Play button UI — v1.1.322 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

refactor: refine stream extraction logic and update Quick Play button UI

Key changes:

  • Update logging in ChannelScraper from debug to info level for better visibility
  • Comment out iframe and channel ID fallback logic in ChannelScraper to prioritize data-url extraction
  • Replace Surface with Box in LiveTvScreen for the Quick Play button UI
  • Update Quick Play button styling with custom modifiers for background, border, and focus states
  • Relocate padding from inner Row to outer Box in the Quick Play component

---

v1.1.321 feat: add channel scraping UI parameters to SettingsScreen — v1.1.321 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: add channel scraping UI parameters to SettingsScreen

Key changes:

  • Added state parameters for channel scraping: isScrapingChannels, scrapeChannelsSuccess, scrapeChannelsError, and scrapedChannelsCount
  • Added callback handlers onScrapeChannelsClick and onRefreshScrapedChannelsClick
  • Updated UI previews to support the new channel scraping functionality and state variations

---

v1.1.320 Fix channels issue — v1.1.320 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

Fix channels issue

---

v1.1.319 fix: ensure quick channel selector is visible in both expanded and collapsed states — v1.1.319 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

fix: ensure quick channel selector is visible in both expanded and collapsed states

Key changes:

  • Removed !isExpanded check to allow channel selection while an event is expanded
  • Replaced size >= 1 with isNotEmpty() for improved readability
  • Removed unused onFocusChanged import

---

v1.1.318 fix: resolve compilation errors in SchedulePlayerActivity and LiveTvScreen — v1.1.318 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

fix: resolve compilation errors in SchedulePlayerActivity and LiveTvScreen

---

v1.1.317 feat: enhance playback error dialog with detailed technical information — v1.1.317 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: enhance playback error dialog with detailed technical information

Key changes:

  • Expanded onPlayerError to provide a more comprehensive error summary
  • Included errorCodeName and numeric errorCode in the error message
  • Added extraction of the underlying system cause and localized message
  • Implemented specific reporting for HttpDataSource.InvalidResponseCodeException, including the HTTP status code and request URI

---

v1.1.316 feat: enhance IPTV playback reliability and refine UI components — v1.1.316 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: enhance IPTV playback reliability and refine UI components

Key changes:

  • Update User-Agent in IptvRepository to a Smart TV string for playlist and EPG requests
  • Implement custom LoadControl in ExoPlayer with tuned buffer durations for better live feed stability
  • Configure DefaultHttpDataSource with 15-second timeouts and enabled cross-protocol redirects
  • Increase subtitle text size from 16sp to 26sp in IptvPlayerActivity for improved legibility
  • Remove "Schedule" from the TopBar navigation items

---

v1.1.315 feat: unify Live TV and Schedule screens into a single tabbed interface — v1.1.315 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: unify Live TV and Schedule screens into a single tabbed interface

Key changes:

  • Merged ScheduleScreen logic and UI components into LiveTvScreen
  • Added a tabbed LiveTvTopBar to toggle between IPTV channels and upcoming schedules
  • Updated NavGraph to route both LiveTv and Schedule destinations to LiveTvScreen using an initialTab parameter
  • Improved TV navigation by implementing MutableInteractionSource and collectIsFocusedAsState for better focus handling in schedule items
  • Integrated ScheduleViewModel into the unified LiveTvScreen to handle schedule data and playback intents
  • Deleted the redundant ScheduleScreen.kt file

---

v1.1.314 fix: improve D-pad focus management in track selection dialog — v1.1.314 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

fix: improve D-pad focus management in track selection dialog

Key changes:

  • Added FocusRequester to automatically focus the first item when the track selection dialog opens
  • Updated TrackSelectionRow to accept and apply a custom focus modifier
  • Modified VideoTrackList and GenericTrackList to pass the focus requester to the first available option
  • Cleaned up redundant isDpadNavigating property and unused imports in IptvPlayerActivity
  • Refactored isDpadKey for better readability and consistent indentation

---

v1.1.313 feat: refine subtitle styling and update program guide dialog behavior — v1.1.313 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: refine subtitle styling and update program guide dialog behavior

Key changes:

  • Implement CaptionStyleCompat in SubtitleView for black text on a transparent background
  • Update SubtitleView to use setFixedTextSize with a constant 16sp value
  • Enhance program guide dialog in IptvPlayerActivity with a "Retry" option and activity dismissal on "Close"
  • Update ScheduleApiService to use the base domain for schedule requests instead of a subpath

---

v1.1.312 feat: add Schedule to TopBar navigation items — v1.1.312 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: add Schedule to TopBar navigation items

Key changes:

  • Add "📅 Schedule" to the navItems list
  • Map the new navigation index (4) to the "schedule" route

---

v1.1.311 fix: refine WebView handling in SchedulePlayerActivity — v1.1.311 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

fix: refine WebView handling in SchedulePlayerActivity

Key changes:

  • Remove redundant fully qualified name for CustomViewCallback in WebChromeClient
  • Explicitly convert currentIframeHtml to String when calling loadDataWithBaseURL

---

v1.1.310 feat: enhance search IME behavior and remote control navigation — v1.1.310 Stable May 28, 2026 ↗ View on GitHub

Branch: main

---

feat: enhance search IME behavior and remote control navigation

Key changes:

  • Implement KeyboardActions in LiveTvScreen to clear focus on search submission
  • Add onKeyDown support for D-pad, media, and volume keys in IptvPlayerActivity
  • Extend overlay auto-hide delay to 5 seconds for better visibility
  • Add togglePlayPause and toggleMute helpers with Toast feedback indicators
  • Refactor SearchBar to support dynamic ImeActions and keyboard event handling
  • Ensure volume keys unmute audio before system adjustment proceeds

---

v1.1.309 fix: improve IPTV player overlay transitions and update settings previews — v1.1.309 Stable May 27, 2026 ↗ View on GitHub

Branch: main

---

fix: improve IPTV player overlay transitions and update settings previews

Key changes:

  • Update visibility state from View.INVISIBLE to View.GONE for player overlay components to optimize layout
  • Increase overlay hide animation duration from 300ms to 500ms for smoother visual transitions
  • Update SettingsScreen previews to include missing Live TV configuration parameters, including Playlist/EPG URLs and update/cache state handlers

---

Download KiduyuTV

Get the latest version of KiduyuTV for your Android TV, Fire TV, or Mobile device. Simple installation, instant streaming.

Download for Android TV / Fire TV Download for Mobile View on GitHub
Safe & Secure
Free Download
Regular Updates