AVPlayer – 快速向后/向前stream

这是我在viewDidLoad中的代码:

AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://groove.wavestreamer.com:7321/listen.pls?sid=1"]]; [playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:nil]; music = [[AVPlayer playerWithPlayerItem:playerItem] retain]; [music play]; 

我的问题:
我怎样才能创build一个button,快速向前/快速倒退stream5秒,当它被按下?

谢谢您的回答… :)

编辑:如何添加到我目前的时间…

 CMTime currentTime = music.currentTime; 

… 5秒钟?

使用AVPlayer方法seekToTime

 AVPlayer *player=..; [player seekToTime:time toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; 

这里是一个参考

希望能帮助到你

在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) - seekDuration) { 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) } 

在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 - seekDuration)) { 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; } 

您可以使用avPlayer.rate快退/前进

率:1.0正常0.0暂停

但首先,你应该检查avPlayerItem是否可以做你的一个动作

欲了解更多信息: https : //developer.apple.com/LIBRARY/ios/documentation/AVFoundation/Reference/AVPlayer_Class/index.html#//apple_ref/occ/instp/AVPlayer/rate

Interesting Posts