第二个坑就是当刚开始缓存但是没有出声音的时候这个时候调暂停的方法是没用的,即使调用了暂停的方法.但是音频还是会播放.我刚开始的解决办法是在监听FSAudioStreamState的kFsAudioStreamPlaying状态.在playFromURL:的时候设置了一个属性Buffering置为YES,在调用kFsAudioStreamPlaying的置为NO,这样在暂停方法里这样写
- (void)suspentFM {
if (self.isSuspendFM==YES) return;
if (self.Buffering ==YES) {
[_audioStream stop];
}else {
[_audioStream pause];
}
self.isSuspendFM = YES;
_suspentBtn.hidden = NO;
}
if ( progressView.progress<0.007) {
self.Buffering = YES;
}else {
self.Buffering = NO;
}
到这里才完美的解决这个问题
在接下来说使用小技巧吧.就是缓存的进度和播放的进度
FSStreamPosition cur = self.audioStream.currentTimePlayed;
self.playbackTime =cur.playbackTimeInSeconds/1;
self.ProgressView.progress = cur.position;//播放进度
self.progress = cur.position;
float prebuffer = (float)self.audioStream.prebufferedByteCount;
float contentlength = (float)self.audioStream.contentLength;
if (contentlength>0) {
self.ProgressView.cacheProgress = prebuffer /contentlength;//缓存进度
}
还有获取缓存的大小
- (CGFloat)cachesize {
_audioStream = [[FSAudioStream alloc]init];
float totalCacheSize = 0;
NSMutableArray *cachedFiles = [[NSMutableArray alloc] init];
for (NSString *file in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:_audioStream.configuration.cacheDirectory error:nil]) {
if ([file hasPrefix:@"FSCache-"]) {
YKTCacheObject *cacheObj = [[YKTCacheObject alloc] init];
cacheObj.name = file;
cacheObj.path = [NSString stringWithFormat:@"%@/%@", _audioStream.configuration.cacheDirectory, cacheObj.name];
cacheObj.attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:cacheObj.path error:nil];
totalCacheSize += [cacheObj fileSize];
if (![cacheObj.name hasSuffix:@".metadata"]) {
[cachedFiles addObject:cacheObj];
}
}
}
return totalCacheSize/1000000;
}