【问题标题】:iOS AVPlayer cancel bufferingiOS AVPlayer 取消缓冲
【发布时间】:2015-10-01 16:30:30
【问题描述】:

如果我使用来自主机的文件加载AVPlayer

[AVPlayer playerWithPlayerItem:playerItem];

而“缓冲”所用的时间比用户想要的要长,我该如何让他们取消呢?

【问题讨论】:

    标签: ios streaming avplayer


    【解决方案1】:

    所以正确答案是@Che with:

    如果你会调用 [self.player replaceCurrentItemWithPlayerItem:nil]; 缓冲停止。 – Che 10 月 13 日 14:36

    并且您在观察者上这样做,以监听来自 playerWithPlayerItem 的状态更新。谢谢大家!

    【讨论】:

      【解决方案2】:

      你可以试试这个

      // pause buffer
      [self.playerItem cancelPendingSeeks];
      [self.playerItem.asset cancelLoading];
      

      【讨论】:

      • 嗨!你如何恢复它?
      【解决方案3】:

      我认为没有直接停止缓冲的方法。但是您可以检查 AVPlayerItem 的布尔值 playbackLikelyToKeepUp 属性来检查缓冲区是否正在加载。然后我不会在 AVPlayer 上暂停播放。

      【讨论】:

      • 因此,如果我调用 [AVPlayer playerWithPlayerItem:playerItem] 并设置一个线程在 30 秒后初始化超时,我如何确保当 [AVPlayer playerWithPlayerItem:playerItem] 最终返回时不会不开始玩。事实上,如果用户选择不同的流并启动它,我该如何停止
      • 如果您将调用[self.player replaceCurrentItemWithPlayerItem:nil]; 缓冲停止。
      • 嘿车,谢谢。所以如果我用self.player = [AVPlayer playerWithPlayerItem:playerItem]; 实例化播放器在另一个线程中我可以发出[self.player replaceCurrentItemWithPlayerItem:nil]; 即使控制没有返回到实例化?
      【解决方案4】:

      斯威夫特 3

      player?.replaceCurrentItem(with: nil)
      

      【讨论】:

        【解决方案5】:

        您需要管理avplayer currentItem的preferredForwardBufferDuration。如果您想停止缓冲设置值为 1,因为如果将其设置为 0,它将自动设置

        self.avPlayer.currentItem.preferredForwardBufferDuration = 1;
        

        来自 Apple 文档: 此属性以秒为单位定义首选的转发缓冲区持续时间。如果设置为 0,播放器将为大多数用例选择适当的缓冲级别。将此属性设置为较低的值会增加播放停止和重新缓冲的机会,而将其设置为较高的值会增加对系统资源的需求。

        【讨论】:

          猜你喜欢
          • 2023-03-20
          • 1970-01-01
          • 2011-10-16
          • 2016-08-08
          • 1970-01-01
          • 1970-01-01
          • 2013-05-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多