mirror of
https://github.com/samsonjs/media.git
synced 2026-03-28 09:55:48 +00:00
ServerSideAdInsertionMediaSourceTest adjustments
Some adjustments to the test to make it more correct and prevent it from becoming flaky: - Use separate output dump files per test setup. Once we add more data to these files, they are not guaranteed to be the same anymore. - Use a seek position that is actually behind the midroll as described in the test setup. - Change ad insertion position to ensure the ad group duration doesn't exceed the underlying media duration. - Add a wait for isLoading to ensure the late insertion of an ad group happens consistently at the same processing stage. PiperOrigin-RevId: 546825183
This commit is contained in:
parent
ddd000128f
commit
d6f20455ac
4 changed files with 169 additions and 6 deletions
|
|
@ -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<ServerSideAdInsertionMediaSource> 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();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
Loading…
Reference in a new issue