【问题标题】:Why AVPlayerItem's canPlayFastForward method returns False?为什么 AVPlayerItem 的 canPlayFastForward 方法返回 False?
【发布时间】:2016-04-13 23:16:20
【问题描述】:

我真的很想用 AVFoundation 实现快进和快退。

据我所知,如果 AVPlayerItem 的 canPlayReverse 和 canPlayFastForward 返回 False,我只能用 AVPlayer 播放 0.0 ~ 2.0 速率。

但我需要 -1.0 并且评分超过 2.0。

我的问题是我找不到何时为什么结果为假。

Apple 的文档中没有提及 canPlayFastForward 何时返回 false。

谁能解释何时以及为什么canPlayFastForwardcanPlayReverse的结果是false,我该如何改变真的

【问题讨论】:

  • 战壕报告:我收到了来自canPlaybackFastForward假阴性。它返回 false,但 AVPlayer 可以更快地播放它。
  • KimCrab - 你是否设法让 canPlaybackFastForward 显示为真?

标签: ios avfoundation avplayer


【解决方案1】:

可能是您在AVPlayerItem 的属性status 更改为.readToPlay 之前检查AVPlayerItemcanPlayReversecanPlayFastForward。如果您这样做,您将始终收到false

不要这样做:

import AVFoundation

let anAsset = AVAsset(URL: <#A URL#>)
let playerItem = AVPlayerItem(asset: anAsset)
let canPlayFastForward = playerItem.canPlayFastForward
if (canPlayFastForward){
   print("This line won't execute")
}

改为观察AVPlayerItem 的属性status。以下是来自 Apple 的documentation

AVPlayerItem 对象是动态的。的价值 对于所有基于文件的 AVPlayerItem.canPlayFastForward 将更改为 YES 资产和一些基于流媒体的资产(如果源播放列表提供 允许它的媒体)在项目准备好播放时。这 当播放器项目准备好播放时获得通知的方法是 通过 Key-Value Observing 观察 AVPlayerItem.status 属性 (KVO)。

import AVFoundation
dynamic var songItem:AVPlayerItem! //Make it instance variable

let anAsset = AVAsset(URL: <#A URL#>)
let songItem = AVPlayerItem(asset: anAsset)
playerItem.addObserver(self, forKeyPath: "status", options: .new, context: nil)

在同一个类中覆盖observeValue 方法:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if let status = change?[.newKey] as? Int{
            if(status == AVPlayerItemStatus.readyToPlay.rawValue){
               yourPlayer.rate = 2.0 // or whatever you want
            }
        }

    }

别忘了从 songItem 的状态观察者中移除这个类

deinit {
        playerItem.removeObserver(self, forKeyPath: "status")
    }

【讨论】:

  • 我的 AVPlayer 返回准备好播放,但 canPlayFastForward 仍然返回 false,即使某些视频以 8 倍的速度快进。有什么我想念的吗?
猜你喜欢
  • 1970-01-01
  • 2017-12-09
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2014-06-15
  • 2016-06-30
  • 2018-10-13
相关资源
最近更新 更多