use*_*169 22 uislider ios avplayer swift3
您好我已将UISlider最小值设置为0.00.然后我以这种方式设置它的最大值.
self.viewPlayer.layer.addSublayer(playerLayer)
let duration : CMTime = avPlayer.avPlayer.currentItem!.asset.duration
let seconds : Float64 = CMTimeGetSeconds(duration)
sliderBar.maximumValue=Float(seconds)
sliderBar!.isContinuous = false
sliderBar!.tintColor = UIColor.green
Run Code Online (Sandbox Code Playgroud)
但我得到了这个例外
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to set a slider's minimumValue (0.000000) to be larger than the maximumValue (nan)'
enter code here
Run Code Online (Sandbox Code Playgroud)
我知道在prepareForPlay()实际播放之后需要一些时间来真正播放视频.那么如何才能检测到播放器何时真正开始播放视频?请帮我.谢谢
Ren*_*tus 21
从iOS 10开始,您可以观察timeControlStatus到AVPlayer的属性.它可以.playing.
检查代码:
private func setupAVPlayer() {
avPlayer.addObserver(self, forKeyPath: "status", options: [.old, .new], context: nil)
if #available(iOS 10.0, *) {
avPlayer.addObserver(self, forKeyPath: "timeControlStatus", options: [.old, .new], context: nil)
} else {
avPlayer.addObserver(self, forKeyPath: "rate", options: [.old, .new], context: nil)
}
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if object as AnyObject? === avPlayer {
if keyPath == "status" {
if avPlayer.status == .readyToPlay {
avPlayer.play()
}
} else if keyPath == "timeControlStatus" {
if #available(iOS 10.0, *) {
if avPlayer.timeControlStatus == .playing {
videoCell?.muteButton.isHidden = false
} else {
videoCell?.muteButton.isHidden = true
}
}
} else if keyPath == "rate" {
if avPlayer.rate > 0 {
videoCell?.muteButton.isHidden = false
} else {
videoCell?.muteButton.isHidden = true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Raj*_*jat 11
您可以像这样在AVPlayer的对象上添加观察者
player.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.new, context: nil)
Run Code Online (Sandbox Code Playgroud)
您可以像这样检查AVPlayer的状态变化
func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutableRawPointer) {
if keyPath == "status" {
print(player.status)
}
}
Run Code Online (Sandbox Code Playgroud)
Sko*_*oua 10
以下是我在视频开始时实际知道的事情(而不是它刚刚准备开始时).
斯威夫特4
player = AVPlayer(url: URL(fileURLWithPath: path))
player.addObserver(self, forKeyPath: "rate", options: NSKeyValueObservingOptions.new, context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "rate" {
if player.rate > 0 {
print("video started")
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12197 次 |
| 最近记录: |