Möglichkeit ist, dass Sie die AVPlayerItem
's canPlayReverse
oder canPlayFastForward
vor der AVPlayerItem
' s-Eigenschaft status
Änderungen .readToPlay
einlagern möchten. Wenn Sie dies tun, erhalten Sie immer false
.
nicht wie folgt tun:
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")
}
Statt der AVPlayerItem
‚s-Eigenschaft status
beobachten. Folgendes ist der documentation von Apple:
AVPlayerItem Objekte sind dynamisch. Der Wert AVPlayerItem.canPlayFastForward ändert sich zu YES für alle dateibasierten Assets und einige Streaming-basierte Assets (wenn die Quell-Playlist Medien anbietet, die dies zulassen), wenn das Element zur Wiedergabe bereit ist. Der Weg, um benachrichtigt zu werden, wenn der Spieler Gegenstand bereit ist zu spielen, ist durch Beobachtung der Eigenschaft AVPlayerItem.status über Key-Value Observing (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)
Ovveride der observeValue
Methode in derselben Klasse:
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
}
}
}
Vergessen Sie nicht, diese Klasse von songItem Status Beobachter zu entfernen
deinit {
playerItem.removeObserver(self, forKeyPath: "status")
}