我想使用 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;
}
}
它永远不会提供等于就绪的状态。