Search in sources :

Example 6 with MediaController

use of androidx.media2.session.MediaController in project ExoPlayer by google.

the class SessionCallbackBuilderTest method setFastForwardIncrementMs_withPositiveFastForwardIncrement_fastsForward.

@LargeTest
@Test
public void setFastForwardIncrementMs_withPositiveFastForwardIncrement_fastsForward() throws Exception {
    int testResId = R.raw.video_big_buck_bunny;
    int testDuration = 10_000;
    int tolerance = 100;
    int testSeekPosition = 2_000;
    int testFastForwardIncrementMs = 300;
    TestUtils.loadResource(testResId, sessionPlayerConnector);
    // seekTo() sometimes takes couple of seconds. Disable default timeout behavior.
    try (MediaSession session = createMediaSession(sessionPlayerConnector, new SessionCallbackBuilder(context, sessionPlayerConnector).setFastForwardIncrementMs(testFastForwardIncrementMs).setSeekTimeoutMs(0).build())) {
        try (MediaController controller = createConnectedController(session)) {
            // Prepare first to ensure that seek() works.
            assertSessionResultSuccess(controller.prepare(), PLAYER_STATE_CHANGE_OVER_SESSION_WAIT_TIME_MS);
            assertThat((float) sessionPlayerConnector.getDuration()).isWithin(tolerance).of(testDuration);
            assertSessionResultSuccess(controller.seekTo(testSeekPosition), PLAYER_STATE_CHANGE_OVER_SESSION_WAIT_TIME_MS);
            assertThat((float) sessionPlayerConnector.getCurrentPosition()).isWithin(tolerance).of(testSeekPosition);
            // Test fast-forward
            assertSessionResultSuccess(controller.fastForward(), PLAYER_STATE_CHANGE_OVER_SESSION_WAIT_TIME_MS);
            assertThat((float) sessionPlayerConnector.getCurrentPosition()).isWithin(tolerance).of(testSeekPosition + testFastForwardIncrementMs);
        }
    }
}
Also used : MediaController(androidx.media2.session.MediaController) MediaSession(androidx.media2.session.MediaSession) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test) LargeTest(androidx.test.filters.LargeTest)

Example 7 with MediaController

use of androidx.media2.session.MediaController in project ExoPlayer by google.

the class SessionCallbackBuilderTest method setRewindIncrementMs_withPositiveRewindIncrement_rewinds.

@LargeTest
@Test
public void setRewindIncrementMs_withPositiveRewindIncrement_rewinds() throws Exception {
    int testResId = R.raw.video_big_buck_bunny;
    int testDuration = 10_000;
    int tolerance = 100;
    int testSeekPosition = 2_000;
    int testRewindIncrementMs = 500;
    TestUtils.loadResource(testResId, sessionPlayerConnector);
    // seekTo() sometimes takes couple of seconds. Disable default timeout behavior.
    try (MediaSession session = createMediaSession(sessionPlayerConnector, new SessionCallbackBuilder(context, sessionPlayerConnector).setRewindIncrementMs(testRewindIncrementMs).setSeekTimeoutMs(0).build())) {
        try (MediaController controller = createConnectedController(session)) {
            // Prepare first to ensure that seek() works.
            assertSessionResultSuccess(controller.prepare(), PLAYER_STATE_CHANGE_OVER_SESSION_WAIT_TIME_MS);
            assertThat((float) sessionPlayerConnector.getDuration()).isWithin(tolerance).of(testDuration);
            assertSessionResultSuccess(controller.seekTo(testSeekPosition), PLAYER_STATE_CHANGE_OVER_SESSION_WAIT_TIME_MS);
            assertThat((float) sessionPlayerConnector.getCurrentPosition()).isWithin(tolerance).of(testSeekPosition);
            // Test rewind
            assertSessionResultSuccess(controller.rewind(), PLAYER_STATE_CHANGE_OVER_SESSION_WAIT_TIME_MS);
            assertThat((float) sessionPlayerConnector.getCurrentPosition()).isWithin(tolerance).of(testSeekPosition - testRewindIncrementMs);
        }
    }
}
Also used : MediaController(androidx.media2.session.MediaController) MediaSession(androidx.media2.session.MediaSession) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test) LargeTest(androidx.test.filters.LargeTest)

Example 8 with MediaController

use of androidx.media2.session.MediaController in project ExoPlayer by google.

