如何禁用在 iOS AVPlayerViewController 上搜索?

How to disable seeking on iOS AVPlayerViewController?

在 tvOS 上,如果我想允许播放/暂停但禁用搜索,我可以设置 avPlayerViewController.requiresLinearPlayback = YES。但是 属性 在 iOS 中不存在。我如何在 iOS 上完成同样的事情?我不想使用 avPlayerViewController.showsPlaybackControls = NO 因为这会阻止播放/暂停。我想禁用搜索。此外,我不完全确定 avPlayerViewController.showsPlaybackControls = NO 是否会完全阻止搜索,因为有人可以插入带有控制按钮的耳机并按下物理 "skip forward" 按钮

我通过扩展 AVPlayer 解决了这个问题。尽管 Apple 文档说你应该 not extend AVPlayer 并且这样做有未定义的行为,但在测试中一切都在 iOS 9 上正常工作通过 13

@interface CustomAVPlayer : AVPlayer

@property BOOL seekingEnabled;

@end

@implementation CustomAVPlayer

- (instancetype)initWithPlayerItem:(AVPlayerItem *)item
{
    self = [super initWithPlayerItem:item];
    if (self) {
        _seekingEnabled = YES;
    }
    return self;
}

- (void)seekToTime:(CMTime)time toleranceBefore:(CMTime)toleranceBefore toleranceAfter:(CMTime)toleranceAfter completionHandler:(void (^)(BOOL))completionHandler
{
    // This prevents seeking at the lowest level, regardless of whatever shenanigans the view may be doing
    if (_seekingEnabled)
        [super seekToTime:time toleranceBefore:toleranceBefore toleranceAfter:toleranceAfter completionHandler:completionHandler];
    else
        [super seekToTime:self.currentTime toleranceBefore:toleranceBefore toleranceAfter:toleranceAfter completionHandler:completionHandler];
}

@end

现在我可以 enable/disable 搜索:player.seekingEnabled = (YES/NO);