gpt4 book ai didi

ios - AVPlayer 边界时间观察器偶尔无法触发

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:50 26 4
gpt4 key购买 nike

我正在使用 AVPlayer 的 -addBoundaryTimeOserverForTimes:queue:usingBlock: 在我的视频中的特定时间执行一些代码(在这种情况下,我想要在我的视频达到其持续时间时取消隐藏按钮。代码如下:

- (void)viewWillAppear:(BOOL)animated
{
...

_player = [AVPlayer playerWithURL:videoURL];

AVPlayerLayer *newPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
[newPlayerLayer setFrame:_videoView.bounds];
[_videoView.layer addSublayer:newPlayerLayer];

_observer = [_player addBoundaryTimeObserverForTimes:@[[NSValue valueWithCMTime:_player.currentItem.duration]] queue:NULL usingBlock:^{
[someButton setHidden:NO];
}];

...
}

无论出于何种原因,有时代码块会触发并且按钮变得可见,有时则不会。无法在此行为中找到模式。它经常(几乎总是)在模拟器中发生,偶尔在设备上发生。有没有人遇到过这个问题?有什么想法吗?

编辑

此外,如果我在 block 上放置断点,它总是会触发。

最佳答案

主队列有时不调用。您可以使用子队列,并在子队列的 block 中调用主队列。

// dispatch queue setting
dispatch_queue_t subQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

// notification setting
__block id blockObserver;
blockObserver = [self.queuePlayer addBoundaryTimeObserverForTimes:boundary
queue:subQueue // if NULL use mainQueue

usingBlock:^{
// do something
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(mainQueue, ^{
// do something
});
}];

关于ios - AVPlayer 边界时间观察器偶尔无法触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15771549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com