the class SessionCallbackBuilderTest method setSkipCallback_withSkipForward_receivesOnSkipForward.

@Test
public void setSkipCallback_withSkipForward_receivesOnSkipForward() throws Exception {
    CountDownLatch skipForwardCalledLatch = new CountDownLatch(1);
    SessionCallbackBuilder.SkipCallback skipCallback = new SessionCallbackBuilder.SkipCallback() {

        @Override
        public int onSkipBackward(MediaSession session, MediaSession.ControllerInfo controllerInfo) {
            return SessionResult.RESULT_ERROR_NOT_SUPPORTED;
        }

        @Override
        public int onSkipForward(MediaSession session, MediaSession.ControllerInfo controllerInfo) {
            skipForwardCalledLatch.countDown();
            return SessionResult.RESULT_SUCCESS;
        }
    };
    try (MediaSession session = createMediaSession(sessionPlayerConnector, new SessionCallbackBuilder(context, sessionPlayerConnector).setSkipCallback(skipCallback).build())) {
        try (MediaController controller = createConnectedController(session)) {
            assertSessionResultSuccess(controller.skipForward(), CONTROLLER_COMMAND_WAIT_TIME_MS);
            assertThat(skipForwardCalledLatch.await(0, MILLISECONDS)).isTrue();
        }
    }
}
Also used : MediaController(androidx.media2.session.MediaController) MediaSession(androidx.media2.session.MediaSession) CountDownLatch(java.util.concurrent.CountDownLatch) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test)

Example 9 with MediaController

use of androidx.media2.session.MediaController in project ExoPlayer by google.

the class SessionCallbackBuilderTest method createConnectedController.

private MediaController createConnectedController(MediaSession session, OnConnectedListener onConnectedListener, OnAllowedCommandsChangedListener onAllowedCommandsChangedListener) throws Exception {
    CountDownLatch latch = new CountDownLatch(1);
    MediaController.ControllerCallback callback = new MediaController.ControllerCallback() {

        @Override
        public void onAllowedCommandsChanged(MediaController controller, SessionCommandGroup commands) {
            if (onAllowedCommandsChangedListener != null) {
                onAllowedCommandsChangedListener.onAllowedCommandsChanged(controller, commands);
            }
        }

        @Override
        public void onConnected(MediaController controller, SessionCommandGroup allowedCommands) {
            if (onConnectedListener != null) {
                onConnectedListener.onConnected(controller, allowedCommands);
            }
            latch.countDown();
        }
    };
    MediaController controller = new MediaController.Builder(context).setSessionToken(session.getToken()).setControllerCallback(ContextCompat.getMainExecutor(context), callback).build();
    latch.await();
    return controller;
}
Also used : MediaController(androidx.media2.session.MediaController) SessionCommandGroup(androidx.media2.session.SessionCommandGroup) CountDownLatch(java.util.concurrent.CountDownLatch)

Example 10 with MediaController

use of androidx.media2.session.MediaController in project ExoPlayer by google.

the class SessionCallbackBuilderTest method setMediaItemProvider_withMediaItemProvider_receivesOnCreateMediaItem.

