Mc.*_*ver 12 iphone xcode ios avplayer swift
我试图AVPlayer通过UISlider搜索来实现流畅的视频清理,似乎Apple有技术问答并解释了如何实现这一点,但我的问题是如何使用此方法并使用UISlider更改播放器当前时间:
stopPlayingAndSeekSmoothlyToTime(newChaseTime:CMTime)
这是我的代码:
//Play Intro Movie
let videoURL = Bundle.main.url(forResource: "intro", withExtension: "mp4")
player = AVPlayer(url:videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.frame
view.layer.addSublayer(playerLayer)
//videoPlayer.play()
view.addSubview(slider)
slider.maximumValue = 0
slider.maximumValue = Float(CMTimeGetSeconds((player.currentItem?.asset.duration)!))
Run Code Online (Sandbox Code Playgroud)
这是Apple示例代码:
func stopPlayingAndSeekSmoothlyToTime(newChaseTime:CMTime)
{
player.pause()
if CMTimeCompare(newChaseTime, chaseTime) != 0
{
chaseTime = newChaseTime;
if !isSeekInProgress
{
trySeekToChaseTime()
}
}
}
func trySeekToChaseTime()
{
if playerCurrentItemStatus == .unknown
{
// wait until item becomes ready (KVO player.currentItem.status)
}
else if playerCurrentItemStatus == .readyToPlay
{
actuallySeekToTime()
}
}
func actuallySeekToTime()
{
isSeekInProgress = true
let seekTimeInProgress = chaseTime
player.seek(to: seekTimeInProgress, toleranceBefore: kCMTimeZero,
toleranceAfter: kCMTimeZero, completionHandler:
{ (isFinished:Bool) -> Void in
if CMTimeCompare(seekTimeInProgress, self.chaseTime) == 0
{
self.isSeekInProgress = false
}
else
{
self.trySeekToChaseTime()
}
})
}
Run Code Online (Sandbox Code Playgroud)
虽然我使用的方法与您不同stopPlayingAndSeekSmoothlyToTime,但我认为我应该帮助您解决玩家的寻找行动。
func sliderValueChanged() {
var timeToSeek = player.currentItem?.asset.duration.seconds
timeToSeek = timeToSeek * Double(slider.value)
player.seek(to: CMTimeMake(Int64(timeToSeek), 1))
}
Run Code Online (Sandbox Code Playgroud)
您也应该将 设置slider.maximumValue为 1。希望这会有所帮助。
注意:请不要忘记处理currentItem可选值。如果是,nil您应该为timeToSeek变量设置值 0 。
在滑块值更改事件中,只需调用
stopPlayingAndSeekSmoothlyToTime(CMTime.init(seconds: (player.currentItem?.asset.duration.seconds)!* slider.value, preferredTimescale: 1000))
苹果的示例代码将更改播放器的当前时间。如果您非常快速地滑动滑块,您还可以调整toleranceBefore 和toleranceAfter。
| 归档时间: |
|
| 查看次数: |
1976 次 |
| 最近记录: |