ios - 无法观察 @“status” 键的 AVPlayerItem

标签 ios objective-c avfoundation

我正在尝试从 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/

相关文章:

带有 UIButton 的 iPhone 设置包

ios - UIImageView.animationImages 显示旋转图像

ios - 无法在另一个 View Controller 中显示缩略图

ios - 禁用 UISearchBar 中的搜索字段

ios - 为什么只导入 UIKit 框架就可以使用 Foundation 框架中定义的类型?

ios - iOS 5 iPhone模拟器

macos - 从视频文件中提取音频并在 OpenAL 中播放

iphone - 从 AVFoundation Capture Session 获取原始数据流

ios - 如何使用缓存策略 NSURLRequestReloadRevalidatingCacheData

ios - 如何在平面/ycbcr/420f/yuv/NV12/非 rgb 的 CVPixelBufferRef 上绘图?