diff --git a/Android.bp b/Android.bp
index 3c7f1e2..b12b53c 100644
--- a/Android.bp
+++ b/Android.bp
@@ -25,6 +25,7 @@
     static_libs: [
         "androidx-constraintlayout_constraintlayout",
         "androidx.media2_media2-widget",
+        "androidx.media2_media2-player",
         "com.google.android.material_material"
     ],
     optimize: {
diff --git a/build.gradle b/build.gradle
index cf219d4..2f87314 100644
--- a/build.gradle
+++ b/build.gradle
@@ -63,6 +63,7 @@
 
 dependencies {
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
-    implementation 'androidx.media2:media2-widget:1.0.0-alpha07'
+    implementation 'androidx.media2:media2-widget:+'
+    implementation 'androidx.media2:media2-player:+'
     implementation 'com.google.android.material:material:1.0.0'
 }
diff --git a/java/com/android/pump/activity/AudioPlayerActivity.java b/java/com/android/pump/activity/AudioPlayerActivity.java
index d55d286..cfdb651 100644
--- a/java/com/android/pump/activity/AudioPlayerActivity.java
+++ b/java/com/android/pump/activity/AudioPlayerActivity.java
@@ -27,7 +27,9 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.UiThread;
 import androidx.appcompat.app.AppCompatActivity;
+import androidx.media.AudioAttributesCompat;
 import androidx.media2.common.UriMediaItem;
+import androidx.media2.player.MediaPlayer;
 import androidx.media2.widget.VideoView;
 
 import com.android.pump.R;
@@ -44,6 +46,7 @@
     private static final String TAG = Clog.tag(AudioPlayerActivity.class);
 
     private VideoView mVideoView;
+    private MediaPlayer mMediaPlayer;
 
     public static void start(@NonNull Context context, @NonNull Audio audio) {
         // TODO(b/123702587) Find a better URI (audio.getUri()?)
@@ -118,6 +121,14 @@
         setContentView(R.layout.activity_audio_player);
         mVideoView = findViewById(R.id.video_view);
 
+        mMediaPlayer = new MediaPlayer(AudioPlayerActivity.this);
+        AudioAttributesCompat audioAttributes = new AudioAttributesCompat.Builder()
+                .setUsage(AudioAttributesCompat.USAGE_MEDIA)
+                .setContentType(AudioAttributesCompat.CONTENT_TYPE_MOVIE).build();
+
+        mMediaPlayer.setAudioAttributes(audioAttributes);
+        mVideoView.setPlayer(mMediaPlayer);
+
         handleIntent();
     }
 
@@ -138,6 +149,16 @@
             return;
         }
         UriMediaItem mediaItem = new UriMediaItem.Builder(uri).build();
-        mVideoView.setMediaItem(mediaItem);
+        mMediaPlayer.setMediaItem(mediaItem);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        try {
+            if (mMediaPlayer != null) {
+                mMediaPlayer.close();
+            }
+        } catch (Exception e) { }
     }
 }
diff --git a/java/com/android/pump/activity/VideoPlayerActivity.java b/java/com/android/pump/activity/VideoPlayerActivity.java
index 1e75c40..1ef7709 100644
--- a/java/com/android/pump/activity/VideoPlayerActivity.java
+++ b/java/com/android/pump/activity/VideoPlayerActivity.java
@@ -27,15 +27,14 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.UiThread;
 import androidx.appcompat.app.AppCompatActivity;
-import androidx.media2.common.MediaItem;
+import androidx.core.content.ContextCompat;
+import androidx.media.AudioAttributesCompat;
 import androidx.media2.common.SessionPlayer;
 import androidx.media2.common.UriMediaItem;
-import androidx.media2.session.MediaController;
-import androidx.media2.session.SessionToken;
+import androidx.media2.player.MediaPlayer;
 import androidx.media2.widget.VideoView;
 
 import com.android.pump.R;
-import com.android.pump.concurrent.Executors;
 import com.android.pump.db.Video;
 import com.android.pump.util.Clog;
 import com.android.pump.util.IntentUtils;
@@ -46,7 +45,7 @@
     private static final String SAVED_POSITION_KEY = "SavedPosition";
 
     private VideoView mVideoView;
-    private MediaController mMediaController;
+    private MediaPlayer mMediaPlayer;
     private long mSavedPosition = SessionPlayer.UNKNOWN_TIME;
 
     public static void start(@NonNull Context context, @NonNull Video video) {
@@ -70,38 +69,24 @@
                     SessionPlayer.UNKNOWN_TIME);
         }
 
+        mMediaPlayer = new MediaPlayer(VideoPlayerActivity.this);
+        AudioAttributesCompat audioAttributes = new AudioAttributesCompat.Builder()
+                .setUsage(AudioAttributesCompat.USAGE_MEDIA)
+                .setContentType(AudioAttributesCompat.CONTENT_TYPE_MOVIE).build();
+
+        mMediaPlayer.setAudioAttributes(audioAttributes);
+        mVideoView.setPlayer(mMediaPlayer);
+
         handleIntent();
     }
 
     @Override
     public void onSaveInstanceState(@NonNull Bundle outState) {
-        if (mMediaController != null) {
-            outState.putLong(SAVED_POSITION_KEY, mMediaController.getCurrentPosition());
-        }
-
+        outState.putLong(SAVED_POSITION_KEY, mMediaPlayer.getCurrentPosition());
         super.onSaveInstanceState(outState);
     }
 
     @Override
-    public void onAttachedToWindow() {
-        if (mMediaController == null) {
-            SessionToken token = mVideoView.getSessionToken();
-            mMediaController = new MediaController.Builder(this)
-                    .setSessionToken(token)
-                    .setControllerCallback(Executors.uiThreadExecutor(), new ControllerCallback())
-                    .build();
-        }
-    }
-
-    @Override
-    public void onDetachedFromWindow() {
-        if (mMediaController != null) {
-            mMediaController.close();
-            mMediaController = null;
-        }
-    }
-
-    @Override
     protected void onNewIntent(@Nullable Intent intent) {
         super.onNewIntent(intent);
         setIntent(intent);
@@ -118,18 +103,26 @@
             return;
         }
         UriMediaItem mediaItem = new UriMediaItem.Builder(uri).build();
-        mVideoView.setMediaItem(mediaItem);
+        mMediaPlayer.setMediaItem(mediaItem)
+                .addListener(new Runnable() {
+                    @Override
+                    public void run() {
+                        if (mSavedPosition != SessionPlayer.UNKNOWN_TIME) {
+                            mMediaPlayer.seekTo(mSavedPosition);
+                            mSavedPosition = SessionPlayer.UNKNOWN_TIME;
+                        }
+                        mMediaPlayer.play();
+                    }
+                }, ContextCompat.getMainExecutor(this));
     }
 
-    private class ControllerCallback extends MediaController.ControllerCallback {
-        @Override
-        public void onCurrentMediaItemChanged(@NonNull MediaController controller,
-                @Nullable MediaItem item) {
-            if (mSavedPosition != SessionPlayer.UNKNOWN_TIME) {
-                controller.seekTo(mSavedPosition);
-                mSavedPosition = SessionPlayer.UNKNOWN_TIME;
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        try {
+            if (mMediaPlayer != null) {
+                mMediaPlayer.close();
             }
-            controller.play();
-        }
+        } catch (Exception e) { }
     }
 }
