This guide charts the optimal progression of a media playback-focused app from a likely starting place to best-in-class. It's designed to help you think about scaling your app over time, and what features to implement when. While every media consumption app is different, consider these recommendations to achieve a best-in-class experience.

## Basic media display and playback

A basic media display and playback app provides users with a foundational experience, which may include doing the following:

- Offer an in-app media player using with playback controls, using[formats](https://developer.android.com/guide/topics/media/media-formats)that are supported across the Android ecosystem, ideally using[Media3s](https://developer.android.com/guide/topics/media/media3)[ExoPlayer](https://developer.android.com/guide/topics/media/exoplayer).
- Use the latest version of the[Jetpack Media3](https://developer.android.com/guide/topics/media/media3)library.
- Use optimized server-generated thumbnails as well as[best practices for locally-generated ones](https://developer.android.com/social-and-messaging/guides/media-thumbnails), and cache them locally.
- Invest in[accessibility](https://developer.android.com/guide/topics/ui/accessibility/principles#media-content).

## Better media display and playback

A better media display and playback app leverages premium device hardware and updated platform features, to:

- Implement a[`MediaSession`](https://developer.android.com/guide/topics/media/media3/getting-started/mediasession)--- made easy with[Media3s](https://developer.android.com/guide/topics/media/media3)[ExoPlayer](https://developer.android.com/guide/topics/media/exoplayer)--- to enable playback integration across different apps, system components, and devices.
- Use[best practices for sharing video](https://developer.android.com/media/optimize/sharing),[transcoding](https://developer.android.com/media/media3/transformer/transformations#transcode)if necessary.
- Support[sharing multiple pieces of content](https://developer.android.com/training/sharing/send#share-multiple-content)at the same time.
- Enable[picture-in-picture](https://developer.android.com/develop/ui/views/picture-in-picture)for video and audio playback so users can multitask.
- Enable support for[UltraHDR](https://developer.android.com/media/grow/ultra-hdr-display)images.
- Play[HDR](https://developer.android.com/media/grow/hdr-playback)video.
- Support playback to[Cast](https://developers.google.com/cast/docs/developers)devices.
- Add an[app widget](https://developer.android.com/develop/ui/views/appwidgets/overview)so users can get see what friends are up to and search from their home screen.

## Best media display and playback

A best-in-class media display and playback app gives users access to advanced features that really make the app stand out, such as:

- Check to see if images contain a[gain-map](https://developer.android.com/guide/topics/media/platform/hdr-image-format#gain_map-generation), and strategically use[`setColorMode()`](https://developer.android.com/reference/android/view/Window#setColorMode(int))to[`ActivityInfo.COLOR_MODE_HDR`](https://developer.android.com/reference/android/content/pm/ActivityInfo#COLOR_MODE_HDR)to optimize for content display and battery life.
- Optimize for foldables by supporting the[`HALF_OPENED`state](https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/learn-about-foldables#foldable_postures)
- Ensure[design](https://developer.android.com/design/ui)consistency with the platform.
- Implement[Cast Connect](https://developers.google.com/cast/docs/android_tv_receiver)so users can cast to your[Android TV](https://developer.android.com/training/tv)app.
- Use[Performance Class](https://developer.android.com/topic/performance/performance-class)to adapt your user experience to match device capabilities.