From c02288452b6726408204b338775618aa17eece36 Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 31 Mar 2021 15:17:49 +0100 Subject: [PATCH] Add test for emsg near to end of DASH period The dumped output should include metadata, but doesn't because of Issue: #8710. The fix is in a follow-up change. PiperOrigin-RevId: 366028303 --- .../exoplayer2/e2etest/DashPlaybackTest.java | 23 +++++ .../assets/media/dash/emsg/sample.audio.mp4 | Bin 0 -> 10790 bytes .../test/assets/media/dash/emsg/sample.mpd | 36 +++++++ .../test/assets/playbackdumps/dash/emsg.dump | 94 ++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 testdata/src/test/assets/media/dash/emsg/sample.audio.mp4 create mode 100644 testdata/src/test/assets/media/dash/emsg/sample.mpd create mode 100644 testdata/src/test/assets/playbackdumps/dash/emsg.dump diff --git a/library/dash/src/test/java/com/google/android/exoplayer2/e2etest/DashPlaybackTest.java b/library/dash/src/test/java/com/google/android/exoplayer2/e2etest/DashPlaybackTest.java index 10b3336bc04..372fa076466 100644 --- a/library/dash/src/test/java/com/google/android/exoplayer2/e2etest/DashPlaybackTest.java +++ b/library/dash/src/test/java/com/google/android/exoplayer2/e2etest/DashPlaybackTest.java @@ -73,4 +73,27 @@ public void webvttInMp4() throws Exception { DumpFileAsserts.assertOutput( applicationContext, playbackOutput, "playbackdumps/dash/webvtt-in-mp4.dump"); } + + // https://github.com/google/ExoPlayer/issues/8710 + @Test + public void emsgNearToPeriodBoundary() throws Exception { + Context applicationContext = ApplicationProvider.getApplicationContext(); + CapturingRenderersFactory capturingRenderersFactory = + new CapturingRenderersFactory(applicationContext); + SimpleExoPlayer player = + new SimpleExoPlayer.Builder(applicationContext, capturingRenderersFactory) + .setClock(new FakeClock(/* isAutoAdvancing= */ true)) + .build(); + player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1))); + PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory); + + player.setMediaItem(MediaItem.fromUri("asset:///media/dash/emsg/sample.mpd")); + player.prepare(); + player.play(); + TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED); + player.release(); + + DumpFileAsserts.assertOutput( + applicationContext, playbackOutput, "playbackdumps/dash/emsg.dump"); + } } diff --git a/testdata/src/test/assets/media/dash/emsg/sample.audio.mp4 b/testdata/src/test/assets/media/dash/emsg/sample.audio.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..b642e4c4448cfa2e26b50b3ff16309122a2cb45b GIT binary patch literal 10790 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 a$tPc8?xxo#XO>X`K7XSEb+-WDM*SZhoXA7~ literal 0 HcmV?d00001 diff --git a/testdata/src/test/assets/media/dash/emsg/sample.mpd b/testdata/src/test/assets/media/dash/emsg/sample.mpd new file mode 100644 index 00000000000..56a9207b2eb --- /dev/null +++ b/testdata/src/test/assets/media/dash/emsg/sample.mpd @@ -0,0 +1,36 @@ + + + + + + + + sample.audio.mp4 + + + + + + + + + + + + + + + sample.audio.mp4 + + + + + + + diff --git a/testdata/src/test/assets/playbackdumps/dash/emsg.dump b/testdata/src/test/assets/playbackdumps/dash/emsg.dump new file mode 100644 index 00000000000..7252d070aed --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/dash/emsg.dump @@ -0,0 +1,94 @@ +MediaCodecAdapter (exotest.audio.aac): + buffers.length = 92 + 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 229, hash FFF98DF0 + buffers[44] = length 6, hash 31B22286 + buffers[45] = length 0, hash 1 + buffers[46] = length 23, hash 47DE9131 + buffers[47] = length 6, hash 31EC5206 + buffers[48] = length 148, hash 894A176B + buffers[49] = length 189, hash CEF235A1 + buffers[50] = length 205, hash BBF5F7B0 + buffers[51] = length 210, hash F278B193 + buffers[52] = length 210, hash 82DA1589 + buffers[53] = length 207, hash 5BE231DF + buffers[54] = length 225, hash 18819EE1 + buffers[55] = length 215, hash CA7FA67B + buffers[56] = length 211, hash 581A1C18 + buffers[57] = length 216, hash ADB88187 + buffers[58] = length 229, hash 2E8BA4DC + buffers[59] = length 232, hash 22F0C510 + buffers[60] = length 235, hash 867AD0DC + buffers[61] = length 231, hash 84E823A8 + buffers[62] = length 226, hash 1BEF3A95 + buffers[63] = length 216, hash EAA345AE + buffers[64] = length 229, hash 6957411F + buffers[65] = length 219, hash 41275022 + buffers[66] = length 241, hash 6495DF96 + buffers[67] = length 228, hash 63D95906 + buffers[68] = length 238, hash 34F676F9 + buffers[69] = length 234, hash E5CBC045 + buffers[70] = length 231, hash 5FC43661 + buffers[71] = length 217, hash 682708ED + buffers[72] = length 239, hash D43780FC + buffers[73] = length 243, hash C5E17980 + buffers[74] = length 231, hash AC5837BA + buffers[75] = length 230, hash 169EE895 + buffers[76] = length 238, hash C48FF3F1 + buffers[77] = length 225, hash 531E4599 + buffers[78] = length 232, hash CB3C6B8D + buffers[79] = length 243, hash F8C94C7 + buffers[80] = length 232, hash A646A7D0 + buffers[81] = length 237, hash E8B787A5 + buffers[82] = length 228, hash 3FA7A29F + buffers[83] = length 235, hash B9B33B0A + buffers[84] = length 264, hash 71A4869E + buffers[85] = length 257, hash D049B54C + buffers[86] = length 227, hash 66757231 + buffers[87] = length 227, hash BD374F1B + buffers[88] = length 235, hash 999477F6 + buffers[89] = length 229, hash FFF98DF0 + buffers[90] = length 6, hash 31B22286 + buffers[91] = length 0, hash 1