可能性は、あなたが.readToPlay
秒プロパティstatus
変更「AVPlayerItem
前のcanPlayReverse
またはcanPlayFastForward
」AVPlayerItem
チェックされています。そうしている場合は、常に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に変更されます。 プレイヤーアイテムの再生準備が整ったときに通知を受ける方法は、 (KVO)を介してAVPlayerItem.statusプロパティを監視することです( )。同じクラスのobserveValue
方法Ovveride
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)
:
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")
}