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;
}
}
準備完了に等しいステータスを与えることはありません。