gpt4 book ai didi

ios - AVQueuePlayer-在缓冲项目时保持事件状态

转载 作者:行者123 更新时间:2023-12-01 16:28:20 26 4
gpt4 key购买 nike

缓冲远程AVPlayerItem时是否可以保持AVQueuePlayer处于 Activity 状态?

当前,当项目进入缓冲状态时,播放停止,并且 MPNowPlayingInfoCenter 设置的所有信息都将被删除-锁定屏幕,命令中心,外部设备等。

我已经测试AVPlayer / AVQueuePlayer一段时间了,看来唯一的选择是:

  • 观察远程AVPlayerItem的playbackBufferEmpty
  • 当观察者触发时,插入带有空mp3文件的新AVPlayerItem。
  • 继续观察远程项目的缓冲区,一旦达到播放,就交换项目并前进到远程项目。

  • 此方法的问题在于,一旦前进到空项目,AVQueuePlayer就会停止缓冲 Remote 。
    我对项目都设置了强烈引用,并且actionAtItemEnd设置为 AVPlayerActionAtItemEndNone
    网络由Charles监控。

    还有其他方法可以做到这一点吗?

    最佳答案

    我设法使用两个AVPlayer实例使回放保持 Activity 状态。

    第一个实例包含远程AVPlayerItem,第二个实例包含几毫秒长的空声音文件。加载后,您可以搜索空项目。

    当远程项目进入缓冲状态时,请暂停它并播放空文件。由于已经结束,它将使回放 session 保持 Activity 状态。只需将actionAtItemEnd设置为AVPlayerActionAtItemEndNone即可。

    即使这可行,当远程项目的缓冲区更改为playbackLikelyToKeepUp并交换播放器时,您也可能会遇到一些奇怪的行为。远程项目可以跳回playbackBufferEmpty,并且播放器交换逻辑可能陷入永无止境的循环中。

    我通过延迟缓冲区更新解决了这个问题:

    -(void)setPendingBuffer:(PlayerItemBuffer)pendingBuffer {

    _pendingBuffer = pendingBuffer;

    if (self.bufferDispatchTimer.valid) {
    [self.bufferDispatchTimer invalidate];
    }
    self.bufferDispatchTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(bufferDispatchTimerDidFire) userInfo:nil repeats:NO];
    }

    关于ios - AVQueuePlayer-在缓冲项目时保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847573/

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