我正在尝试从 URL 播放流,但这是一个问题。 ObserveValueForKeyPath:ofObject:change:context 只是不执行。据我了解,它不取决于 streamURL,无论它是否正确。它必须将状态从 AVPlayerItemStatusUnknown 更改为 AVPlayerItemStatusReadyToPlay 或 AVPlayerItemStatusFailed。但尽管如此,我还是在浏览器中检查了该 URL,它工作正常。所以有什么问题?我看了关于它的 WWDC 视频,它说,如果你有音频流,请使用 AVPLayerItem before AVAsset。
这是我的代码:
- (void) prepare
{
NSURL * trackStreamURL = [NSURL URLWithString:streamURL];
NSLog(@"STREAM URL: %@",trackStreamURL);
_playerItem = [AVPlayerItem playerItemWithURL:trackStreamURL];
[_playerItem addObserver:self forKeyPath:@"status" options:0 context:nil];
}
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"KEY PATH : %@", keyPath);
NSLog(@"CHANGE : %@", change);
}
提前致谢!
最佳答案
我一直观察 AVPlayer
上的 status
属性,而不是 AVPlayerItem
上的属性,因为无论如何你都需要一个播放器来播放播放器项目.事实上,我什至从未看过播放器项目的状态属性。
播放器项目的状态可能永远不会改变,因为没有播放器准备播放它。因此,使用播放器项目创建播放器并观察播放器的状态(或者可能仍然是播放器项目的状态)。
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
关于ios - 无法观察 @“status” 键的 AVPlayerItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178444/