diff --git a/libraries/exoplayer/src/androidTest/java/androidx/media3/exoplayer/MediaExtractorCompatTest.java b/libraries/exoplayer/src/androidTest/java/androidx/media3/exoplayer/MediaExtractorCompatTest.java index 75704876b0..24d4ddda14 100644 --- a/libraries/exoplayer/src/androidTest/java/androidx/media3/exoplayer/MediaExtractorCompatTest.java +++ b/libraries/exoplayer/src/androidTest/java/androidx/media3/exoplayer/MediaExtractorCompatTest.java @@ -649,7 +649,6 @@ public class MediaExtractorCompatTest { return Extractor.RESULT_CONTINUE; }); mediaExtractorCompat.setDataSource(PLACEHOLDER_URI, /* offset= */ 0); - mediaExtractorCompat.selectTrack(/* trackIndex= */ 0); MediaFormat mediaFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 0); @@ -671,7 +670,6 @@ public class MediaExtractorCompatTest { return Extractor.RESULT_CONTINUE; }); mediaExtractorCompat.setDataSource(PLACEHOLDER_URI, /* offset= */ 0); - mediaExtractorCompat.selectTrack(/* trackIndex= */ 0); MediaFormat mediaFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 0); @@ -694,13 +692,35 @@ public class MediaExtractorCompatTest { return Extractor.RESULT_CONTINUE; }); mediaExtractorCompat.setDataSource(PLACEHOLDER_URI, /* offset= */ 0); - mediaExtractorCompat.selectTrack(/* trackIndex= */ 0); MediaFormat mediaFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 0); assertThat(mediaFormat.containsKey(MediaFormat.KEY_DURATION)).isFalse(); } + @Test + public void getTrackFormat_withMultipleTracks_returnsCorrectTrackId() throws IOException { + fakeExtractor.addReadAction( + (input, seekPosition) -> { + TrackOutput output1 = extractorOutput.track(/* id= */ 1, C.TRACK_TYPE_VIDEO); + TrackOutput output2 = extractorOutput.track(/* id= */ 2, C.TRACK_TYPE_AUDIO); + extractorOutput.endTracks(); + output1.format(PLACEHOLDER_FORMAT_VIDEO); + output2.format(PLACEHOLDER_FORMAT_AUDIO); + return Extractor.RESULT_CONTINUE; + }); + + mediaExtractorCompat.setDataSource(PLACEHOLDER_URI, /* offset= */ 0); + + MediaFormat videoFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 0); + assertThat(videoFormat.containsKey(MediaFormat.KEY_TRACK_ID)).isTrue(); + assertThat(videoFormat.getInteger(MediaFormat.KEY_TRACK_ID)).isEqualTo(1); + + MediaFormat audioFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 1); + assertThat(audioFormat.containsKey(MediaFormat.KEY_TRACK_ID)).isTrue(); + assertThat(audioFormat.getInteger(MediaFormat.KEY_TRACK_ID)).isEqualTo(2); + } + @Test public void getLogSessionId_withUnsetSessionId_returnsNone() { assumeTrue(Util.SDK_INT >= 31); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaExtractorCompat.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaExtractorCompat.java index 6965ef7586..9c791509bd 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaExtractorCompat.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaExtractorCompat.java @@ -1002,6 +1002,7 @@ public final class MediaExtractorCompat { FormatHolder scratchFormatHolder, DecoderInputBuffer scratchNoDataDecoderInputBuffer) { Format format = getFormat(scratchFormatHolder, scratchNoDataDecoderInputBuffer); MediaFormat mediaFormatResult = MediaFormatUtil.createMediaFormatFromFormat(format); + mediaFormatResult.setInteger(MediaFormat.KEY_TRACK_ID, getIdOfBackingTrack()); if (compatibilityTrackMimeType != null) { if (Util.SDK_INT >= 29) { mediaFormatResult.removeKey(MediaFormat.KEY_CODECS_STRING);