我想使用AVURLAsset播放视频文件,但在服务器上不是本地文件 . 我已经读过AVURLAsset不能直接用于远程文件 . 我读了Stack Overflow的另一个链接

AVURLAsset cannot load with remote file

此链接有一些使用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;
   }
   }

永远不会让状态等于准备好 .