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 的无缝快进和倒放.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle rman备份和恢复数据库,
- 下一篇: 计算机无法连接到桌面,Win7系统桌面天