通过 AvPlayerItem 和 AvPlayer 流式传输时监控下载的字节数 - iOS
Posted
技术标签:
【中文标题】通过 AvPlayerItem 和 AvPlayer 流式传输时监控下载的字节数 - iOS【英文标题】:Monitor downloaded bytes when streaming via AvPlayerItem and AvPlayer - iOS 【发布时间】:2012-10-11 13:39:46 【问题描述】:我想在从 URL 流式传输 mp3 并将其打印到 IULabel 时监控下载的字节。我找不到任何简单的方法来做到这一点。
“AVPlayerItemAccessLog”呢,有信息吗?我不知道如何使用它?有人知道如何获取这些信息吗?
下面是我播放流的代码:
-(void)play
/*Allow radio to run in background*/
[[AVAudiosession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
/*Gets the url fra sender*/
NSString *urlString= self.radioStation.url;
NSURL *url = [NSURL URLWithString:urlString];
/*Stop the radio if its play or have info*/
if(self.avPlayerItem)
[self stop];
/*Sets the Avplayeritem*/
self.avPlayerItem = [AVPlayerItem playerItemWithURL:url];
/*Listen for changes in the avPlayerItem*/
[self.avPlayerItem addObserver:self forKeyPath:@"status" options:0 context:nil];
/*Sets the avplayer with avplayeritem*/
self.avPlayer = [AVPlayer playerWithPlayerItem:self.avPlayerItem];
/*Sends loading info to the nortification*/
[[NSNotificationCenter defaultCenter] postNotificationName:@"Loading" object:self];
/*Plays the radio*/
[self.avPlayer play];
【问题讨论】:
【参考方案1】:您需要在 AVPlayerItem 上使用 KVO 来获取此信息。像这样的:
[self.player.currentItem addObserver:self
forKeyPath:@"loadedTimeRanges"
options:NSKeyValueObservingOptionNew
context:NULL];
然后是标准的观察者方法:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
// Get the player item's loadedTimeRanges value here.
在释放播放器项目之前不要忘记移除观察者。
【讨论】:
以上是关于通过 AvPlayerItem 和 AvPlayer 流式传输时监控下载的字节数 - iOS的主要内容,如果未能解决你的问题,请参考以下文章
使用 AVPlayer、AVPlayerItem 和 AVPlayerAsset 有啥区别吗?
AVPlayerItem 不播放视频,即使其状态为 `readyToPlay` 并且 `isPlaybackLikelyToKeepUp` 为 true