目标 c - 从远程服务器播放音频时显示缓冲进度

Posted

技术标签:

【中文标题】目标 c - 从远程服务器播放音频时显示缓冲进度【英文标题】:Objective c - Display buffering progress when playing audio from remote server 【发布时间】:2012-12-10 18:52:57 【问题描述】:

我正在使用AVPlayer 播放来自远程服务器的音频。

我想显示一个进度条,显示缓冲进度和“播放时间”进度,就像播放电影时 MPMoviePlayerController 所做的那样。

AVPlayer 是否有任何显示此信息的 UI 组件?如果没有,我怎样才能得到这个信息(缓冲状态)?

谢谢

【问题讨论】:

【参考方案1】:

AVPlayer 是否有显示此信息的 UI 组件?

不,AVPlayer 没有 UI 组件。

如果没有,我怎样才能得到这个信息(缓冲状态)?

你应该观察AVPlayerItem.loadedTimeRanges

[yourPlayerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];

然后使用KVO观看

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                    change:(NSDictionary *)change context:(void *)context 
    if(object == player.currentItem && [keyPath isEqualToString:@"loadedTimeRanges"])
        NSArray *timeRanges = (NSArray*)[change objectForKey:NSKeyValueChangeNewKey];
        if (timeRanges && [timeRanges count]) 
            CMTimeRange timerange=[[timeRanges objectAtIndex:0]CMTimeRangeValue];
        
    
 

timerange.duration 是您所期望的。

而且你必须手动绘制缓冲区进度。

参考here.

【讨论】:

感谢您的回复,只是为了确定,'timerange.duration' 是已经加载的持续时间吗?还是已经玩过?如果我暂停音频怎么办?缓冲会继续,“timerange.duration”会继续吗? 是的,timerange.duration 向您显示 AVPlayerItem 加载的端点,否则 timerange.start 向您显示起点。所以,它显示的是加载时间而不是 CMTime 类型的播放时间。 即使你的 AVPlayerItem 被暂停,远程缓冲和 KVO 仍然可以工作。

以上是关于目标 c - 从远程服务器播放音频时显示缓冲进度的主要内容,如果未能解决你的问题,请参考以下文章

播放 iOS 的远程音频缓冲区时如何避免机器人声音?

AVPlayer 串流进度

具有缓冲进度的 UISlider - AVPlayer

我可以同时从音频流缓冲区写入和播放(在 NAudio 中)吗?

从 firebase 数据库获取数据时显示进度对话框

如何直接从 res/raw 文件夹播放音频文件?