首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVQueuePlayer/AVPlayer加载通知?

AVQueuePlayer/AVPlayer加载通知?
EN

Stack Overflow用户
提问于 2011-12-07 06:57:57
回答 1查看 10.4K关注 0票数 7

我有一个AVQueuePlayer (显然是对AVPlayer的扩展),它可以加载流音频的播放列表。流式传输一切正常,但我希望有一个活动指示器,以显示用户的音频正在加载。问题是,我似乎在AVQueuePlayer (或AVPlayer)中找不到任何这样的通知,可以指示音频缓冲区何时完成加载/准备播放(也没有委托方法)。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-07 07:12:42

你将不得不使用KVO来完成这项工作。

对于要添加到队列的每个项目,您可以像这样设置观察者:

代码语言:javascript
复制
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];

现在,您可以在观察者方法中评估该项的状态;

代码语言:javascript
复制
- (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");
            }
        }
    }
}
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8408118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档