ExoPlayer supports both live and on demand RTSP. Supported formats and network types are listed below.
- AAC (with ADTS bitstream)
Supported network types
- RTP over UDP unicast (multicast is not supported)
- Interleaved RTSP, RTP over RTSP using TCP
To play an RTSP stream, you need to depend on the RTSP module.
You can then create a
MediaItem for an RTSP URI and pass it to the player.
// Create a player instance. SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(rtspUri)); // Prepare the player. player.prepare();
For more customization options, you can create an
RtspMediaSource and pass it
directly to the player instead of a
// Create an RTSP media source pointing to an RTSP uri. MediaSource mediaSource = new RtspMediaSource.Factory() .createMediaSource(MediaItem.fromUri(rtspUri)); // Create a player instance. SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
Using RTSP behind a NAT
ExoPlayer uses UDP as the default protocol for RTP transport.
When streaming RTSP behind a NAT layer, the NAT might not be able to forward the incoming RTP/UDP packets to the device. This occurs if the NAT lacks the necessary UDP port mapping. If ExoPlayer detects there have not been incoming RTP packets for a while and the playback has not started yet, ExoPlayer tears down the current RTSP playback session, and retries playback using RTP-over-RTSP (transmitting RTP packets using the TCP connection opened for RTSP).