6
我有一个AVQueuePlayer
加载音频流的播放列表(这显然延伸AVPlayer
)。流媒体工作正常,但我想有一个活动指示器显示用户音频正在加载。麻烦的是,我似乎无法找到AVQueuePlayer
(或AVPlayer
)任何此类通知时,音频缓冲加载完成后,将显示/准备播放(也没有,似乎有一个委托方法)。有什么想法吗?AVQueuePlayer/AVPlayer加载通知?
我有一个AVQueuePlayer
加载音频流的播放列表(这显然延伸AVPlayer
)。流媒体工作正常,但我想有一个活动指示器显示用户音频正在加载。麻烦的是,我似乎无法找到AVQueuePlayer
(或AVPlayer
)任何此类通知时,音频缓冲加载完成后,将显示/准备播放(也没有,似乎有一个委托方法)。有什么想法吗?AVQueuePlayer/AVPlayer加载通知?
你将不得不使用志愿来完成这件事。
对于要添加到队列中的每个项目,您可以设置观察家这样的:
item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://somefunkyurl"]] retain];
[item_ addObserver:self forKeyPath:@"status" options:0 context:nil];
[item_ addObserver:self forKeyPath:@"playbackBufferEmpty" options:0 context:nil];
现在,您可以评估观测方法中该项目的状态;
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([object isKindOfClass:[AVPlayerItem class]])
{
AVPlayerItem *item = (AVPlayerItem *)object;
//playerItem status value changed?
if ([keyPath isEqualToString:@"status"])
{ //yes->check it...
switch(item.status)
{
case AVPlayerItemStatusFailed:
NSLog(@"player item status failed");
break;
case AVPlayerItemStatusReadyToPlay:
NSLog(@"player item status is ready to play");
break;
case AVPlayerItemStatusUnknown:
NSLog(@"player item status is unknown");
break;
}
}
else if ([keyPath isEqualToString:@"playbackBufferEmpty"])
{
if (item.playbackBufferEmpty)
{
NSLog(@"player item playback buffer is empty");
}
}
}
}
您也可以观察AVPlayerItem对象的playbackBufferEmpty属性时,您的缓冲区播放过程中清空,如果/检测,这样就可以显示一个活动的指标或“缓冲”的警告。 – reddersky
@virorum好点,补充说,我的答案 - 一个! – Till
你总是可以了我的评论,如果你喜欢它;-) – reddersky