即使在队列中有项目时,skipPrevious和skipNext按钮也不起作用Google Cast iOS Sender SDK v4.3.5及更高版本

myo*_*ost 5 ios google-cast chromecast swift google-cast-sdk

我有一个用于视频流的iOS发送器应用程序,该应用程序支持排队并使用skipPrevious和skipNext按钮在队列中的视频之间向前和向后跳过。该应用程序可与google cast sdk v4.3.3和v4.3.4一起使用,但我需要更新sdk以支持iOS 13的更改。当我将sdk更新到v4.4.4时,即使我既可以在接收器上看到也可以通过在发送器应用程序中看到队列中有项目,但ExpandedMediaControlsViewController上的skipPrevious和skipNext按钮类型始终显示为灰色。在sdk v4.3.5和更高版本的所有版本中,按钮均显示为灰色。

我查看了Google Chromecast开发人员文档,并且不建议使用skipPrevious和skipNext按钮类型,并说如果队列中有内容,它们应该自动更新。我尝试修改Google的iOS发送器应用程序教程代码,以将30秒的ffw和rwd按钮更改为“跳过”按钮,并且在将项目添加到队列并播放后具有相同的结果。

关于3月在此处创建的类似问题,还有另一个未解决的问题:skipNext skipPrevious Google Cast变灰了

我在我的castViewController类内部使用了一个更新函数,将expandedMediaControls更改为skipPrevious和skipNext类型。当我的castViewController初始化时,我调用此方法

private func updatePlayerMediaControls() {
  GCKCastContext.sharedInstance().defaultExpandedMediaControlsViewController.setButtonType(.skipPrevious, at: 1)
  GCKCastContext.sharedInstance().defaultExpandedMediaControlsViewController.setButtonType(.skipNext, at: 2)
} 
Run Code Online (Sandbox Code Playgroud)

我使用遵循此逻辑的函数来投射视频或将视频添加到队列中。在将视频添加到演员表之后,我会立即通过将bool设置为true将下一个视频添加到队列中。

func loadSelectedItem(_ media: VideoMediaInformation, byAppending appending: Bool) {
  if let remoteMediaClient = sessionManager.currentCastSession?.remoteMediaClient {
    let mediaQueueItemBuilder = GCKMediaQueueItemBuilder()
    mediaQueueItemBuilder.mediaInformation = media.mediaInfo
    mediaQueueItemBuilder.autoplay = true
    mediaQueueItemBuilder.preloadTime = 1.0
    let queueOptions = GCKMediaQueueLoadOptions()
    queueOptions.playPosition = media.currentTime ?? 0.0
    if appending {
      let request = remoteMediaClient.queueInsert(mediaQueueItemBuilder.build(), beforeItemWithID: kGCKMediaQueueInvalidItemID)
      request.delegate = self
    } else {
      let request = remoteMediaClient.queueLoad([mediaQueueItemBuilder.build()], with: queueOptions))
      request.delegate = self
  GCKCastContext.sharedInstance().presentDefaultExpandedMediaControls()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望,如果队列中有项目,则用户可以使用skipNext和skipPrevious在有剧集时向前或向后跳过。实际结果是这些按钮始终处于禁用状态。

小智 1

我对这个问题进行了广泛的研究。我遇到了完全相同的事情,以及问题中提到的问题。我尝试将库完全更新为4.6.1. 由于这个包是一个静态库,我无法检查原因。但好消息!我找到了合适的解决方法。该解决方案没有考虑队列中是否有可用的东西可以向前或向后移动,但它满足了我的需求。除了上面的设置之外,我还可以使用自定义按钮来触发向后或向前跳跃。

@IBAction func playPressed(_ sender: UIButton) {
    // Create and add custom previous button
    let prevButton = UIButton()
    prevButton.setImage(Icon.mediaPlayerPrevious, for: .normal)
    prevButton.addTarget(self, action: #selector(castButtonPrevAction), for: .touchUpInside)
    GCKCastContext.sharedInstance()
        .defaultExpandedMediaControlsViewController
        .setButtonType(.custom, at: 0)
    GCKCastContext.sharedInstance()
        .defaultExpandedMediaControlsViewController
        .setCustomButton(prevButton, at: 0)
            
    // Create and add custom next button
    let nextButton = UIButton()
    nextButton.setImage(Icon.mediaPlayerNext, for: .normal)
    nextButton.addTarget(self, action: #selector(castButtonNextAction), for: .touchUpInside)
    GCKCastContext.sharedInstance()
        .defaultExpandedMediaControlsViewController
        .setButtonType(.custom, at: 3)
    GCKCastContext.sharedInstance()
        .defaultExpandedMediaControlsViewController
        .setCustomButton(nextButton, at: 3)

        
    // Presents the screen            
    GCKCastContext.sharedInstance().presentDefaultExpandedMediaControls()
}

// Casting custom button actions
@objc func castButtonNextAction(sender: UIButton!) {
    GMCastChannel.shared.remoteMediaClient?.queueNextItem()
}
@objc func castButtonPrevAction(sender: UIButton!) {
    GMCastChannel.shared.remoteMediaClient?.queuePreviousItem()
}
Run Code Online (Sandbox Code Playgroud)