我想使用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;
}
}
永远不会让状态等于准备好。