use of com.google.android.exoplayer2.ExoPlayer in project ExoPlayer by google.
the class DefaultDrmSessionManagerTest method managerReleasedBeforeSession_keepaliveEnabled_managerOnlyReleasesOneKeepaliveReference.
// https://github.com/google/ExoPlayer/issues/9193
@Test(timeout = 10_000)
public void managerReleasedBeforeSession_keepaliveEnabled_managerOnlyReleasesOneKeepaliveReference() throws Exception {
FakeExoMediaDrm.LicenseServer licenseServer = FakeExoMediaDrm.LicenseServer.allowingSchemeDatas(DRM_SCHEME_DATAS);
FakeExoMediaDrm exoMediaDrm = new FakeExoMediaDrm.Builder().build();
DrmSessionManager drmSessionManager = new DefaultDrmSessionManager.Builder().setUuidAndExoMediaDrmProvider(DRM_SCHEME_UUID, new AppManagedProvider(exoMediaDrm)).setSessionKeepaliveMs(10_000).build(/* mediaDrmCallback= */
licenseServer);
drmSessionManager.prepare();
drmSessionManager.setPlayer(/* playbackLooper= */
Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession = checkNotNull(drmSessionManager.acquireSession(/* eventDispatcher= */
null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
// Release the manager (there's still an explicit reference to the session from acquireSession).
// This should immediately release the manager's internal keepalive session reference.
drmSessionManager.release();
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
// Ensure the manager doesn't release a *second* keepalive session reference after the timer
// expires.
ShadowLooper.idleMainLooper(10, SECONDS);
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
// Release the explicit session reference.
drmSession.release(/* eventDispatcher= */
null);
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_RELEASED);
}
use of com.google.android.exoplayer2.ExoPlayer in project ExoPlayer by google.
the class EndToEndGaplessTest method testPlayback_twoIdenticalMp3Files.
@Test
public void testPlayback_twoIdenticalMp3Files() throws Exception {
ExoPlayer player = new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).setClock(new FakeClock(/* isAutoAdvancing= */
true)).build();
player.setMediaItems(ImmutableList.of(MediaItem.fromUri("asset:///media/mp3/test.mp3"), MediaItem.fromUri("asset:///media/mp3/test.mp3")));
player.prepare();
player.play();
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
Format playerAudioFormat = player.getAudioFormat();
assertThat(playerAudioFormat).isNotNull();
int bytesPerFrame = audioTrackListener.getAudioTrackOutputFormat().getFrameSizeInBytes();
int paddingBytes = max(0, playerAudioFormat.encoderPadding) * bytesPerFrame;
int delayBytes = max(0, playerAudioFormat.encoderDelay) * bytesPerFrame;
assertThat(paddingBytes).isEqualTo(2808);
assertThat(delayBytes).isEqualTo(1152);
byte[] decoderOutputBytes = Bytes.concat(mp3Decoder.getAllOutputBytes().toArray(new byte[0][]));
int bytesPerAudioFile = decoderOutputBytes.length / 2;
assertThat(bytesPerAudioFile).isEqualTo(92160);
byte[] expectedTrimmedByteContent = Bytes.concat(// Track one is trimmed at its beginning and its end.
Arrays.copyOfRange(decoderOutputBytes, delayBytes, bytesPerAudioFile - paddingBytes), // Track two is only trimmed at its beginning, but not its end.
Arrays.copyOfRange(decoderOutputBytes, bytesPerAudioFile + delayBytes, decoderOutputBytes.length));
byte[] audioTrackReceivedBytes = audioTrackListener.getAllReceivedBytes();
assertThat(audioTrackReceivedBytes).isEqualTo(expectedTrimmedByteContent);
}
use of com.google.android.exoplayer2.ExoPlayer in project ExoPlayer by google.
the class MkvPlaybackTest method test.
@Test
public void test() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory capturingRenderersFactory = new CapturingRenderersFactory(applicationContext);
ExoPlayer player = new ExoPlayer.Builder(applicationContext, capturingRenderersFactory).setClock(new FakeClock(/* isAutoAdvancing= */
true)).build();
// subtitle output is not flaky.
for (int textRendererIndex = 0; textRendererIndex < player.getRendererCount(); textRendererIndex++) {
if (player.getRendererType(textRendererIndex) == C.TRACK_TYPE_TEXT) {
player.setTrackSelectionParameters(new DefaultTrackSelector.ParametersBuilder(applicationContext).setRendererDisabled(textRendererIndex, /* disabled= */
true).build());
break;
}
}
player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */
1)));
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
player.setMediaItem(MediaItem.fromUri("asset:///media/mkv/" + inputFile));
player.prepare();
player.play();
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
DumpFileAsserts.assertOutput(applicationContext, playbackOutput, "playbackdumps/mkv/" + inputFile + ".dump");
}
use of com.google.android.exoplayer2.ExoPlayer in project ExoPlayer by google.
the class Mp4PlaybackTest method test.
@Test
public void test() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory renderersFactory = new CapturingRenderersFactory(applicationContext);
ExoPlayer player = new ExoPlayer.Builder(applicationContext, renderersFactory).setClock(new FakeClock(/* isAutoAdvancing= */
true)).build();
player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */
1)));
PlaybackOutput playbackOutput = PlaybackOutput.register(player, renderersFactory);
player.setMediaItem(MediaItem.fromUri("asset:///media/mp4/" + inputFile));
player.prepare();
player.play();
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
DumpFileAsserts.assertOutput(applicationContext, playbackOutput, "playbackdumps/mp4/" + inputFile + ".dump");
}
use of com.google.android.exoplayer2.ExoPlayer in project ExoPlayer by google.
the class PlaylistPlaybackTest method test_bypassOffThenOn.
@Test
public void test_bypassOffThenOn() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory capturingRenderersFactory = new CapturingRenderersFactory(applicationContext);
ExoPlayer player = new ExoPlayer.Builder(applicationContext, capturingRenderersFactory).setClock(new FakeClock(/* isAutoAdvancing= */
true)).build();
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
player.addMediaItem(MediaItem.fromUri("asset:///media/mka/bear-opus.mka"));
player.addMediaItem(MediaItem.fromUri("asset:///media/wav/sample.wav"));
player.prepare();
player.play();
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
DumpFileAsserts.assertOutput(applicationContext, playbackOutput, "playbackdumps/playlists/bypass-off-then-on.dump");
}
Aggregations