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