当 AVPlayer 播放来自网络流的 Assets 时,它会在下载内容结束时暂停。

所以,我的问题是,如何知道它是因为网络不好而停止的?以及如何在下载后播放它,比如说,接下来 10 秒的 Assets ?

最佳答案

当 AVPlayer 获得空缓冲区时,您可以添加一个观察者:

[[self.tracksPlayer currentItem] addObserver:self
                                  forKeyPath:@"playbackBufferEmpty"
                                     options:NSKeyValueObservingOptionNew
                                     context:nil];

还有一个观察者,这样你就可以知道 AVPlayer 何时缓冲到足以跟上:
[[self.tracksPlayer currentItem] addObserver:self
                                  forKeyPath:@"playbackLikelyToKeepUp"
                                     options:NSKeyValueObservingOptionNew
                                     context:nil];

然后只需在您的 KVO 回调中检查:
- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {

   if (object == [self.tracksPlayer currentItem] &&
      [keyPath isEqualToString:@"playbackBufferEmpty"]) {

      if ([self.tracksPlayer currentItem].playbackBufferEmpty) {
          NSLog(@"Buffer Empty");
      }
   } else if (object == [self.tracksPlayer currentItem] &&
             [keyPath isEqualToString:@"playbackLikelyToKeepUp"]) {

      if ([self.tracksPlayer currentItem].playbackLikelyToKeepUp) {
          NSLog(@"LikelyToKeepUp");
      }
   }
}

关于ios - 在AVPlayer中播放互联网不畅的视频流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22813557/

10-15 07:25