Multimedia playback on Android can occur from the file system, through streaming from a network, or for real-time conversations. The MediaPlayer API provides high-level playback but no access to decoded data, while MediaCodec allows low-level access to encoded and decoded data. MediaExtractor and MediaMuxer facilitate extraction and muxing of media streams. Common streaming protocols include RTSP/RTP/RTCP for low-latency real-time conversations and HTTP Live Streaming (HLS) or MPEG Dynamic Adaptive Streaming over HTTP (DASH) for adaptive streaming over HTTP. ExoPlayer is an open source media player that supports features like DASH and DRM not available on the Android MediaPlayer.