{"record":{"id":"ebd2baefe899eb84","repo":"google/ExoPlayer","slug":"filemediaitem-isn-t-supported","errorCode":null,"errorMessage":"FileMediaItem isn't supported","messagePattern":"FileMediaItem isn't supported","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/DefaultMediaItemConverter.java","lineNumber":50,"sourceCode":"\n/**\n * Default implementation of {@link MediaItemConverter}.\n *\n * <p>Note that {@link #getMetadata} can be overridden to fill in additional metadata when\n * converting {@link MediaItem ExoPlayer MediaItems} to their AndroidX equivalents.\n *\n * @deprecated com.google.android.exoplayer2 is deprecated. Please migrate to androidx.media3 (which\n *     contains the same ExoPlayer code). See <a\n *     href=\"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide\">the\n *     migration guide</a> for more details, including a script to help with the migration.\n */\n@Deprecated\npublic class DefaultMediaItemConverter implements MediaItemConverter {\n\n  @Override\n  public MediaItem convertToExoPlayerMediaItem(androidx.media2.common.MediaItem media2MediaItem) {\n    if (media2MediaItem instanceof FileMediaItem) {\n      throw new IllegalStateException(\"FileMediaItem isn't supported\");\n    }\n    if (media2MediaItem instanceof CallbackMediaItem) {\n      throw new IllegalStateException(\"CallbackMediaItem isn't supported\");\n    }\n\n    @Nullable Uri uri = null;\n    @Nullable String mediaId = null;\n    @Nullable String title = null;\n    if (media2MediaItem instanceof UriMediaItem) {\n      UriMediaItem uriMediaItem = (UriMediaItem) media2MediaItem;\n      uri = uriMediaItem.getUri();\n    }\n    @Nullable androidx.media2.common.MediaMetadata metadata = media2MediaItem.getMetadata();\n    if (metadata != null) {\n      @Nullable String uriString = metadata.getString(METADATA_KEY_MEDIA_URI);\n      mediaId = metadata.getString(METADATA_KEY_MEDIA_ID);\n      if (uri == null) {\n        if (uriString != null) {","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/google/ExoPlayer/blob/dd430f7053a1a3958deea3ead6a0565150c06bfc/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/DefaultMediaItemConverter.java#L32-L68","documentation":"DefaultMediaItemConverter.convertToExoPlayerMediaItem rejects androidx.media2 FileMediaItem instances with IllegalStateException. The media2 bridge only knows how to convert URI-addressable items (UriMediaItem); FileMediaItem carries file descriptors/endpoints it has no mapping for, so conversion is explicitly unsupported rather than silently degraded.","triggerScenarios":"Passing a media2 androidx.media2.common.FileMediaItem (e.g. created via FileMediaItem.Builder) into SessionPlayer/mediaplayer pipelines backed by ExoPlayer through this converter — i.e. any media2 API surface that funnels MediaItems into an ExoPlayer-based player.","commonSituations":"Migrating an app from media2 SessionPlayer to ExoPlayer while reusing existing FileMediaItem-creating code; media2 widgets (MediaLibrarySession callbacks) handing back FileMediaItem; assuming 'MediaItem' in media2 and ExoPlayer are interchangeable types.","solutions":["Replace FileMediaItem with UriMediaItem built from Uri.fromFile(file) (or a file:// URI) so the converter can map it.","Better: migrate off the deprecated media2 bridge entirely — convert your data model to ExoPlayer/Media3 MediaItem directly (MediaItem.fromUri / fromFile), since com.google.android.exoplayer2 is deprecated in favor of androidx.media3.","If you must keep media2, implement a custom MediaItemConverter that handles FileMediaItem by extracting the file path and producing MediaItem.fromUri."],"exampleFix":"// before\nandroidx.media2.common.MediaItem item =\n    new FileMediaItem.Builder(file).build(); // IllegalStateException in converter\n\n// after\nandroidx.media2.common.MediaItem item =\n    new UriMediaItem.Builder(Uri.fromFile(file)).build(); // convertible","handlingStrategy":"type-guard","validationCode":"if (media2Item instanceof FileMediaItem) { /* convert manually */ }","typeGuard":"static boolean isConvertible(androidx.media2.common.MediaItem item) {\n  return item instanceof UriMediaItem; // only UriMediaItem converts cleanly\n}","tryCatchPattern":null,"preventionTips":["Only feed UriMediaItem into DefaultMediaItemConverter.","Migrate off the deprecated media2 bridge to Media3 MediaItem."],"tags":["media2","conversion","media-item","deprecated"],"backgroundTag":null,"analyzedSha":"dd430f7053a1a3958deea3ead6a0565150c06bfc","analyzedAt":"2026-08-14T12:22:02.982Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}