mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Fix flakiness in HlsPlaybackTest and DashPlaybackTest
The tests became more flaky after 76e4abe428
, likely because playback
was able to start slightly earlier, exaggerating any existing race
conditions. Fix the flakiness by letting all tests with subtitle
parsing wait until all data is fully loaded before starting to play.
PiperOrigin-RevId: 693380656
This commit is contained in:
parent
28b75f7d29
commit
d38aba92fe
@ -94,8 +94,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -132,6 +135,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player)
|
||||||
|
.ignoringNonFatalErrors()
|
||||||
|
.untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).ignoringNonFatalErrors().untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
@ -169,6 +177,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player)
|
||||||
|
.ignoringNonFatalErrors()
|
||||||
|
.untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).ignoringNonFatalErrors().untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
@ -204,8 +217,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-ttml/sample.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-ttml/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -233,8 +249,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/webvtt-in-mp4/sample.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/webvtt-in-mp4/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -261,8 +280,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -299,6 +321,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player)
|
||||||
|
.ignoringNonFatalErrors()
|
||||||
|
.untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).ignoringNonFatalErrors().untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
@ -336,6 +363,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player)
|
||||||
|
.ignoringNonFatalErrors()
|
||||||
|
.untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).ignoringNonFatalErrors().untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
@ -378,8 +410,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/cea608/manifest.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/cea608/manifest.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -416,8 +451,11 @@ public final class DashPlaybackTest {
|
|||||||
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/cea608/manifest.mpd"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/cea608/manifest.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -651,8 +689,11 @@ public final class DashPlaybackTest {
|
|||||||
player.setMediaItem(
|
player.setMediaItem(
|
||||||
MediaItem.fromUri("asset:///media/dash/multi-period-with-offset/sample.mpd"));
|
MediaItem.fromUri("asset:///media/dash/multi-period-with-offset/sample.mpd"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered to avoid flakiness from loading second period too late.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
|
@ -84,8 +84,11 @@ public final class HlsPlaybackTest {
|
|||||||
player.setMediaItem(
|
player.setMediaItem(
|
||||||
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -120,6 +123,11 @@ public final class HlsPlaybackTest {
|
|||||||
player.setMediaItem(
|
player.setMediaItem(
|
||||||
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player)
|
||||||
|
.ignoringNonFatalErrors()
|
||||||
|
.untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).ignoringNonFatalErrors().untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
@ -155,6 +163,11 @@ public final class HlsPlaybackTest {
|
|||||||
player.setMediaItem(
|
player.setMediaItem(
|
||||||
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player)
|
||||||
|
.ignoringNonFatalErrors()
|
||||||
|
.untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).ignoringNonFatalErrors().untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
@ -184,8 +197,11 @@ public final class HlsPlaybackTest {
|
|||||||
player.setMediaItem(
|
player.setMediaItem(
|
||||||
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -219,6 +235,11 @@ public final class HlsPlaybackTest {
|
|||||||
player.setMediaItem(
|
player.setMediaItem(
|
||||||
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player)
|
||||||
|
.ignoringNonFatalErrors()
|
||||||
|
.untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).ignoringNonFatalErrors().untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
@ -253,6 +274,11 @@ public final class HlsPlaybackTest {
|
|||||||
player.setMediaItem(
|
player.setMediaItem(
|
||||||
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player)
|
||||||
|
.ignoringNonFatalErrors()
|
||||||
|
.untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).ignoringNonFatalErrors().untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
@ -291,8 +317,11 @@ public final class HlsPlaybackTest {
|
|||||||
|
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/hls/cea608/manifest.m3u8"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/hls/cea608/manifest.m3u8"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
@ -325,8 +354,11 @@ public final class HlsPlaybackTest {
|
|||||||
|
|
||||||
player.setMediaItem(MediaItem.fromUri("asset:///media/hls/cea608/manifest.m3u8"));
|
player.setMediaItem(MediaItem.fromUri("asset:///media/hls/cea608/manifest.m3u8"));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||||
|
run(player).untilBackgroundThreadCondition(() -> player.getBufferedPercentage() == 100);
|
||||||
|
run(player).untilLoadingIs(false);
|
||||||
player.play();
|
player.play();
|
||||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
run(player).untilState(Player.STATE_ENDED);
|
||||||
player.release();
|
player.release();
|
||||||
surface.release();
|
surface.release();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user