4

我想将 MediaSession 与 exoplayer 一起使用,通过搜索我发现 Exoplayer 已经有 MediaSession 扩展库(https://github.com/google/ExoPlayer/tree/release-v2/extensions/mediasession),但我找不到任何关于如何实现它的好文档。

我已经阅读了谷歌开发人员提供的文档,但对我来说不清楚且难以理解,文档链接是https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer- 82b9619deb2d

谁能帮助我如何使用 Exoplayer 实现 MediaSession 扩展。

编辑:

最后,我能够通过使用上面的链接( https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer-82b9619deb2d)努力实现这一点。

详细信息在下面的答案部分中给出。

4

2 回答 2

10

要将播放器的播放状态映射到媒体会话,您可以执行以下操作(假设在活动中播放视频):

// onCreate()
mediaSession = new MediaSessionCompat(this, getPackageName());
mediaSessionConnector = new MediaSessionConnector(mediaSession)

// onStart() or onResume() according to API level
initializePlayer();
mediaSessionConnector.setPlayer(player, null, null);
mediaSession.setActive(true);

// onPause() or onStop() according to API level
mediaSessionConnector.setPlayer(null, null, null);
mediaSession.setActive(false);
releasePlayer();

有了这个媒体动作,如 ACTION_PLAY、ACTION_PAUSE 等已经被支持。

您可以在另一篇 SOF 帖子中找到更多上下文。

于 2018-01-02T22:15:35.153 回答
1

这是我如何做到的。

首先初始化 MediaSessionCompat、MediaSessionConnector 和 MediaControllerCompat,如下所示。

        private void initMediaSession(){
                ComponentName mediaButtonReceiver = new ComponentName(getApplicationContext(), MediaButtonReceiver.class);
                mMediaSessionCompat = new MediaSessionCompat(getApplicationContext(), "MyMediasession", mediaButtonReceiver, null);
MediaSessionConnector mediaSessionConnector = new MediaSessionConnector(mMediaSessionCompat, mPlaybackController, false);
                mediaSessionConnector.setPlayer(mMediaPlayerManager.getPlayer(), null);
                mMediaControllerCompat = mMediaSessionCompat.getController();
            }

在此 MediaSessionConnector.PlaybackController 中接收所有回调。

private MediaSessionConnector.PlaybackController mPlaybackController = new MediaSessionConnector.PlaybackController() {

            @Override
            public long getSupportedPlaybackActions(@Nullable Player player) {

                long ACTIONS = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PLAY
                        | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_STOP;

                return ACTIONS;
            }

            @Override
            public void onPlay(Player player) {

            }

            @Override
            public void onPause(Player player) {

            }

            @Override
            public void onSeekTo(Player player, long position) {

            }

            @Override
            public void onFastForward(Player player) {

            }

            @Override
            public void onRewind(Player player) {

            }

            @Override
            public void onStop(Player player) {

            }

        };

现在您可以使用 MediaControllerCompat.TransportControls 在单击播放/暂停按钮时发送播放、暂停等事件。

mMediaControllerCompat.getTransportControls().play();//For play
mMediaControllerCompat.getTransportControls().pause();//For pause

在使用 TransportControls 方法时,MediaSessionConnector.PlaybackController 的相应方法也会同时被调用。

于 2018-01-02T12:40:15.107 回答