如何禁用在 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);
在 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);