In Swift ,
fileprivate let seekDuration: Float64 = 5 @IBAction func doForwardJump(_ sender: Any) { guard let duration = player.currentItem?.duration else{ return } let playerCurrentTime = CMTimeGetSeconds(player.currentTime()) let newTime = playerCurrentTime + seekDuration if newTime < CMTimeGetSeconds(duration) { let time2: CMTime = CMTimeMake(Int64(newTime * 1000 as Float64), 1000) player.seek(to: time2) } } @IBAction func doBackwardJump(_ sender: Any) { let playerCurrentTime = CMTimeGetSeconds(player.currentTime()) var newTime = playerCurrentTime - seekDuration if newTime < 0 { newTime = 0 } let time2: CMTime = CMTimeMake(Int64(newTime * 1000 as Float64), 1000) player.seek(to: time2) }
In Objective-C,
#define seekDuration (float)5 - (IBAction)backwardButtonAction:(UIButton *)sender { float playerCurrentTime = [self getCurrentTime]; float newTime = playerCurrentTime - seekDuration; if (newTime < 0) { newTime = 0; } CMTime time = CMTimeMake(newTime*1000, 1000); [self.player seekToTime:time completionHandler:^(BOOL finished) { dispatch_async(dispatch_get_main_queue(), ^{ playerSliderisScrubbing = NO; }); }]; } - (IBAction)forwardButtonAction:(UIButton *)sender { float duration = [self getPlayerDuration]; float playerCurrentTime = [self getCurrentTime]; float newTime = playerCurrentTime + seekDuration; if (newTime < duration) { CMTime time = CMTimeMake(newTime*1000, 1000); [self.player seekToTime:time completionHandler:^(BOOL finished) { dispatch_async(dispatch_get_main_queue(), ^{ playerSliderisScrubbing = NO; }); }]; } } - (float)getCurrentTime { float seconds = 0; if (_player) { seconds = CMTimeGetSeconds([_player currentTime]); } return seconds; } - (float)getPlayerDuration { float seconds = 0; if (_player) { seconds = CMTimeGetSeconds([[_player currentItem] duration]); } return seconds; }
source share