swift - 如何检测 tvOS Remote 上的音量按钮按下

标签 swift avplayer tvos avqueueplayer

我试图找到一种观察播放器的方法,以便我可以检测到用户何时提高或降低 Apple TV 的音量。我已经设法通过使用以下方法使其适用于 iOS:


 var audioSession: AVAudioSession?

 audioSession?.addObserver(self, forKeyPath: "outputVolume", options: [.new], context: &videoPlayerViewControllerKVOContext)


 if keyPath == "outputVolume" {
        guard let mute = (change?[NSKeyValueChangeKey.newKey] as? NSNumber)?.floatValue else {
            return
        }
        
        var isMuted = false
        
        if (mute == 0) && (!player.isMuted) {
            isMuted = true
        } else if (mute.isZero) && (player.isMuted) {
            isMuted = false
        }
        
    }

但这不适用于 tvOS。有没有办法在 tvOS 上执行此操作?

最佳答案

不清楚所有其他代码,但您必须保留对创建的观察者的引用。

这是可能的解决方案(使用 Xcode 12.1 测试)

private var observer: NSKeyValueObservation?

// ... other code

self.observer = audioSession?.observe(\.outputVolume) { [weak self] (audioSession, _) in
    guard let `self` = self else { return }
    let mute = audioSession.outputVolume
    
    var isMuted = false
    if (mute == 0) && (!self.player.isMuted) {
        isMuted = true
    } else if (mute.isZero) && (self.player.isMuted) {
        isMuted = false
    }
    
    // do what's needed here with `isMuted`
}

关于swift - 如何检测 tvOS Remote 上的音量按钮按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65089217/

相关文章:

swift - 使用 XLPagerTabStrip 时出现问题

ios - 当单元格移出屏幕时如何停止单元格中的 AVPlayer 播放

swift - 如何在 Swift 中删除 AVPlayerViewController 上的双击缩放功能

swift - 使用 AVPlayer Swift 2 进行 slider 控制

ios - 在 Swift 4 中升级后未调用 textFieldShouldReturn

ios - 如何解决 Swift 中的这种类型不明确的错误?

apple-tv - 如何更新 Apple TV Developer Kit?无法通过 iTunes 使用 tvOS 软件

tvos - tvOS 上的 UIControl 会产生哪些事件?

swift - Swift 中的 IMAAdsLoader 错误但不是 Objective C

ios - swift分享功能在iphone中有效,但在ipad2中出错