self.player = [[AVPlayer playerWithURL:[NSURL URLWithString:@"http://myurl.com/track.mp3"]] retain];
我正在尝试为上述轨道制作UIProgressView。如何从该URL获取文件大小和当前文件大小?请帮忙,谢谢!如何从NSURL获取AVPlayer的文件大小和当前文件大小iOS4.0
self.player = [[AVPlayer playerWithURL:[NSURL URLWithString:@"http://myurl.com/track.mp3"]] retain];
我正在尝试为上述轨道制作UIProgressView。如何从该URL获取文件大小和当前文件大小?请帮忙,谢谢!如何从NSURL获取AVPlayer的文件大小和当前文件大小iOS4.0
我认为你不想知道关于文件大小的任何事情,但你对时代更感兴趣。
尝试self.player.currentItem.asset.duration
持续当前播放项目,self.player.currentTime
当前时间。
你需要开始观察当前项目的loadedTimeRanges财产,像这样:
AVPlayerItem* playerItem = self.player.currentItem;
[playerItem addObserver:self forKeyPath:kLoadedTimeRanges options:NSKeyValueObservingOptionNew context:playerItemTimeRangesObservationContext];
然后,在观察回调,你让你通过这样的数据的意义:
-(void)observeValueForKeyPath:(NSString*)aPath ofObject:(id)anObject change:(NSDictionary*)aChange context:(void*)aContext {
if (aContext == playerItemTimeRangesObservationContext) {
AVPlayerItem* playerItem = (AVPlayerItem*)anObject;
NSArray* times = playerItem.loadedTimeRanges;
// there is only ever one NSValue in the array
NSValue* value = [times objectAtIndex:0];
CMTimeRange range;
[value getValue:&range];
float start = CMTimeGetSeconds(range.start);
float duration = CMTimeGetSeconds(range.duration);
_videoAvailable = start + duration; // this is a float property of my VC
[self performSelectorOnMainThread:@selector(updateVideoAvailable) withObject:nil waitUntilDone:NO];
}
然后在主线程中选择更新进度条,就像这样:
-(void)updateVideoAvailable {
CMTime playerDuration = [self playerItemDuration];
double duration = CMTimeGetSeconds(playerDuration);
_videoAvailableBar.progress = _videoAvailable/duration;// this is a UIProgressView
}
kLoadedTimeRanges应该代表什么?我无法在任何地方找到这个 – 2012-01-25 00:20:41
只是为了防止复制和粘贴错误。确保你在count 8时测试times数组。在iOS 8中,它可以返回一个空数组。 – 2014-09-19 17:26:12
@“loadedTimeRange”是AVPlayerItem类的KVO值。你可以在AVPlayerItem.h文件中找到它的定义,在
@interface AVPlayerItem (AVPlayerItemPlayability)
类别定义。
是的,我制作滑块的持续时间。但是,如果用户幻灯片通过了什么是加载的,那么坏消息。所以我想要下载/播放曲目的进度,是吗?那有意义吗? – slowman21 2010-10-22 22:08:56
我明白了,我不确定这一点,但是您可能希望仅在“self.player.currentItem.loadedTimeRanges”中指定的范围内启用搜索。 – Michal 2010-10-23 08:49:57
是的,我也需要这样做。但仍然会让用户看到已加载的内容。就像一个真正的流光。 – slowman21 2010-10-25 14:48:43