iOS AVPlayer后退/快进后无法暂停

问题描述 投票:0回答:1

场景

AVPlayer正在播放视频,快退15秒,然后继续播放。AVPlayer已暂停,后退15秒,并保持暂停状态。

我已经尝试过[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];
        }

    }];


}
ios objective-c avplayer
1个回答
0
投票

我猜问题出在内容缓冲之内,因为您要返回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);

    }];


}
© www.soinside.com 2019 - 2024. All rights reserved.