AVQueuePlayer不会加载下一个项目

时间:2015-11-18 22:23:50

标签: ios avplayer http-live-streaming avqueueplayer

我尝试在前一个加载完成无缝播放(http流)后加载AVQueuePlayer的其他项目。我已经离开了苹果的例子 - " AVFoundationQueuePlayer-iOS"。

从我在手机上运行Apples示例中看到的情况来看,当我添加第一个“HTTP直播流”#39;它将加载的项目,一旦完成,我添加另一个,该项目也将加载。查看代码时,每次用户添加项目时,所有Apple都会[self.player insertItem:item afterItem:nil];

使用我的queuePlayer我添加第一个项目,等待它完成加载,然后添加另一个[self.player insertItem:item afterItem:nil];但这不会导致新项目加载。

这两种情况都是在不播放视频的情况下完成的。只需将它们添加到que中。

我异步加载每个AVURLAsset并在完成时加载:

  if (firstItem) {
      // Is the first item. Add to player que
      [self.player insertItem:item afterItem:nil];

  }else{
      // Add the loaded items to an array
      NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:item, @"item", date, @"date", nil];
      [itemArray addObject:dic];

   }

我观察了keyPath" player.currentItem.loadedTimeRanges"第一个项目加载后,添加itemArray中的下一个项目。

 if(smartValue == duration) {
     if (itemArray.count != 0) {
            NSDictionary *dic = [itemArray objectAtIndex:0];
            AVPlayerItem *item = (AVPlayerItem *) [dic valueForKey:@"item"];
            // Should cause the item to load ??
            [self.player insertItem:item afterItem:nil];
            [itemArray removeObjectAtIndex:0];
        }
 }

现在阅读,我已经看到AVQueuePlayer在播放器即将完成播放上一个项目之前不会加载下一个项目的答案。但是Apples示例如何加载下一个项目。

苹果添加项目的方法

 for (NSString *loadedAssetTitle in self.loadedAssets.allKeys) {
    AVAsset *loadedAsset = self.loadedAssets[loadedAssetTitle];
    AAPLPlayerViewController __weak *weakSelf = self;
    [alertController addAction:[UIAlertAction actionWithTitle:loadedAssetTitle style:UIAlertActionStyleDefault handler:
        ^(UIAlertAction *action){
            NSArray *oldItemsArray = [weakSelf.player items];
            AVPlayerItem *newPlayerItem = [AVPlayerItem playerItemWithAsset:loadedAsset];
            [weakSelf.player insertItem:newPlayerItem afterItem:nil];
            [weakSelf queueDidChangeFromArray:oldItemsArray toArray:[self.player items]];
        }]];
}

0 个答案:

没有答案