ExoPlayer started in 2014 as an alternative to Android's built-in MediaPlayer, which had inconsistent device behaviour and limited streaming support. Google rebuilt it as a flexible library exposing every stage — DataSource, Extractor, Renderer — for customisation. By Android 10 (2019) ExoPlayer had become the de-facto playback engine for nearly all Android streaming apps (Netflix, YouTube, Disney+, Twitch). In 2022 it was renamed to AndroidX Media3 with backward-compatible APIs.
ExoPlayer's design is modular: a MediaSource builds a streaming session from HLS, DASH or progressive MP4; an Extractor parses container formats; Renderers wrap MediaCodec for video/audio decoding; the ABR engine sits between source and renderer. Every layer is replaceable, which is why ExoPlayer ships in such diverse apps. Widevine DRM is integrated via Android's MediaDrm API; FairPlay does not run on Android.
For Android-targeted streaming apps in 2026, ExoPlayer/Media3 is the only practical choice. Native MediaPlayer is too limited; web-based players like hls.js work in WebView but lose hardware-accelerated playback. Most Android-side streaming engineering questions are about ExoPlayer customisation — modifying the ABR algorithm, integrating analytics, handling specific DRM workflows, dealing with manufacturer-specific MediaCodec quirks.

