diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSourceTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSourceTest.java index ba9935a2fa..2141ee3f08 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSourceTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSourceTest.java @@ -20,6 +20,7 @@ import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.exoplayer.source.ads.ServerSideAdInsertionUtil.addAdGroupToAdPlaybackState; import static androidx.media3.test.utils.robolectric.RobolectricUtil.runMainLooperUntil; import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.playUntilPosition; +import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilIsLoading; import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilPendingCommandsAreFullyHandled; import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilPlaybackState; import static com.google.common.truth.Truth.assertThat; @@ -82,7 +83,6 @@ public final class ServerSideAdInsertionMediaSourceTest { ShadowMediaCodecConfig.forAllSupportedMimeTypes(); private static final String TEST_ASSET = "asset:///media/mp4/sample.mp4"; - private static final String TEST_ASSET_DUMP = "playbackdumps/mp4/ssai-sample.mp4.dump"; @Test public void timeline_vodSinglePeriod_containsAdsDefinedInAdPlaybackState() throws Exception { @@ -440,7 +440,8 @@ public final class ServerSideAdInsertionMediaSourceTest { player.release(); // Assert all samples have been played. - DumpFileAsserts.assertOutput(context, playbackOutput, TEST_ASSET_DUMP); + DumpFileAsserts.assertOutput( + context, playbackOutput, "playbackdumps/mp4/ssai-predefined-ads.mp4.dump"); // Assert playback has been reported with ads: [ad0][content][ad1][content][ad2][content] // 6*2(audio+video) format changes, 5 discontinuities between parts. verify(listener, times(5)) @@ -469,7 +470,7 @@ public final class ServerSideAdInsertionMediaSourceTest { AdPlaybackState firstAdPlaybackState = addAdGroupToAdPlaybackState( new AdPlaybackState(/* adsId= */ new Object()), - /* fromPositionUs= */ 900_000, + /* fromPositionUs= */ 700_000, /* contentResumeOffsetUs= */ 0, /* adDurationsUs...= */ 100_000); AtomicReference mediaSourceRef = new AtomicReference<>(); @@ -497,6 +498,8 @@ public final class ServerSideAdInsertionMediaSourceTest { // Add ad at the current playback position during playback. runUntilPlaybackState(player, Player.STATE_READY); + runUntilIsLoading(player, false); + runMainLooperUntil(() -> player.getBufferedPercentage() == 100); AdPlaybackState secondAdPlaybackState = addAdGroupToAdPlaybackState( firstAdPlaybackState, @@ -514,7 +517,8 @@ public final class ServerSideAdInsertionMediaSourceTest { player.release(); // Assert all samples have been played. - DumpFileAsserts.assertOutput(context, playbackOutput, TEST_ASSET_DUMP); + DumpFileAsserts.assertOutput( + context, playbackOutput, "playbackdumps/mp4/ssai-newly-inserted-adgroup.mp4.dump"); assertThat(contentTimelines).hasSize(2); // Assert playback has been reported with ads: [content][ad0][content][ad1][content] // 5*2(audio+video) format changes, 4 discontinuities between parts. @@ -592,7 +596,8 @@ public final class ServerSideAdInsertionMediaSourceTest { player.release(); // Assert all samples have been played. - DumpFileAsserts.assertOutput(context, playbackOutput, TEST_ASSET_DUMP); + DumpFileAsserts.assertOutput( + context, playbackOutput, "playbackdumps/mp4/ssai-extended-adgroup.mp4.dump"); assertThat(contentTimelines).hasSize(2); // Assert playback has been reported with ads: [ad0][ad1][ad2][content] // 4*2(audio+video) format changes, 3 discontinuities between parts. @@ -656,7 +661,7 @@ public final class ServerSideAdInsertionMediaSourceTest { player.setMediaSource(mediaSourceRef.get()); player.prepare(); // Play to the first content part, then seek past the midroll. - playUntilPosition(player, /* mediaItemIndex= */ 0, /* positionMs= */ 100); + playUntilPosition(player, /* mediaItemIndex= */ 0, /* positionMs= */ 150); player.seekTo(/* positionMs= */ 1_600); runUntilPendingCommandsAreFullyHandled(player); long positionAfterSeekMs = player.getCurrentPosition(); diff --git a/libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-sample.mp4.dump b/libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-extended-adgroup.mp4.dump similarity index 100% rename from libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-sample.mp4.dump rename to libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-extended-adgroup.mp4.dump diff --git a/libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-newly-inserted-adgroup.mp4.dump b/libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-newly-inserted-adgroup.mp4.dump new file mode 100644 index 0000000000..5417858cbd --- /dev/null +++ b/libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-newly-inserted-adgroup.mp4.dump @@ -0,0 +1,79 @@ +MediaCodecAdapter (exotest.audio.aac): + buffers.length = 44 + buffers[0] = length 23, hash 47DE9131 + buffers[1] = length 6, hash 31EC5206 + buffers[2] = length 148, hash 894A176B + buffers[3] = length 189, hash CEF235A1 + buffers[4] = length 205, hash BBF5F7B0 + buffers[5] = length 210, hash F278B193 + buffers[6] = length 210, hash 82DA1589 + buffers[7] = length 207, hash 5BE231DF + buffers[8] = length 225, hash 18819EE1 + buffers[9] = length 215, hash CA7FA67B + buffers[10] = length 211, hash 581A1C18 + buffers[11] = length 216, hash ADB88187 + buffers[12] = length 229, hash 2E8BA4DC + buffers[13] = length 232, hash 22F0C510 + buffers[14] = length 235, hash 867AD0DC + buffers[15] = length 231, hash 84E823A8 + buffers[16] = length 226, hash 1BEF3A95 + buffers[17] = length 216, hash EAA345AE + buffers[18] = length 229, hash 6957411F + buffers[19] = length 219, hash 41275022 + buffers[20] = length 241, hash 6495DF96 + buffers[21] = length 228, hash 63D95906 + buffers[22] = length 238, hash 34F676F9 + buffers[23] = length 234, hash E5CBC045 + buffers[24] = length 231, hash 5FC43661 + buffers[25] = length 217, hash 682708ED + buffers[26] = length 239, hash D43780FC + buffers[27] = length 243, hash C5E17980 + buffers[28] = length 231, hash AC5837BA + buffers[29] = length 230, hash 169EE895 + buffers[30] = length 238, hash C48FF3F1 + buffers[31] = length 225, hash 531E4599 + buffers[32] = length 232, hash CB3C6B8D + buffers[33] = length 243, hash F8C94C7 + buffers[34] = length 232, hash A646A7D0 + buffers[35] = length 237, hash E8B787A5 + buffers[36] = length 228, hash 3FA7A29F + buffers[37] = length 235, hash B9B33B0A + buffers[38] = length 264, hash 71A4869E + buffers[39] = length 257, hash D049B54C + buffers[40] = length 227, hash 66757231 + buffers[41] = length 227, hash BD374F1B + buffers[42] = length 235, hash 999477F6 + buffers[43] = length 0, hash 1 +MediaCodecAdapter (exotest.video.avc): + buffers.length = 31 + buffers[0] = length 36692, hash D216076E + buffers[1] = length 5312, hash D45D3CA0 + buffers[2] = length 599, hash 1BE7812D + buffers[3] = length 7735, hash 4490F110 + buffers[4] = length 987, hash 560B5036 + buffers[5] = length 673, hash ED7CD8C7 + buffers[6] = length 523, hash 3020DF50 + buffers[7] = length 6061, hash 736C72B2 + buffers[8] = length 992, hash FE132F23 + buffers[9] = length 623, hash 5B2C1816 + buffers[10] = length 421, hash 742E69C1 + buffers[11] = length 4899, hash F72F86A1 + buffers[12] = length 568, hash 519A8E50 + buffers[13] = length 620, hash 3990AA39 + buffers[14] = length 5450, hash F06EC4AA + buffers[15] = length 1051, hash 92DFA63A + buffers[16] = length 874, hash 69587FB4 + buffers[17] = length 781, hash 36BE495B + buffers[18] = length 4725, hash AC0C8CD3 + buffers[19] = length 1022, hash 5D8BFF34 + buffers[20] = length 790, hash 99413A99 + buffers[21] = length 610, hash 5E129290 + buffers[22] = length 2751, hash 769974CB + buffers[23] = length 745, hash B78A477A + buffers[24] = length 621, hash CF741E7A + buffers[25] = length 505, hash 1DB4894E + buffers[26] = length 1268, hash C15348DC + buffers[27] = length 880, hash C2DE85D0 + buffers[28] = length 530, hash C98BC6A8 + buffers[29] = length 568, hash 4FE5C8EA + buffers[30] = length 0, hash 1 diff --git a/libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-predefined-ads.mp4.dump b/libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-predefined-ads.mp4.dump new file mode 100644 index 0000000000..5417858cbd --- /dev/null +++ b/libraries/test_data/src/test/assets/playbackdumps/mp4/ssai-predefined-ads.mp4.dump @@ -0,0 +1,79 @@ +MediaCodecAdapter (exotest.audio.aac): + buffers.length = 44 + buffers[0] = length 23, hash 47DE9131 + buffers[1] = length 6, hash 31EC5206 + buffers[2] = length 148, hash 894A176B + buffers[3] = length 189, hash CEF235A1 + buffers[4] = length 205, hash BBF5F7B0 + buffers[5] = length 210, hash F278B193 + buffers[6] = length 210, hash 82DA1589 + buffers[7] = length 207, hash 5BE231DF + buffers[8] = length 225, hash 18819EE1 + buffers[9] = length 215, hash CA7FA67B + buffers[10] = length 211, hash 581A1C18 + buffers[11] = length 216, hash ADB88187 + buffers[12] = length 229, hash 2E8BA4DC + buffers[13] = length 232, hash 22F0C510 + buffers[14] = length 235, hash 867AD0DC + buffers[15] = length 231, hash 84E823A8 + buffers[16] = length 226, hash 1BEF3A95 + buffers[17] = length 216, hash EAA345AE + buffers[18] = length 229, hash 6957411F + buffers[19] = length 219, hash 41275022 + buffers[20] = length 241, hash 6495DF96 + buffers[21] = length 228, hash 63D95906 + buffers[22] = length 238, hash 34F676F9 + buffers[23] = length 234, hash E5CBC045 + buffers[24] = length 231, hash 5FC43661 + buffers[25] = length 217, hash 682708ED + buffers[26] = length 239, hash D43780FC + buffers[27] = length 243, hash C5E17980 + buffers[28] = length 231, hash AC5837BA + buffers[29] = length 230, hash 169EE895 + buffers[30] = length 238, hash C48FF3F1 + buffers[31] = length 225, hash 531E4599 + buffers[32] = length 232, hash CB3C6B8D + buffers[33] = length 243, hash F8C94C7 + buffers[34] = length 232, hash A646A7D0 + buffers[35] = length 237, hash E8B787A5 + buffers[36] = length 228, hash 3FA7A29F + buffers[37] = length 235, hash B9B33B0A + buffers[38] = length 264, hash 71A4869E + buffers[39] = length 257, hash D049B54C + buffers[40] = length 227, hash 66757231 + buffers[41] = length 227, hash BD374F1B + buffers[42] = length 235, hash 999477F6 + buffers[43] = length 0, hash 1 +MediaCodecAdapter (exotest.video.avc): + buffers.length = 31 + buffers[0] = length 36692, hash D216076E + buffers[1] = length 5312, hash D45D3CA0 + buffers[2] = length 599, hash 1BE7812D + buffers[3] = length 7735, hash 4490F110 + buffers[4] = length 987, hash 560B5036 + buffers[5] = length 673, hash ED7CD8C7 + buffers[6] = length 523, hash 3020DF50 + buffers[7] = length 6061, hash 736C72B2 + buffers[8] = length 992, hash FE132F23 + buffers[9] = length 623, hash 5B2C1816 + buffers[10] = length 421, hash 742E69C1 + buffers[11] = length 4899, hash F72F86A1 + buffers[12] = length 568, hash 519A8E50 + buffers[13] = length 620, hash 3990AA39 + buffers[14] = length 5450, hash F06EC4AA + buffers[15] = length 1051, hash 92DFA63A + buffers[16] = length 874, hash 69587FB4 + buffers[17] = length 781, hash 36BE495B + buffers[18] = length 4725, hash AC0C8CD3 + buffers[19] = length 1022, hash 5D8BFF34 + buffers[20] = length 790, hash 99413A99 + buffers[21] = length 610, hash 5E129290 + buffers[22] = length 2751, hash 769974CB + buffers[23] = length 745, hash B78A477A + buffers[24] = length 621, hash CF741E7A + buffers[25] = length 505, hash 1DB4894E + buffers[26] = length 1268, hash C15348DC + buffers[27] = length 880, hash C2DE85D0 + buffers[28] = length 530, hash C98BC6A8 + buffers[29] = length 568, hash 4FE5C8EA + buffers[30] = length 0, hash 1