2

我想使用 AVURLAsset 播放视频文件,但在服务器上不是本地文件。我读过 AVURLAsset 不能直接用于远程文件。我阅读了堆栈溢出的另一个链接

AVURLAsset 无法加载远程文件

此链接有一些使用 AVURLAsset 播放远程文件的方法,但我无法完全理解。我的观察员没有被调用。有人可以帮帮我吗?其实我不想使用 AVPlayer 播放视频出于某些原因。我从 AVAsset 抓取帧,然后在 OpenGL 中将它们渲染为纹理,所以我只需要通过 AVURLAsset 来执行此操作。

这是要查看的代码

-(void) startPlayer
   { 
    NSURL *url=[NSURL fileURLWithPath:@"http://gamooz.com/wildlife.mp4"]; 
    pItem = [AVPlayerItem playerItemWithURL:url]; 
    player = [AVPlayer playerWithPlayerItem:pItem];
    [player play]; 
    pItem addObserver:self forKeyPath:@"status" options:0 context:nil]; 
   }

 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:    (NSDictionary *)change context:(void *)context 
   { 
     NSLog(@"heyy"); 
     if ([keyPath isEqualToString:@"status"])
        {
          AVPlayerItem *pItemTemp = (AVPlayerItem *)object; 
          if (pItemTemp.status == AVPlayerItemStatusReadyToPlay) 
             { 
                ///now i can use playerItem asset
                 asset = (AVURLAsset *)pItemTemp.asset; 
             }
        } 
   }

但观察者永远不会被调用。这是为什么?

此外,我将观察者代码放在其他一些函数中,并尝试检查 playerItem 是否准备好播放

 -(void) checkForPlayer
   {
  if (pItem.status == AVPlayerItemStatusReadyToPlay) 
   {
     asset = (AVURLAsset *)pItem.asset;
   }
   }

它永远不会提供等于就绪的状态。

4

0 回答 0