欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

html倒放播放器,AVPlayer 的无缝快进和倒放.

发布时间:2023/12/31 编程问答 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 html倒放播放器,AVPlayer 的无缝快进和倒放. 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

最近研究一个AVPlayer seekTime方法的 问题.这个方法虽然可以跳到指定的帧,但是如果你用拖动框去调动这个方法,你会发现这个方法会延迟.

我们查看系统的播放器,你会发现他是不会延迟.拖到哪就能显示当前帧.

我们查找API发现seekTime 还有一个

- (void)seekToTime:(CMTime)time toleranceBefore:(CMTime)toleranceBefore toleranceAfter:(CMTime)toleranceAfter completionHandler:(void (^)(BOOL finished))completionHandler

这个方法发现官方的解释是:

在指定的时间范围内移动回放光标,并在查找操作完成或中断时调用指定的块。

使用此方法可以查找当前播放器项目的指定时间,并在查找操作完成时收到通知。

要求的时间将在[时间容差前,时间+容差后]范围内,并且可能与指定的效率时间不同。

将kCMTimeZero传递给toleranceBefore和toleranceAfter以请求采样精确搜索,这可能会导致额外的解码延迟。

使用beforeTolerance消息传递此方法:kCMTimePositiveInfinity和afterTolerance:kCMTimePositiveInfinity与消息传递seekToTime:直接相同。

任何之前正在处理的查找请求的完成处理程序将立即调用,并将完成的参数设置为NO。如果新的

请求完成而不被另一个查找请求或任何其他操作中断,指定的完成处理程序将被调用

完成参数设置为YES。

没错这个就是我们要找个.但是当你换成这个方法的时候,你会发现,没什么**用.

我们深究官方的解释我们要理解

任何之前正在处理的查找请求的完成处理程序将立即调用,并将完成的参数设置为NO。如果新的

请求完成而不被另一个查找请求或任何其他操作中断,指定的完成处理程序将被调用

完成参数设置为YES。

这几句话.是说completionHandler 没有完成的情况下不调用这个方法.如果你不间断调用seekTime的 话,则会造成前个seekTime操作的中断.我们只需要加个BOOL值就可以了.

上代码

- (void)processMovie:(NSURL*)assetURL{

AVAsset *asset = [AVAsset assetWithURL:assetURL];

float totalTime = CMTimeGetSeconds(asset.duration);

process = self.selectView.frame.origin.x / self.selectImageView.frame.size.width;

NSLog(@"%f",process);

[self.player pause];

CMTime newChaseTime = CMTimeMake(totalTime * process * asset.duration.timescale, asset.duration.timescale);

if (CMTIME_COMPARE_INLINE(newChaseTime, !=, chaseTime)) {

chaseTime = newChaseTime;

if (!isSeekInProgress) {

[self trySeekToChaseTime];

}

}

[self onVideoPlayerProgressUpdate];

}

- (void)trySeekToChaseTime{

if (_player.currentItem.status == AVPlayerItemStatusUnknown) {

} else if (_player.currentItem.status == AVPlayerItemStatusReadyToPlay){

[self actuallySeekToTime];

}

}

- (void)actuallySeekToTime{

isSeekInProgress = YES;

CMTime seekTimeInProgress = chaseTime;

[self.player seekToTime:seekTimeInProgress

toleranceBefore:kCMTimeZero

toleranceAfter:kCMTimeZero

completionHandler:^(BOOL finished) {

if (CMTIME_COMPARE_INLINE(seekTimeInProgress, ==, chaseTime)) {

isSeekInProgress = NO;

} else {

[self trySeekToChaseTime];

}

}];

}

效果:

原创文章转载需获授权并注明出处

请在后台留言联系转载

总结

以上是生活随笔为你收集整理的html倒放播放器,AVPlayer 的无缝快进和倒放.的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。