1

我正在使用 ExoPlayer Google Cast 扩展 v2.8.4。使用 CastPlayer 播放内容时,设备的物理音量按钮应控制接收设备的音量。当 CastPlayer 包含在 Activity 中时,这将按预期运行。但是,当 CastPlayer 包含在服务(例如 MediaBrowserServiceCompat)中时,物理音量按钮会更改发送方设备的媒体音量。

我创建了 2 个示例项目来演示该问题:

如下图所示,投射设备音量确实出现在完整音量控制视图中,但当 CastPlayer 处于服务状态时,手机的媒体音量是活动控制流。

有没有办法在服务实现中设置正确的音量控制流?

在此处输入图像描述

4

2 回答 2

2

我已经确定了问题,原因不是 ExoPlayer 或 Cast 扩展中的错误。CastVolumeControlServiceTest中的此提交修复了该问题。

在调试并查看设备日志后,我发现音量键事件被定向到活动的 MediaSession。通过将 MediaSession 设置为非活动状态,音量控制流将控制接收设备,因此解决方案是将 MediaSession 切换为活动/非活动状态,具体取决于当前播放器。

这看起来并不直观,但它确实有效。

于 2018-11-09T16:13:22.340 回答
1

此错误的解决方法是在您将 PendingResult 发送到投射接收器之前将 MediaSession 状态设置为 STATE_PLAYING。

val playbackState = PlaybackStateCompat.Builder()
.setState(PlaybackStateCompat.STATE_PLAYING, <position>, <playbackSpeed>)
.build()

mediaSession.setPlaybackState(playbackState)

<send action to cast>

然后您不必将 MediaSession 设置为非活动状态。

于 2019-05-22T11:38:11.450 回答