Kim*_*rab 7 avfoundation ios avplayer
我真的想用AVFoundation实现快进和反向播放.
据我所知,如果AVPlayerItem的canPlayReverse和canPlayFastForward返回False,我只能用AVPlayer播放0.0~2.0的速率.
但我需要-1.0并且速率超过2.0.
我的问题是我无法找到结果何时以及为何结果为假.
没有提及canPlayFastForward何时在Apple的doc上返回false.
任何人都可以解释何时以及为什么canPlayFastForward和canPlayReverse的结果是错误的,如何将其更改为true?
可能是您正在检查AVPlayerItem'scanPlayReverse或在's 属性更改canPlayFastForward为 之前。如果你这样做,你总会得到。AVPlayerItemstatus.readToPlayfalse
不要这样做:
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")
}
Run Code Online (Sandbox Code Playgroud)
相反,观察其AVPlayerItem属性status。以下是苹果公司的文档:
AVPlayerItem 对象是动态的。当项目准备好播放时,对于所有基于文件的资源和一些基于流的资源(如果源播放列表提供允许的媒体),AVPlayerItem.canPlayFastForward 的值将更改为 YES。当播放器项目准备好播放时获得通知的方法是通过键值观察 (KVO) 观察 AVPlayerItem.status 属性。
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)
Run Code Online (Sandbox Code Playgroud)
覆盖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
}
}
}
Run Code Online (Sandbox Code Playgroud)
不要忘记从 SongItem 的状态观察器中删除此类
deinit {
playerItem.removeObserver(self, forKeyPath: "status")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |