iOS AVPlayer无法在倒带/快进后暂停



场景

  • 如果AVPlayer正在播放视频,请倒带15秒,然后继续播放
  • 如果AVPlayer暂停,则倒带15秒并保持暂停状态

问题

调用seekToTime:后,我无法暂停视频。

问题

如何在调用seekToTime后暂停播放器?

我已经尝试了[Avplayer pause]以及将Avplayer.rate设置为0。调用seekToTime后,没有任何内容会停止视频。

我的代码

@property (strong, nonatomic) AVPlayer *player;
.
.
.
@synthesize player
.
.
.
- (IBAction)rewind:(id)sender {
NSLog(@"rewind called");
int secToRewind = DEFAULT_REWIND_SEC;
int time = CMTimeGetSeconds(player.currentTime) - secToRewind;
CMTime newTime = CMTimeMakeWithSeconds(time, 1);
CMTime tolerance = CMTimeMakeWithSeconds(1, 1);
__weak __typeof__(self) weakSelf = self;
int playerRate = player.rate;
[player seekToTime:newTime toleranceBefore: tolerance toleranceAfter: tolerance completionHandler:^(BOOL finished) {
NSLog(@"seekToTime called");
__strong __typeof__(self) strongSelf = weakSelf;
if (playerRate == 0) {
[player pause];
}
}];

}

我想问题出在内容的缓冲范围内,因为你要倒退X(据说是15(秒,这太多了,需要一点时间来缓冲内容。

请尝试以下代码。。。

@property (strong, nonatomic) AVPlayer *player;
.
.
.
@synthesize player
.
.
.
- (IBAction)rewind:(id)sender {
NSLog(@"rewind called");
int secToRewind = DEFAULT_REWIND_SEC;
int time = CMTimeGetSeconds(player.currentTime) - secToRewind;
CMTime newTime = CMTimeMakeWithSeconds(time, 1);
CMTime tolerance = CMTimeMakeWithSeconds(1, 1);
__weak __typeof__(self) weakSelf = self;
int playerRate = player.rate;
[player seekToTime:newTime toleranceBefore: tolerance toleranceAfter: tolerance completionHandler:^(BOOL finished) {

do {
NSLog(@"Successful rewind");
__strong __typeof__(self) strongSelf = weakSelf;
if (playerRate == 0) {
[player playAt:[player currentTime]];
}
} while (completed == true);
}];

}

我找到了导致自动播放的代码。有一个观察员附在球员身上。每当播放器项目处于AVPlayerItemStatusReadyToPlay时,播放器被设置为播放该项目,而不管播放/暂停状态如何。

带有修复的代码

case AVPlayerItemStatusReadyToPlay: {
if ([playButton isSelected]) {
[self.player play];
}

}

最新更新