// Signature format: 3.0
package androidx.media2.player {

  public final class MediaPlayer extends androidx.media2.common.SessionPlayer {
    ctor public MediaPlayer(android.content.Context);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> addPlaylistItem(int, androidx.media2.common.MediaItem);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> attachAuxEffect(int);
    method public void close() throws java.lang.Exception;
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> deselectTrack(androidx.media2.player.MediaPlayer.TrackInfo);
    method public androidx.media.AudioAttributesCompat? getAudioAttributes();
    method public int getAudioSessionId();
    method public long getBufferedPosition();
    method @androidx.media2.common.SessionPlayer.BuffState public int getBufferingState();
    method public androidx.media2.common.MediaItem? getCurrentMediaItem();
    method public int getCurrentMediaItemIndex();
    method public long getCurrentPosition();
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.media2.player.MediaPlayer.DrmInfo? getDrmInfo();
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.media.MediaDrm.KeyRequest getDrmKeyRequest(byte[]?, byte[]?, String?, int, java.util.Map<java.lang.String!,java.lang.String!>?) throws androidx.media2.player.MediaPlayer.NoDrmSchemeException;
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String getDrmPropertyString(String) throws androidx.media2.player.MediaPlayer.NoDrmSchemeException;
    method public long getDuration();
    method public float getMaxPlayerVolume();
    method @RequiresApi(21) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.PersistableBundle! getMetrics();
    method public int getNextMediaItemIndex();
    method public androidx.media2.player.PlaybackParams getPlaybackParams();
    method @FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE, fromInclusive=false) public float getPlaybackSpeed();
    method @androidx.media2.common.SessionPlayer.PlayerState public int getPlayerState();
    method public float getPlayerVolume();
    method public java.util.List<androidx.media2.common.MediaItem!>? getPlaylist();
    method public androidx.media2.common.MediaMetadata? getPlaylistMetadata();
    method public int getPreviousMediaItemIndex();
    method public int getRepeatMode();
    method public androidx.media2.player.MediaPlayer.TrackInfo? getSelectedTrack(@androidx.media2.player.MediaPlayer.TrackInfo.MediaTrackType int);
    method public int getShuffleMode();
    method public androidx.media2.player.MediaTimestamp? getTimestamp();
    method public java.util.List<androidx.media2.player.MediaPlayer.TrackInfo!> getTrackInfo();
    method public androidx.media2.player.VideoSize getVideoSize();
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> pause();
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> play();
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> prepare();
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public com.google.common.util.concurrent.ListenableFuture<androidx.media2.player.MediaPlayer.DrmResult!> prepareDrm(java.util.UUID);
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public byte[]? provideDrmKeyResponse(byte[]?, byte[]) throws android.media.DeniedByServerException, androidx.media2.player.MediaPlayer.NoDrmSchemeException;
    method public void registerPlayerCallback(java.util.concurrent.Executor, androidx.media2.player.MediaPlayer.PlayerCallback);
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void releaseDrm() throws androidx.media2.player.MediaPlayer.NoDrmSchemeException;
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> removePlaylistItem(@IntRange(from=0) int);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> replacePlaylistItem(int, androidx.media2.common.MediaItem);
    method public void reset();
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void restoreDrmKeys(byte[]) throws androidx.media2.player.MediaPlayer.NoDrmSchemeException;
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> seekTo(long);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> seekTo(long, @androidx.media2.player.MediaPlayer.SeekMode int);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> selectTrack(androidx.media2.player.MediaPlayer.TrackInfo);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setAudioAttributes(androidx.media.AudioAttributesCompat);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setAudioSessionId(int);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setAuxEffectSendLevel(@FloatRange(from=0, to=1) float);
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setDrmPropertyString(String, String) throws androidx.media2.player.MediaPlayer.NoDrmSchemeException;
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setMediaItem(androidx.media2.common.MediaItem);
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setOnDrmConfigHelper(androidx.media2.player.MediaPlayer.OnDrmConfigHelper?);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setPlaybackParams(androidx.media2.player.PlaybackParams);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setPlaybackSpeed(@FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE, fromInclusive=false) float);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setPlayerVolume(@FloatRange(from=0, to=1) float);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setPlaylist(java.util.List<androidx.media2.common.MediaItem!>, androidx.media2.common.MediaMetadata?);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setRepeatMode(int);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setShuffleMode(int);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> setSurface(android.view.Surface?);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> skipToNextPlaylistItem();
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> skipToPlaylistItem(@IntRange(from=0) int);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> skipToPreviousPlaylistItem();
    method public void unregisterPlayerCallback(androidx.media2.player.MediaPlayer.PlayerCallback);
    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.common.SessionPlayer.PlayerResult!> updatePlaylistMetadata(androidx.media2.common.MediaMetadata?);
    field public static final int MEDIA_INFO_AUDIO_NOT_PLAYING = 804; // 0x324
    field public static final int MEDIA_INFO_BAD_INTERLEAVING = 800; // 0x320
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_BUFFERING_END = 702; // 0x2be
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_BUFFERING_START = 701; // 0x2bd
    field public static final int MEDIA_INFO_BUFFERING_UPDATE = 704; // 0x2c0
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_EXTERNAL_METADATA_UPDATE = 803; // 0x323
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_MEDIA_ITEM_END = 5; // 0x5
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_MEDIA_ITEM_LIST_END = 6; // 0x6
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_MEDIA_ITEM_REPEAT = 7; // 0x7
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_MEDIA_ITEM_START = 2; // 0x2
    field public static final int MEDIA_INFO_METADATA_UPDATE = 802; // 0x322
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_NETWORK_BANDWIDTH = 703; // 0x2bf
    field public static final int MEDIA_INFO_NOT_SEEKABLE = 801; // 0x321
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_PREPARED = 100; // 0x64
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_SUBTITLE_TIMED_OUT = 902; // 0x386
    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MEDIA_INFO_UNSUPPORTED_SUBTITLE = 901; // 0x385
    field public static final int MEDIA_INFO_VIDEO_NOT_PLAYING = 805; // 0x325
    field public static final int MEDIA_INFO_VIDEO_RENDERING_START = 3; // 0x3
    field public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING = 700; // 0x2bc
    field public static final int NO_TRACK_SELECTED = -2147483648; // 0x80000000
    field public static final int PLAYER_ERROR_IO = -1004; // 0xfffffc14
    field public static final int PLAYER_ERROR_MALFORMED = -1007; // 0xfffffc11
    field public static final int PLAYER_ERROR_TIMED_OUT = -110; // 0xffffff92
    field public static final int PLAYER_ERROR_UNKNOWN = 1; // 0x1
    field public static final int PLAYER_ERROR_UNSUPPORTED = -1010; // 0xfffffc0e
    field public static final int SEEK_CLOSEST = 3; // 0x3
    field public static final int SEEK_CLOSEST_SYNC = 2; // 0x2
    field public static final int SEEK_NEXT_SYNC = 1; // 0x1
    field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class MediaPlayer.DrmInfo {
    method public java.util.Map<java.util.UUID!,byte[]!> getPssh();
    method public java.util.List<java.util.UUID!> getSupportedSchemes();
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class MediaPlayer.DrmResult extends androidx.media2.common.SessionPlayer.PlayerResult {
    ctor public MediaPlayer.DrmResult(@androidx.media2.player.MediaPlayer.DrmResult.DrmResultCode int, androidx.media2.common.MediaItem);
    field public static final int RESULT_ERROR_PREPARATION_ERROR = -1003; // 0xfffffc15
    field public static final int RESULT_ERROR_PROVISIONING_NETWORK_ERROR = -1001; // 0xfffffc17
    field public static final int RESULT_ERROR_PROVISIONING_SERVER_ERROR = -1002; // 0xfffffc16
    field public static final int RESULT_ERROR_RESOURCE_BUSY = -1005; // 0xfffffc13
    field public static final int RESULT_ERROR_UNSUPPORTED_SCHEME = -1004; // 0xfffffc14
  }

  @IntDef(flag=false, value={androidx.media2.common.BaseResult.RESULT_SUCCESS, androidx.media2.player.MediaPlayer.DrmResult.RESULT_ERROR_PROVISIONING_NETWORK_ERROR, androidx.media2.player.MediaPlayer.DrmResult.RESULT_ERROR_PROVISIONING_SERVER_ERROR, androidx.media2.player.MediaPlayer.DrmResult.RESULT_ERROR_PREPARATION_ERROR, androidx.media2.player.MediaPlayer.DrmResult.RESULT_ERROR_UNSUPPORTED_SCHEME, androidx.media2.player.MediaPlayer.DrmResult.RESULT_ERROR_RESOURCE_BUSY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer.DrmResult.DrmResultCode {
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer.PLAYER_ERROR_UNKNOWN, androidx.media2.player.MediaPlayer.PLAYER_ERROR_IO, androidx.media2.player.MediaPlayer.PLAYER_ERROR_MALFORMED, androidx.media2.player.MediaPlayer.PLAYER_ERROR_UNSUPPORTED, androidx.media2.player.MediaPlayer.PLAYER_ERROR_TIMED_OUT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer.MediaError {
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer.MEDIA_INFO_MEDIA_ITEM_START, androidx.media2.player.MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START, androidx.media2.player.MediaPlayer.MEDIA_INFO_MEDIA_ITEM_END, androidx.media2.player.MediaPlayer.MEDIA_INFO_MEDIA_ITEM_LIST_END, androidx.media2.player.MediaPlayer.MEDIA_INFO_MEDIA_ITEM_REPEAT, androidx.media2.player.MediaPlayer.MEDIA_INFO_PREPARED, androidx.media2.player.MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING, androidx.media2.player.MediaPlayer.MEDIA_INFO_BUFFERING_START, androidx.media2.player.MediaPlayer.MEDIA_INFO_BUFFERING_END, androidx.media2.player.MediaPlayer.MEDIA_INFO_NETWORK_BANDWIDTH, androidx.media2.player.MediaPlayer.MEDIA_INFO_BUFFERING_UPDATE, androidx.media2.player.MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING, androidx.media2.player.MediaPlayer.MEDIA_INFO_NOT_SEEKABLE, androidx.media2.player.MediaPlayer.MEDIA_INFO_METADATA_UPDATE, androidx.media2.player.MediaPlayer.MEDIA_INFO_EXTERNAL_METADATA_UPDATE, androidx.media2.player.MediaPlayer.MEDIA_INFO_AUDIO_NOT_PLAYING, androidx.media2.player.MediaPlayer.MEDIA_INFO_VIDEO_NOT_PLAYING, androidx.media2.player.MediaPlayer.MEDIA_INFO_UNSUPPORTED_SUBTITLE, androidx.media2.player.MediaPlayer.MEDIA_INFO_SUBTITLE_TIMED_OUT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer.MediaInfo {
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class MediaPlayer.MetricsConstants {
    field public static final String CODEC_AUDIO = "android.media.mediaplayer.audio.codec";
    field public static final String CODEC_VIDEO = "android.media.mediaplayer.video.codec";
    field public static final String DURATION = "android.media.mediaplayer.durationMs";
    field public static final String ERRORS = "android.media.mediaplayer.err";
    field public static final String ERROR_CODE = "android.media.mediaplayer.errcode";
    field public static final String FRAMES = "android.media.mediaplayer.frames";
    field public static final String FRAMES_DROPPED = "android.media.mediaplayer.dropped";
    field public static final String HEIGHT = "android.media.mediaplayer.height";
    field public static final String MIME_TYPE_AUDIO = "android.media.mediaplayer.audio.mime";
    field public static final String MIME_TYPE_VIDEO = "android.media.mediaplayer.video.mime";
    field public static final String PLAYING = "android.media.mediaplayer.playingMs";
    field public static final String WIDTH = "android.media.mediaplayer.width";
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class MediaPlayer.NoDrmSchemeException extends android.media.MediaDrmException {
    ctor public MediaPlayer.NoDrmSchemeException(String?);
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface MediaPlayer.OnDrmConfigHelper {
    method public void onDrmConfig(androidx.media2.player.MediaPlayer, androidx.media2.common.MediaItem);
  }

  public abstract static class MediaPlayer.PlayerCallback extends androidx.media2.common.SessionPlayer.PlayerCallback {
    ctor public MediaPlayer.PlayerCallback();
    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void onDrmInfo(androidx.media2.player.MediaPlayer, androidx.media2.common.MediaItem, androidx.media2.player.MediaPlayer.DrmInfo);
    method public void onError(androidx.media2.player.MediaPlayer, androidx.media2.common.MediaItem, @androidx.media2.player.MediaPlayer.MediaError int, int);
    method public void onInfo(androidx.media2.player.MediaPlayer, androidx.media2.common.MediaItem, @androidx.media2.player.MediaPlayer.MediaInfo int, int);
    method public void onMediaTimeDiscontinuity(androidx.media2.player.MediaPlayer, androidx.media2.common.MediaItem, androidx.media2.player.MediaTimestamp);
    method public void onTimedMetaDataAvailable(androidx.media2.player.MediaPlayer, androidx.media2.common.MediaItem, androidx.media2.player.TimedMetaData);
    method public void onVideoSizeChanged(androidx.media2.player.MediaPlayer, androidx.media2.common.MediaItem, androidx.media2.player.VideoSize);
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer.SEEK_PREVIOUS_SYNC, androidx.media2.player.MediaPlayer.SEEK_NEXT_SYNC, androidx.media2.player.MediaPlayer.SEEK_CLOSEST_SYNC, androidx.media2.player.MediaPlayer.SEEK_CLOSEST}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer.SeekMode {
  }

  public static final class MediaPlayer.TrackInfo {
    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public MediaPlayer.TrackInfo(int, androidx.media2.common.MediaItem!, int, android.media.MediaFormat!);
    method public android.media.MediaFormat? getFormat();
    method public java.util.Locale getLanguage();
    method @androidx.media2.player.MediaPlayer.TrackInfo.MediaTrackType public int getTrackType();
    field public static final int MEDIA_TRACK_TYPE_AUDIO = 2; // 0x2
    field public static final int MEDIA_TRACK_TYPE_METADATA = 5; // 0x5
    field public static final int MEDIA_TRACK_TYPE_SUBTITLE = 4; // 0x4
    field public static final int MEDIA_TRACK_TYPE_UNKNOWN = 0; // 0x0
    field public static final int MEDIA_TRACK_TYPE_VIDEO = 1; // 0x1
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_UNKNOWN, androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_VIDEO, androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO, androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_SUBTITLE, androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_METADATA}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer.TrackInfo.MediaTrackType {
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class MediaPlayer2 {
    ctor protected MediaPlayer2();
    method public abstract Object! attachAuxEffect(int);
    method public abstract boolean cancel(Object!);
    method public abstract void clearDrmEventCallback();
    method public abstract void clearEventCallback();
    method public abstract void clearPendingCommands();
    method public abstract void close();
    method public static androidx.media2.player.MediaPlayer2! create(android.content.Context);
    method public abstract Object! deselectTrack(int);
    method public abstract androidx.media.AudioAttributesCompat? getAudioAttributes();
    method public abstract int getAudioSessionId();
    method public abstract long getBufferedPosition();
    method public abstract androidx.media2.common.MediaItem? getCurrentMediaItem();
    method public abstract long getCurrentPosition();
    method public abstract androidx.media2.player.MediaPlayer2.DrmInfo! getDrmInfo();
    method public abstract android.media.MediaDrm.KeyRequest getDrmKeyRequest(byte[]?, byte[]?, String?, int, java.util.Map<java.lang.String!,java.lang.String!>?) throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public abstract String getDrmPropertyString(String) throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public abstract long getDuration();
    method public float getMaxPlayerVolume();
    method @RequiresApi(21) public abstract android.os.PersistableBundle! getMetrics();
    method public abstract androidx.media2.player.PlaybackParams getPlaybackParams();
    method public abstract float getPlayerVolume();
    method public abstract int getSelectedTrack(int);
    method @androidx.media2.player.MediaPlayer2.MediaPlayer2State public abstract int getState();
    method public abstract androidx.media2.player.MediaTimestamp? getTimestamp();
    method public abstract java.util.List<androidx.media2.player.MediaPlayer2.TrackInfo!>! getTrackInfo();
    method public abstract int getVideoHeight();
    method public abstract int getVideoWidth();
    method public abstract Object! loopCurrent(boolean);
    method public abstract Object! notifyWhenCommandLabelReached(Object);
    method public abstract Object! pause();
    method public abstract Object! play();
    method public abstract Object! prepare();
    method public abstract Object! prepareDrm(java.util.UUID);
    method public abstract byte[]! provideDrmKeyResponse(byte[]?, byte[]) throws android.media.DeniedByServerException, androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public abstract void releaseDrm() throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public abstract void reset();
    method public abstract void restoreDrmKeys(byte[]) throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public Object! seekTo(long);
    method public abstract Object! seekTo(long, @androidx.media2.player.MediaPlayer2.SeekMode int);
    method public abstract Object! selectTrack(int);
    method public abstract Object! setAudioAttributes(androidx.media.AudioAttributesCompat);
    method public abstract Object! setAudioSessionId(int);
    method public abstract Object! setAuxEffectSendLevel(float);
    method public abstract void setDrmEventCallback(java.util.concurrent.Executor, androidx.media2.player.MediaPlayer2.DrmEventCallback);
    method public abstract void setDrmPropertyString(String, String) throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public abstract void setEventCallback(java.util.concurrent.Executor, androidx.media2.player.MediaPlayer2.EventCallback);
    method public abstract Object! setMediaItem(androidx.media2.common.MediaItem);
    method public abstract Object! setNextMediaItem(androidx.media2.common.MediaItem);
    method public abstract Object! setNextMediaItems(java.util.List<androidx.media2.common.MediaItem!>);
    method public abstract void setOnDrmConfigHelper(androidx.media2.player.MediaPlayer2.OnDrmConfigHelper!);
    method public abstract Object! setPlaybackParams(androidx.media2.player.PlaybackParams);
    method public abstract Object! setPlayerVolume(float);
    method public abstract Object! setSurface(android.view.Surface?);
    method public abstract Object! skipToNext();
    field public static final int CALL_COMPLETED_ATTACH_AUX_EFFECT = 1; // 0x1
    field public static final int CALL_COMPLETED_DESELECT_TRACK = 2; // 0x2
    field public static final int CALL_COMPLETED_LOOP_CURRENT = 3; // 0x3
    field public static final int CALL_COMPLETED_NOTIFY_WHEN_COMMAND_LABEL_REACHED = 1000; // 0x3e8
    field public static final int CALL_COMPLETED_PAUSE = 4; // 0x4
    field public static final int CALL_COMPLETED_PLAY = 5; // 0x5
    field public static final int CALL_COMPLETED_PREPARE = 6; // 0x6
    field public static final int CALL_COMPLETED_PREPARE_DRM = 1001; // 0x3e9
    field public static final int CALL_COMPLETED_SEEK_TO = 14; // 0xe
    field public static final int CALL_COMPLETED_SELECT_TRACK = 15; // 0xf
    field public static final int CALL_COMPLETED_SET_AUDIO_ATTRIBUTES = 16; // 0x10
    field public static final int CALL_COMPLETED_SET_AUDIO_SESSION_ID = 17; // 0x11
    field public static final int CALL_COMPLETED_SET_AUX_EFFECT_SEND_LEVEL = 18; // 0x12
    field public static final int CALL_COMPLETED_SET_DATA_SOURCE = 19; // 0x13
    field public static final int CALL_COMPLETED_SET_NEXT_DATA_SOURCE = 22; // 0x16
    field public static final int CALL_COMPLETED_SET_NEXT_DATA_SOURCES = 23; // 0x17
    field public static final int CALL_COMPLETED_SET_PLAYBACK_PARAMS = 24; // 0x18
    field public static final int CALL_COMPLETED_SET_PLAYER_VOLUME = 26; // 0x1a
    field public static final int CALL_COMPLETED_SET_SURFACE = 27; // 0x1b
    field public static final int CALL_COMPLETED_SKIP_TO_NEXT = 29; // 0x1d
    field public static final int CALL_STATUS_BAD_VALUE = 2; // 0x2
    field public static final int CALL_STATUS_ERROR_IO = 4; // 0x4
    field public static final int CALL_STATUS_ERROR_UNKNOWN = -2147483648; // 0x80000000
    field public static final int CALL_STATUS_INVALID_OPERATION = 1; // 0x1
    field public static final int CALL_STATUS_NO_ERROR = 0; // 0x0
    field public static final int CALL_STATUS_PERMISSION_DENIED = 3; // 0x3
    field public static final int CALL_STATUS_SKIPPED = 5; // 0x5
    field public static final int MEDIA_ERROR_IO = -1004; // 0xfffffc14
    field public static final int MEDIA_ERROR_MALFORMED = -1007; // 0xfffffc11
    field public static final int MEDIA_ERROR_SYSTEM = -2147483648; // 0x80000000
    field public static final int MEDIA_ERROR_TIMED_OUT = -110; // 0xffffff92
    field public static final int MEDIA_ERROR_UNKNOWN = 1; // 0x1
    field public static final int MEDIA_ERROR_UNSUPPORTED = -1010; // 0xfffffc0e
    field public static final int MEDIA_INFO_AUDIO_NOT_PLAYING = 804; // 0x324
    field public static final int MEDIA_INFO_AUDIO_RENDERING_START = 4; // 0x4
    field public static final int MEDIA_INFO_BAD_INTERLEAVING = 800; // 0x320
    field public static final int MEDIA_INFO_BUFFERING_END = 702; // 0x2be
    field public static final int MEDIA_INFO_BUFFERING_START = 701; // 0x2bd
    field public static final int MEDIA_INFO_BUFFERING_UPDATE = 704; // 0x2c0
    field public static final int MEDIA_INFO_DATA_SOURCE_END = 5; // 0x5
    field public static final int MEDIA_INFO_DATA_SOURCE_LIST_END = 6; // 0x6
    field public static final int MEDIA_INFO_DATA_SOURCE_REPEAT = 7; // 0x7
    field public static final int MEDIA_INFO_DATA_SOURCE_START = 2; // 0x2
    field public static final int MEDIA_INFO_EXTERNAL_METADATA_UPDATE = 803; // 0x323
    field public static final int MEDIA_INFO_METADATA_UPDATE = 802; // 0x322
    field public static final int MEDIA_INFO_NETWORK_BANDWIDTH = 703; // 0x2bf
    field public static final int MEDIA_INFO_NOT_SEEKABLE = 801; // 0x321
    field public static final int MEDIA_INFO_PREPARED = 100; // 0x64
    field public static final int MEDIA_INFO_SUBTITLE_TIMED_OUT = 902; // 0x386
    field public static final int MEDIA_INFO_UNKNOWN = 1; // 0x1
    field public static final int MEDIA_INFO_UNSUPPORTED_SUBTITLE = 901; // 0x385
    field public static final int MEDIA_INFO_VIDEO_NOT_PLAYING = 805; // 0x325
    field public static final int MEDIA_INFO_VIDEO_RENDERING_START = 3; // 0x3
    field public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING = 700; // 0x2bc
    field public static final int PLAYER_STATE_ERROR = 1005; // 0x3ed
    field public static final int PLAYER_STATE_IDLE = 1001; // 0x3e9
    field public static final int PLAYER_STATE_PAUSED = 1003; // 0x3eb
    field public static final int PLAYER_STATE_PLAYING = 1004; // 0x3ec
    field public static final int PLAYER_STATE_PREPARED = 1002; // 0x3ea
    field public static final int PREPARE_DRM_STATUS_PREPARATION_ERROR = 3; // 0x3
    field public static final int PREPARE_DRM_STATUS_PROVISIONING_NETWORK_ERROR = 1; // 0x1
    field public static final int PREPARE_DRM_STATUS_PROVISIONING_SERVER_ERROR = 2; // 0x2
    field public static final int PREPARE_DRM_STATUS_RESOURCE_BUSY = 5; // 0x5
    field public static final int PREPARE_DRM_STATUS_SUCCESS = 0; // 0x0
    field public static final int PREPARE_DRM_STATUS_UNSUPPORTED_SCHEME = 4; // 0x4
    field public static final int SEEK_CLOSEST = 3; // 0x3
    field public static final int SEEK_CLOSEST_SYNC = 2; // 0x2
    field public static final int SEEK_NEXT_SYNC = 1; // 0x1
    field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0
    field public static final int SEPARATE_CALL_COMPLETE_CALLBACK_START = 1000; // 0x3e8
    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer2.CALL_COMPLETED_ATTACH_AUX_EFFECT, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_DESELECT_TRACK, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_LOOP_CURRENT, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_PAUSE, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_PLAY, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_PREPARE, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SEEK_TO, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SELECT_TRACK, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_AUDIO_ATTRIBUTES, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_AUDIO_SESSION_ID, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_AUX_EFFECT_SEND_LEVEL, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_DATA_SOURCE, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_NEXT_DATA_SOURCE, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_NEXT_DATA_SOURCES, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_PLAYBACK_PARAMS, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_PLAYER_VOLUME, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SET_SURFACE, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_SKIP_TO_NEXT, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_NOTIFY_WHEN_COMMAND_LABEL_REACHED, androidx.media2.player.MediaPlayer2.CALL_COMPLETED_PREPARE_DRM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer2.CallCompleted {
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer2.CALL_STATUS_NO_ERROR, androidx.media2.player.MediaPlayer2.CALL_STATUS_ERROR_UNKNOWN, androidx.media2.player.MediaPlayer2.CALL_STATUS_INVALID_OPERATION, androidx.media2.player.MediaPlayer2.CALL_STATUS_BAD_VALUE, androidx.media2.player.MediaPlayer2.CALL_STATUS_PERMISSION_DENIED, androidx.media2.player.MediaPlayer2.CALL_STATUS_ERROR_IO, androidx.media2.player.MediaPlayer2.CALL_STATUS_SKIPPED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer2.CallStatus {
  }

  public abstract static class MediaPlayer2.DrmEventCallback {
    ctor public MediaPlayer2.DrmEventCallback();
    method public void onDrmInfo(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!, androidx.media2.player.MediaPlayer2.DrmInfo!);
    method public void onDrmPrepared(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!, @androidx.media2.player.MediaPlayer2.PrepareDrmStatusCode int);
  }

  public abstract static class MediaPlayer2.DrmInfo {
    ctor public MediaPlayer2.DrmInfo();
    method public abstract java.util.Map<java.util.UUID!,byte[]!>! getPssh();
    method public abstract java.util.List<java.util.UUID!>! getSupportedSchemes();
  }

  public abstract static class MediaPlayer2.EventCallback {
    ctor public MediaPlayer2.EventCallback();
    method public void onCallCompleted(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!, @androidx.media2.player.MediaPlayer2.CallCompleted int, @androidx.media2.player.MediaPlayer2.CallStatus int);
    method public void onCommandLabelReached(androidx.media2.player.MediaPlayer2!, Object);
    method public void onError(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!, @androidx.media2.player.MediaPlayer2.MediaError int, int);
    method public void onInfo(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!, @androidx.media2.player.MediaPlayer2.MediaInfo int, int);
    method public void onMediaTimeDiscontinuity(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!, androidx.media2.player.MediaTimestamp!);
    method public void onSubtitleData(androidx.media2.player.MediaPlayer2, androidx.media2.common.MediaItem, int, androidx.media2.common.SubtitleData);
    method public void onTimedMetaDataAvailable(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!, androidx.media2.player.TimedMetaData!);
    method public void onVideoSizeChanged(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!, int, int);
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer2.MEDIA_ERROR_UNKNOWN, androidx.media2.player.MediaPlayer2.MEDIA_ERROR_IO, androidx.media2.player.MediaPlayer2.MEDIA_ERROR_MALFORMED, androidx.media2.player.MediaPlayer2.MEDIA_ERROR_UNSUPPORTED, androidx.media2.player.MediaPlayer2.MEDIA_ERROR_TIMED_OUT, androidx.media2.player.MediaPlayer2.MEDIA_ERROR_SYSTEM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer2.MediaError {
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer2.MEDIA_INFO_UNKNOWN, androidx.media2.player.MediaPlayer2.MEDIA_INFO_DATA_SOURCE_START, androidx.media2.player.MediaPlayer2.MEDIA_INFO_VIDEO_RENDERING_START, androidx.media2.player.MediaPlayer2.MEDIA_INFO_AUDIO_RENDERING_START, androidx.media2.player.MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END, androidx.media2.player.MediaPlayer2.MEDIA_INFO_DATA_SOURCE_LIST_END, androidx.media2.player.MediaPlayer2.MEDIA_INFO_DATA_SOURCE_REPEAT, androidx.media2.player.MediaPlayer2.MEDIA_INFO_PREPARED, androidx.media2.player.MediaPlayer2.MEDIA_INFO_VIDEO_TRACK_LAGGING, androidx.media2.player.MediaPlayer2.MEDIA_INFO_BUFFERING_START, androidx.media2.player.MediaPlayer2.MEDIA_INFO_BUFFERING_END, androidx.media2.player.MediaPlayer2.MEDIA_INFO_NETWORK_BANDWIDTH, androidx.media2.player.MediaPlayer2.MEDIA_INFO_BUFFERING_UPDATE, androidx.media2.player.MediaPlayer2.MEDIA_INFO_BAD_INTERLEAVING, androidx.media2.player.MediaPlayer2.MEDIA_INFO_NOT_SEEKABLE, androidx.media2.player.MediaPlayer2.MEDIA_INFO_METADATA_UPDATE, androidx.media2.player.MediaPlayer2.MEDIA_INFO_EXTERNAL_METADATA_UPDATE, androidx.media2.player.MediaPlayer2.MEDIA_INFO_AUDIO_NOT_PLAYING, androidx.media2.player.MediaPlayer2.MEDIA_INFO_VIDEO_NOT_PLAYING, androidx.media2.player.MediaPlayer2.MEDIA_INFO_UNSUPPORTED_SUBTITLE, androidx.media2.player.MediaPlayer2.MEDIA_INFO_SUBTITLE_TIMED_OUT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer2.MediaInfo {
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer2.PLAYER_STATE_IDLE, androidx.media2.player.MediaPlayer2.PLAYER_STATE_PREPARED, androidx.media2.player.MediaPlayer2.PLAYER_STATE_PAUSED, androidx.media2.player.MediaPlayer2.PLAYER_STATE_PLAYING, androidx.media2.player.MediaPlayer2.PLAYER_STATE_ERROR}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer2.MediaPlayer2State {
  }

  public static final class MediaPlayer2.MetricsConstants {
    field public static final String CODEC_AUDIO = "android.media.mediaplayer.audio.codec";
    field public static final String CODEC_VIDEO = "android.media.mediaplayer.video.codec";
    field public static final String DURATION = "android.media.mediaplayer.durationMs";
    field public static final String ERRORS = "android.media.mediaplayer.err";
    field public static final String ERROR_CODE = "android.media.mediaplayer.errcode";
    field public static final String FRAMES = "android.media.mediaplayer.frames";
    field public static final String FRAMES_DROPPED = "android.media.mediaplayer.dropped";
    field public static final String HEIGHT = "android.media.mediaplayer.height";
    field public static final String MIME_TYPE_AUDIO = "android.media.mediaplayer.audio.mime";
    field public static final String MIME_TYPE_VIDEO = "android.media.mediaplayer.video.mime";
    field public static final String PLAYING = "android.media.mediaplayer.playingMs";
    field public static final String WIDTH = "android.media.mediaplayer.width";
  }

  public static class MediaPlayer2.NoDrmSchemeException extends android.media.MediaDrmException {
    ctor public MediaPlayer2.NoDrmSchemeException(String!);
  }

  public static interface MediaPlayer2.OnDrmConfigHelper {
    method public void onDrmConfig(androidx.media2.player.MediaPlayer2!, androidx.media2.common.MediaItem!);
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer2.PREPARE_DRM_STATUS_SUCCESS, androidx.media2.player.MediaPlayer2.PREPARE_DRM_STATUS_PROVISIONING_NETWORK_ERROR, androidx.media2.player.MediaPlayer2.PREPARE_DRM_STATUS_PROVISIONING_SERVER_ERROR, androidx.media2.player.MediaPlayer2.PREPARE_DRM_STATUS_PREPARATION_ERROR, androidx.media2.player.MediaPlayer2.PREPARE_DRM_STATUS_UNSUPPORTED_SCHEME, androidx.media2.player.MediaPlayer2.PREPARE_DRM_STATUS_RESOURCE_BUSY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer2.PrepareDrmStatusCode {
  }

  @IntDef(flag=false, value={androidx.media2.player.MediaPlayer2.SEEK_PREVIOUS_SYNC, androidx.media2.player.MediaPlayer2.SEEK_NEXT_SYNC, androidx.media2.player.MediaPlayer2.SEEK_CLOSEST_SYNC, androidx.media2.player.MediaPlayer2.SEEK_CLOSEST}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaPlayer2.SeekMode {
  }

  public abstract static class MediaPlayer2.TrackInfo {
    ctor public MediaPlayer2.TrackInfo();
    method public abstract android.media.MediaFormat! getFormat();
    method public abstract String! getLanguage();
    method public abstract int getTrackType();
    method public abstract String toString();
    field public static final int MEDIA_TRACK_TYPE_AUDIO = 2; // 0x2
    field public static final int MEDIA_TRACK_TYPE_METADATA = 5; // 0x5
    field public static final int MEDIA_TRACK_TYPE_SUBTITLE = 4; // 0x4
    field public static final int MEDIA_TRACK_TYPE_UNKNOWN = 0; // 0x0
    field public static final int MEDIA_TRACK_TYPE_VIDEO = 1; // 0x1
  }

  @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class MediaPlayer2Impl extends androidx.media2.player.MediaPlayer2 {
    ctor public MediaPlayer2Impl(android.content.Context!);
    method public Object! attachAuxEffect(int);
    method public boolean cancel(Object!);
    method public void clearDrmEventCallback();
    method public void clearEventCallback();
    method public void clearPendingCommands();
    method public void close();
    method public Object! deselectTrack(int);
    method public androidx.media.AudioAttributesCompat? getAudioAttributes();
    method public int getAudioSessionId();
    method public long getBufferedPosition();
    method public androidx.media2.common.MediaItem? getCurrentMediaItem();
    method public long getCurrentPosition();
    method public androidx.media2.player.MediaPlayer2.DrmInfo! getDrmInfo();
    method public android.media.MediaDrm.KeyRequest getDrmKeyRequest(byte[]?, byte[]?, String?, int, java.util.Map<java.lang.String!,java.lang.String!>?) throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public String getDrmPropertyString(String) throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public long getDuration();
    method public android.os.PersistableBundle! getMetrics();
    method public androidx.media2.player.PlaybackParams getPlaybackParams();
    method public float getPlayerVolume();
    method public int getSelectedTrack(int);
    method @androidx.media2.player.MediaPlayer2.MediaPlayer2State public int getState();
    method public androidx.media2.player.MediaTimestamp? getTimestamp();
    method public java.util.List<androidx.media2.player.MediaPlayer2.TrackInfo!>! getTrackInfo();
    method public int getVideoHeight();
    method public int getVideoWidth();
    method public Object! loopCurrent(boolean);
    method public Object! notifyWhenCommandLabelReached(Object!);
    method public Object! pause();
    method public Object! play();
    method public Object! prepare();
    method public Object! prepareDrm(java.util.UUID);
    method public byte[]! provideDrmKeyResponse(byte[]?, byte[]) throws android.media.DeniedByServerException, androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public void releaseDrm() throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public void reset();
    method public void restoreDrmKeys(byte[]) throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public Object! seekTo(long, @androidx.media2.player.MediaPlayer2.SeekMode int);
    method public Object! selectTrack(int);
    method public Object! setAudioAttributes(androidx.media.AudioAttributesCompat);
    method public Object! setAudioSessionId(int);
    method public Object! setAuxEffectSendLevel(float);
    method public void setDrmEventCallback(java.util.concurrent.Executor, androidx.media2.player.MediaPlayer2.DrmEventCallback);
    method public void setDrmPropertyString(String, String) throws androidx.media2.player.MediaPlayer2.NoDrmSchemeException;
    method public void setEventCallback(java.util.concurrent.Executor, androidx.media2.player.MediaPlayer2.EventCallback);
    method public Object! setMediaItem(androidx.media2.common.MediaItem);
    method public Object! setNextMediaItem(androidx.media2.common.MediaItem);
    method public Object! setNextMediaItems(java.util.List<androidx.media2.common.MediaItem!>);
    method public void setOnDrmConfigHelper(androidx.media2.player.MediaPlayer2.OnDrmConfigHelper!);
    method public Object! setPlaybackParams(androidx.media2.player.PlaybackParams);
    method public Object! setPlayerVolume(float);
    method public Object! setSurface(android.view.Surface!);
    method public Object! skipToNext();
  }

  public static final class MediaPlayer2Impl.DrmInfoImpl extends androidx.media2.player.MediaPlayer2.DrmInfo {
    method public java.util.Map<java.util.UUID!,byte[]!>! getPssh();
    method public java.util.List<java.util.UUID!>! getSupportedSchemes();
  }

  public final class MediaTimestamp {
    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public MediaTimestamp(long, long, float);
    method public long getAnchorMediaTimeUs();
    method public long getAnchorSystemNanoTime();
    method public float getMediaClockRate();
    field public static final androidx.media2.player.MediaTimestamp TIMESTAMP_UNKNOWN;
  }

  public final class PlaybackParams {
    method @androidx.media2.player.PlaybackParams.AudioFallbackMode public Integer? getAudioFallbackMode();
    method public Float? getPitch();
    method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.media.PlaybackParams! getPlaybackParams();
    method public Float? getSpeed();
    field public static final int AUDIO_FALLBACK_MODE_DEFAULT = 0; // 0x0
    field public static final int AUDIO_FALLBACK_MODE_FAIL = 2; // 0x2
    field public static final int AUDIO_FALLBACK_MODE_MUTE = 1; // 0x1
  }

  @IntDef({androidx.media2.player.PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT, androidx.media2.player.PlaybackParams.AUDIO_FALLBACK_MODE_MUTE, androidx.media2.player.PlaybackParams.AUDIO_FALLBACK_MODE_FAIL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PlaybackParams.AudioFallbackMode {
  }

  public static final class PlaybackParams.Builder {
    ctor public PlaybackParams.Builder();
    ctor @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public PlaybackParams.Builder(android.media.PlaybackParams!);
    ctor public PlaybackParams.Builder(androidx.media2.player.PlaybackParams);
    method public androidx.media2.player.PlaybackParams build();
    method public androidx.media2.player.PlaybackParams.Builder setAudioFallbackMode(@androidx.media2.player.PlaybackParams.AudioFallbackMode int);
    method public androidx.media2.player.PlaybackParams.Builder setPitch(@FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE, fromInclusive=false) float);
    method public androidx.media2.player.PlaybackParams.Builder setSpeed(@FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE, fromInclusive=false) float);
  }

  public class TimedMetaData {
    ctor @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public TimedMetaData(android.media.TimedMetaData!);
    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public TimedMetaData(long, byte[]!);
    method public byte[]! getMetaData();
    method public long getTimestamp();
  }

  public final class VideoSize {
    ctor public VideoSize(int, int);
    method public int getHeight();
    method public int getWidth();
  }

}

package androidx.media2.player.common {

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TrackInfoImpl extends androidx.media2.player.MediaPlayer2.TrackInfo {
    ctor public TrackInfoImpl(int, android.media.MediaFormat!);
    method public android.media.MediaFormat! getFormat();
    method public String! getLanguage();
    method public int getTrackType();
  }

}

package androidx.media2.player.exoplayer {

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class DataSourceCallbackDataSource {
    ctor public DataSourceCallbackDataSource(androidx.media2.common.DataSourceCallback!);
    method public void close();
    method public android.net.Uri! getUri();
    method public long open(DataSpec) throws java.io.IOException;
    method public int read(byte[]!, int, int) throws java.io.IOException;
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ExoPlayerMediaPlayer2Impl extends androidx.media2.player.MediaPlayer2 {
    ctor public ExoPlayerMediaPlayer2Impl(android.content.Context);
    method public Object! attachAuxEffect(int);
    method public boolean cancel(Object!);
    method public void clearDrmEventCallback();
    method public void clearEventCallback();
    method public void clearPendingCommands();
    method public void close();
    method public Object! deselectTrack(int);
    method public androidx.media.AudioAttributesCompat! getAudioAttributes();
    method public int getAudioSessionId();
    method public long getBufferedPosition();
    method public androidx.media2.common.MediaItem! getCurrentMediaItem();
    method public long getCurrentPosition();
    method public androidx.media2.player.MediaPlayer2.DrmInfo! getDrmInfo();
    method public android.media.MediaDrm.KeyRequest getDrmKeyRequest(byte[]!, byte[]!, String!, int, java.util.Map<java.lang.String!,java.lang.String!>!);
    method public String getDrmPropertyString(String);
    method public long getDuration();
    method @RequiresApi(21) public android.os.PersistableBundle! getMetrics();
    method public androidx.media2.player.PlaybackParams getPlaybackParams();
    method public float getPlayerVolume();
    method public int getSelectedTrack(int);
    method @androidx.media2.player.MediaPlayer2.MediaPlayer2State public int getState();
    method public androidx.media2.player.MediaTimestamp! getTimestamp();
    method public java.util.List<androidx.media2.player.MediaPlayer2.TrackInfo!>! getTrackInfo();
    method public int getVideoHeight();
    method public int getVideoWidth();
    method public Object! loopCurrent(boolean);
    method public Object! notifyWhenCommandLabelReached(Object);
    method public void onBandwidthSample(androidx.media2.common.MediaItem!, int);
    method public void onBufferingEnded(androidx.media2.common.MediaItem!);
    method public void onBufferingStarted(androidx.media2.common.MediaItem!);
    method public void onBufferingUpdate(androidx.media2.common.MediaItem!, int);
    method public void onError(androidx.media2.common.MediaItem!, int);
    method public void onLoop(androidx.media2.common.MediaItem!);
    method public void onMediaItemEnded(androidx.media2.common.MediaItem!);
    method public void onMediaItemStartedAsNext(androidx.media2.common.MediaItem!);
    method public void onMediaTimeDiscontinuity(androidx.media2.common.MediaItem!, androidx.media2.player.MediaTimestamp!);
    method public void onMetadataChanged(androidx.media2.common.MediaItem!);
    method public void onPlaybackEnded(androidx.media2.common.MediaItem!);
    method public void onPrepared(androidx.media2.common.MediaItem!);
    method public void onSeekCompleted();
    method public void onSubtitleData(androidx.media2.common.MediaItem!, int, androidx.media2.common.SubtitleData!);
    method public void onTimedMetadata(androidx.media2.common.MediaItem!, androidx.media2.player.TimedMetaData!);
    method public void onVideoRenderingStart(androidx.media2.common.MediaItem!);
    method public void onVideoSizeChanged(androidx.media2.common.MediaItem!, int, int);
    method public Object! pause();
    method public Object! play();
    method public Object! prepare();
    method public Object! prepareDrm(java.util.UUID);
    method public byte[]! provideDrmKeyResponse(byte[]?, byte[]);
    method public void releaseDrm();
    method public void reset();
    method public void restoreDrmKeys(byte[]);
    method public Object! seekTo(long, int);
    method public Object! selectTrack(int);
    method public Object! setAudioAttributes(androidx.media.AudioAttributesCompat);
    method public Object! setAudioSessionId(int);
    method public Object! setAuxEffectSendLevel(float);
    method public void setDrmEventCallback(java.util.concurrent.Executor, androidx.media2.player.MediaPlayer2.DrmEventCallback);
    method public void setDrmPropertyString(String, String);
    method public void setEventCallback(java.util.concurrent.Executor, androidx.media2.player.MediaPlayer2.EventCallback);
    method public Object! setMediaItem(androidx.media2.common.MediaItem);
    method public Object! setNextMediaItem(androidx.media2.common.MediaItem);
    method public Object! setNextMediaItems(java.util.List<androidx.media2.common.MediaItem!>);
    method public void setOnDrmConfigHelper(androidx.media2.player.MediaPlayer2.OnDrmConfigHelper!);
    method public Object! setPlaybackParams(androidx.media2.player.PlaybackParams);
    method public Object! setPlayerVolume(float);
    method public Object! setSurface(android.view.Surface!);
    method public Object! skipToNext();
  }

}

package androidx.media2.player.subtitle {

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Cea708CaptionRenderer extends androidx.media2.player.subtitle.SubtitleController.Renderer {
    ctor public Cea708CaptionRenderer(android.content.Context!);
    method public androidx.media2.player.subtitle.SubtitleTrack! createTrack(android.media.MediaFormat!);
    method public boolean supports(android.media.MediaFormat!);
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ClosedCaptionRenderer extends androidx.media2.player.subtitle.SubtitleController.Renderer {
    ctor public ClosedCaptionRenderer(android.content.Context!);
    method public androidx.media2.player.subtitle.SubtitleTrack! createTrack(android.media.MediaFormat!);
    method public boolean supports(android.media.MediaFormat!);
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface MediaTimeProvider {
    method public void cancelNotifications(androidx.media2.player.subtitle.MediaTimeProvider.OnMediaTimeListener!);
    method public long getCurrentTimeUs(boolean, boolean) throws java.lang.IllegalStateException;
    method public void notifyAt(long, androidx.media2.player.subtitle.MediaTimeProvider.OnMediaTimeListener!);
    method public void scheduleUpdate(androidx.media2.player.subtitle.MediaTimeProvider.OnMediaTimeListener!);
    field public static final long NO_TIME = -1L; // 0xffffffffffffffffL
  }

  public static interface MediaTimeProvider.OnMediaTimeListener {
    method public void onSeek(long);
    method public void onStop();
    method public void onTimedEvent(long);
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SubtitleController {
    ctor public SubtitleController(android.content.Context!);
    ctor public SubtitleController(android.content.Context!, androidx.media2.player.subtitle.MediaTimeProvider!, androidx.media2.player.subtitle.SubtitleController.Listener!);
    method public androidx.media2.player.subtitle.SubtitleTrack! addTrack(android.media.MediaFormat!);
    method public androidx.media2.player.subtitle.SubtitleTrack! getDefaultTrack();
    method public androidx.media2.player.subtitle.SubtitleTrack! getSelectedTrack();
    method public androidx.media2.player.subtitle.SubtitleTrack![]! getTracks();
    method public boolean hasRendererFor(android.media.MediaFormat!);
    method public void hide();
    method public void registerRenderer(androidx.media2.player.subtitle.SubtitleController.Renderer!);
    method public void reset();
    method public void selectDefaultTrack();
    method public boolean selectTrack(androidx.media2.player.subtitle.SubtitleTrack!);
    method public void setAnchor(androidx.media2.player.subtitle.SubtitleController.Anchor!);
    method public void show();
  }

  public static interface SubtitleController.Anchor {
    method public android.os.Looper! getSubtitleLooper();
    method public void setSubtitleWidget(androidx.media2.player.subtitle.SubtitleTrack.RenderingWidget!);
  }

  public static interface SubtitleController.Listener {
    method public void onSubtitleTrackSelected(androidx.media2.player.subtitle.SubtitleTrack!);
  }

  public abstract static class SubtitleController.Renderer {
    ctor public SubtitleController.Renderer();
    method public abstract androidx.media2.player.subtitle.SubtitleTrack! createTrack(android.media.MediaFormat!);
    method public abstract boolean supports(android.media.MediaFormat!);
  }

  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class SubtitleTrack implements androidx.media2.player.subtitle.MediaTimeProvider.OnMediaTimeListener {
    ctor public SubtitleTrack(android.media.MediaFormat!);
    method protected boolean addCue(androidx.media2.player.subtitle.SubtitleTrack.Cue!);
    method protected void clearActiveCues();
    method protected void finishedRun(long);
    method public final android.media.MediaFormat! getFormat();
    method public abstract androidx.media2.player.subtitle.SubtitleTrack.RenderingWidget! getRenderingWidget();
    method public int getTrackType();
    method public void hide();
    method public void onData(androidx.media2.common.SubtitleData!);
    method protected abstract void onData(byte[]!, boolean, long);
    method public void onSeek(long);
    method public void onStop();
    method public void onTimedEvent(long);
    method protected void scheduleTimedEvents();
    method public void setRunDiscardTimeMs(long, long);
    method public void setTimeProvider(androidx.media2.player.subtitle.MediaTimeProvider!);
    method public void show();
    method protected void updateActiveCues(boolean, long);
    method public abstract void updateView(java.util.ArrayList<androidx.media2.player.subtitle.SubtitleTrack.Cue!>!);
    field public boolean DEBUG;
    field protected android.os.Handler! mHandler;
    field protected androidx.media2.player.subtitle.MediaTimeProvider! mTimeProvider;
    field protected boolean mVisible;
  }

  public static class SubtitleTrack.Cue {
    ctor public SubtitleTrack.Cue();
    method public void onTime(long);
    field public long mEndTimeMs;
    field public long[]! mInnerTimesMs;
    field public androidx.media2.player.subtitle.SubtitleTrack.Cue! mNextInRun;
    field public long mRunID;
    field public long mStartTimeMs;
  }

  public static interface SubtitleTrack.RenderingWidget {
    method public void draw(android.graphics.Canvas!);
    method public void onAttachedToWindow();
    method public void onDetachedFromWindow();
    method public void setOnChangedListener(androidx.media2.player.subtitle.SubtitleTrack.RenderingWidget.OnChangedListener!);
    method public void setSize(int, int);
    method public void setVisible(boolean);
  }

  public static interface SubtitleTrack.RenderingWidget.OnChangedListener {
    method public void onChanged(androidx.media2.player.subtitle.SubtitleTrack.RenderingWidget!);
  }

}

