【问题标题】:Wrong volume control stream for CastPlayer in a Service服务中 CastPlayer 的音量控制流错误
【发布时间】:2019-04-11 04:14:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android google-cast exoplayer google-cast-sdk


    【解决方案1】:

    我已经确定了问题,原因不是 ExoPlayer 或 Cast 扩展程序中的错误。 CastVolumeControlServiceTest 中的 This commit 解决了这个问题。

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

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

    【讨论】:

      【解决方案2】:

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

      val playbackState = PlaybackStateCompat.Builder()
      .setState(PlaybackStateCompat.STATE_PLAYING, <position>, <playbackSpeed>)
      .build()
      
      mediaSession.setPlaybackState(playbackState)
      
      <send action to cast>
      

      那么您不必将 MediaSession 设置为非活动状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-30
        • 1970-01-01
        相关资源
        最近更新 更多