如何使用 ExoPlayer v2.5+ 的 MediaSession 扩展
How to use MediaSession extension for ExoPlayer v2.5+
我想将 MediaSession 与 exoplayer 一起使用,通过搜索我发现 Exoplayer 已经有 MediaSession 扩展库(https://github.com/google/ExoPlayer/tree/release-v2/extensions/mediasession),但我找不到任何关于如何实现它的好文档。
我已经阅读了 Google 开发人员提供的关于此的文档,但对我来说不清楚且难以理解,文档 link 是 https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer-82b9619deb2d
任何人都可以帮助我如何使用 Exoplayer 实现 MediaSession 扩展。
已编辑:
最后我通过努力使用上面的 link (https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer-82b9619deb2d) 实现了这个。
详情在下面的回答部分给出。
这是我的做法。
首先初始化 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 在单击 Play/Pause 按钮时发送播放、暂停等事件。
mMediaControllerCompat.getTransportControls().play();//For play
mMediaControllerCompat.getTransportControls().pause();//For pause
在使用 TransportControls 方法的同时,MediaSessionConnector.PlaybackController 对应的方法也会被同时调用。
要将播放器的播放状态映射到媒体会话,您可以执行以下操作(假设视频在 activity 中播放):
// 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 等媒体操作。
您可以在 中找到更多上下文。
我想将 MediaSession 与 exoplayer 一起使用,通过搜索我发现 Exoplayer 已经有 MediaSession 扩展库(https://github.com/google/ExoPlayer/tree/release-v2/extensions/mediasession),但我找不到任何关于如何实现它的好文档。
我已经阅读了 Google 开发人员提供的关于此的文档,但对我来说不清楚且难以理解,文档 link 是 https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer-82b9619deb2d
任何人都可以帮助我如何使用 Exoplayer 实现 MediaSession 扩展。
已编辑:
最后我通过努力使用上面的 link (https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer-82b9619deb2d) 实现了这个。
详情在下面的回答部分给出。
这是我的做法。
首先初始化 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 在单击 Play/Pause 按钮时发送播放、暂停等事件。
mMediaControllerCompat.getTransportControls().play();//For play
mMediaControllerCompat.getTransportControls().pause();//For pause
在使用 TransportControls 方法的同时,MediaSessionConnector.PlaybackController 对应的方法也会被同时调用。
要将播放器的播放状态映射到媒体会话,您可以执行以下操作(假设视频在 activity 中播放):
// 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 等媒体操作。
您可以在