首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MediaSession扩展ExoPlayer v2.5+

如何使用MediaSession扩展ExoPlayer v2.5+
EN

Stack Overflow用户
提问于 2017-11-06 05:01:08
回答 2查看 5.3K关注 0票数 5

我想在系外播放器中使用MediaSession,通过搜索我发现exoplayer已经有了MediaSession扩展库(https://github.com/google/ExoPlayer/tree/release-v2/extensions/mediasession),但是我无法找到任何关于如何实现这个扩展库的好文档。

我已经阅读过Google developer提供的有关这方面的文档,但对我来说并不清楚,也很难理解,文档链接是https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer-82b9619deb2d

有谁能帮我用Exoplayer实现MediaSession扩展吗?

编辑:

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

详情见下文的答覆部分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-02 12:40:15

我就是这么做的。

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

代码语言:javascript
复制
        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中接收。

代码语言:javascript
复制
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发送事件,如播放,暂停等点击播放/暂停按钮。

代码语言:javascript
复制
mMediaControllerCompat.getTransportControls().play();//For play
mMediaControllerCompat.getTransportControls().pause();//For pause

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

票数 1
EN

Stack Overflow用户

发布于 2018-01-02 22:15:35

要将播放器的播放状态映射到媒体会话,您可以如下所示(假设活动中的视频播放):

代码语言:javascript
复制
// 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等就已经被支持了。

您可以在another SOF post中找到更多的上下文。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47130015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档