我有这样的代码:
let punto = sender.locationInView(self.barraVideo).x
let larghezzaImg : Double = Double((self.barraVideoInvisTocco?.frame.width)!)
let percTocco : Double = (100 / larghezzaImg) * Double(punto)
let lunghezzaVideo : Double = Double(CGFloat((avPlayer?.currentItem?.asset.duration.value)!) / CGFloat(1000.0));
let frameRate : Int32 = (avPlayer?.currentItem?.currentTime().timescale)!
let secondo : Float64 = Float64((lunghezzaVideo/100)*percTocco)
print("Val : \(secondo)");
avPlayer?.currentItem?.seekToTime(CMTimeMakeWithSeconds(secondo, frameRate))
avPlayer?.play()
videoInPlay = true;
playPauseBtn!.image = UIImage(named: "iconaPausa.png")!;这样就可以得到seekBar上的x坐标,并查找视频。该代码适用于日志视频,但对于短视频则非常糟糕。当我点击简短的视频时,AVPlayer只在视频的开头或结尾处寻找,而不是在中间。
印刷:
Val : 3.36008475976495
Val : 7.14189817632069
Val : 13.3303201306846
Val : 3.70388597945183
Val : 3.93308679257642
Val : 3.24548435320265
Val : 3.70388597945183
Val : 18.8311396456748
Val : 27.0823689181601
Val : 40.1468152662618
Val : 51.3776551093667
Val : 17.2267339538027
Val : 9.54850671412889
Val : 23.4151559081666
Val : 37.6256063218913val狂欢节给出了我不想寻找的秒的正确值。抱歉英语不好,我是意大利人
发布于 2016-07-21 03:14:42
对于AVPlayer来说,有不同的方式让剧本寻找时间;
player.seekToTime(<#time: CMTime#CMTime#>)对于这种方法,播放器将寻求seekingTime的快速,但不是寻找确切的位置的seekingTime,这意味着将有一些偏移的seekingTime。
苹果公司的博士
使用此方法查找当前播放机项的指定时间。
所寻找的时间可能与指定的效率时间不同。
有关样品的准确查找,请参阅查找时间:公差前:公差后:。
player.seekToTime(<#T##time: CMTime##CMTime#>, completionHandler: <#T##(Bool) -> Void#>)对于这种方法,player将寻求快速的seekingTime,而且,对于偏移量,您可以使用completionHandler进行一些操作。
苹果公司的博士
使用此方法查找当前播放机项的指定时间,并在搜索操作完成时得到通知。
对于仍在处理中的任何先前的搜索请求,将立即使用已完成的参数调用完成处理程序。
设定为不。如果新请求完成,而不被另一个寻求请求或任何其他操作中断,则指定
将调用完成处理程序,并将完成的参数设置为YES。
如果您想要寻找更精确的方法,请使用以下方法来代替
player.seekToTime(<#T##time: CMTime##CMTime#>, toleranceBefore: <#T##CMTime#>, toleranceAfter: <#T##CMTime#>)
player.seekToTime(<#T##time: CMTime##CMTime#>, toleranceBefore: <#T##CMTime#>, toleranceAfter: <#T##CMTime#>, completionHandler: <#T##(Bool) -> Void#>)此方法将允许玩家请求指定的时间,但速度较慢(well..mostly取决于当前媒体)。
苹果公司的博士
使用此方法查找当前播放机项的指定时间。
所寻找的时间将在范围内的时间公差之前,time+toleranceAfter和可能不同的指定时间的效率。
通过kCMTimeZero使toleranceBefore和toleranceAfter都请求准确地查找样本,这可能会导致额外的解码延迟。
传递此方法的前容性:kCMTimePositiveInfinity和后容忍:kCMTimePositiveInfinity与消息传递seekToTime:直接相同。
我注意到你用的电流
avPlayer?.currentItem?.seekToTime(CMTimeMakeWithSeconds(secondo, frameRate))您可以尝试使用此方法来寻找指定的时间(当然,比较慢)。
avPlayer?.currentItem?.seekToTime(CMTimeMakeWithSeconds(secondo, frameRate), toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)希望能帮到你
发布于 2019-03-09 07:07:37
在Swift 4.2和Xcode 10.1中
player?.seek(to: CMTimeMakeWithSeconds(100, preferredTimescale: 1), toleranceBefore: CMTime.zero, toleranceAfter: CMTime.zero)发布于 2018-06-25 13:33:52
这对我有用。关键是将kCMTimeZero放在两个公差字段中。
player.seek(to: CMTimeMakeWithSeconds(value, duration), toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)https://stackoverflow.com/questions/38475702
复制相似问题