@Test
public void setMediaItemProvider_withMediaItemProvider_receivesOnCreateMediaItem() throws Exception {
    Uri testMediaUri = RawResourceDataSource.buildRawResourceUri(R.raw.audio);
    CountDownLatch providerLatch = new CountDownLatch(1);
    SessionCallbackBuilder.MediaIdMediaItemProvider mediaIdMediaItemProvider = new SessionCallbackBuilder.MediaIdMediaItemProvider();
    SessionCallbackBuilder.MediaItemProvider provider = (session, controllerInfo, mediaId) -> {
        assertThat(mediaId).isEqualTo(testMediaUri.toString());
        providerLatch.countDown();
        return mediaIdMediaItemProvider.onCreateMediaItem(session, controllerInfo, mediaId);
    };
    CountDownLatch currentMediaItemChangedLatch = new CountDownLatch(1);
    sessionPlayerConnector.registerPlayerCallback(executor, new SessionPlayer.PlayerCallback() {

        @Override
        public void onCurrentMediaItemChanged(SessionPlayer player, MediaItem item) {
            MediaMetadata metadata = item.getMetadata();
            assertThat(metadata.getString(MediaMetadata.METADATA_KEY_MEDIA_ID)).isEqualTo(testMediaUri.toString());
            currentMediaItemChangedLatch.countDown();
        }
    });
    try (MediaSession session = createMediaSession(sessionPlayerConnector, new SessionCallbackBuilder(context, sessionPlayerConnector).setMediaItemProvider(provider).build())) {
        try (MediaController controller = createConnectedController(session)) {
            assertSessionResultSuccess(controller.setMediaItem(testMediaUri.toString()), PLAYER_STATE_CHANGE_OVER_SESSION_WAIT_TIME_MS);
            assertThat(providerLatch.await(0, MILLISECONDS)).isTrue();
            assertThat(currentMediaItemChangedLatch.await(CONTROLLER_COMMAND_WAIT_TIME_MS, MILLISECONDS)).isTrue();
        }
    }
}
Also used : Context(android.content.Context) HeartRating(androidx.media2.session.HeartRating) Arrays(java.util.Arrays) Bundle(android.os.Bundle) Uri(android.net.Uri) MediaSession(androidx.media2.session.MediaSession) RunWith(org.junit.runner.RunWith) SessionResult(androidx.media2.session.SessionResult) AndroidJUnit4(androidx.test.ext.junit.runners.AndroidJUnit4) TestUtils.assertPlayerResultSuccess(com.google.android.exoplayer2.ext.media2.TestUtils.assertPlayerResultSuccess) ApplicationProvider(androidx.test.core.app.ApplicationProvider) ArrayList(java.util.ArrayList) Future(java.util.concurrent.Future) SessionCommand(androidx.media2.session.SessionCommand) ContextCompat(androidx.core.content.ContextCompat) LargeTest(androidx.test.filters.LargeTest) Before(org.junit.Before) SessionPlayer(androidx.media2.common.SessionPlayer) MediaMetadata(androidx.media2.common.MediaMetadata) Truth.assertWithMessage(com.google.common.truth.Truth.assertWithMessage) Executor(java.util.concurrent.Executor) TextUtils(android.text.TextUtils) UriMediaItem(androidx.media2.common.UriMediaItem) Test(org.junit.Test) MILLISECONDS(java.util.concurrent.TimeUnit.MILLISECONDS) Truth.assertThat(com.google.common.truth.Truth.assertThat) MediaItem(androidx.media2.common.MediaItem) Rating(androidx.media2.common.Rating) R(com.google.android.exoplayer2.ext.media2.test.R) CountDownLatch(java.util.concurrent.CountDownLatch) SessionCommandGroup(androidx.media2.session.SessionCommandGroup) List(java.util.List) Nullable(androidx.annotation.Nullable) Rule(org.junit.Rule) MediaController(androidx.media2.session.MediaController) RawResourceDataSource(com.google.android.exoplayer2.upstream.RawResourceDataSource) MediaController(androidx.media2.session.MediaController) SessionPlayer(androidx.media2.common.SessionPlayer) CountDownLatch(java.util.concurrent.CountDownLatch) Uri(android.net.Uri) MediaSession(androidx.media2.session.MediaSession) UriMediaItem(androidx.media2.common.UriMediaItem) MediaItem(androidx.media2.common.MediaItem) MediaMetadata(androidx.media2.common.MediaMetadata) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test)

Aggregations

MediaController (androidx.media2.session.MediaController)14 MediaSession (androidx.media2.session.MediaSession)13 LargeTest (androidx.test.filters.LargeTest)13 Test (org.junit.Test)13 CountDownLatch (java.util.concurrent.CountDownLatch)12 SessionCommandGroup (androidx.media2.session.SessionCommandGroup)10 Context (android.content.Context)9 Uri (android.net.Uri)9 Bundle (android.os.Bundle)9 TextUtils (android.text.TextUtils)9 Nullable (androidx.annotation.Nullable)9 ContextCompat (androidx.core.content.ContextCompat)9 MediaItem (androidx.media2.common.MediaItem)9 MediaMetadata (androidx.media2.common.MediaMetadata)9 Rating (androidx.media2.common.Rating)9 SessionPlayer (androidx.media2.common.SessionPlayer)9 UriMediaItem (androidx.media2.common.UriMediaItem)9 HeartRating (androidx.media2.session.HeartRating)9 SessionCommand (androidx.media2.session.SessionCommand)9 SessionResult (androidx.media2.session.SessionResult)9