DOUAudioStreamer
DOUAudioStreamer copied to clipboard
add optional cachedFileURL method to DOUAudioFile Protocol
DOUAudioFile.h
@protocol DOUAudioFile <NSObject>
@required
- (NSURL *)audioFileURL;
@optional
- (NSURL *)cachedFileURL;
- (DOUAudioFilePreprocessor *)audioFilePreprocessor;
@end
_DOUAudioRemoteFileProvider
- (instancetype)_initWithAudioFile:(id <DOUAudioFile>)audioFile
{
self = [super _initWithAudioFile:audioFile];
if (self) {
_audioFileURL = [audioFile audioFileURL];
if ([audioFile respondsToSelector:@selector(cachedFileURL)]) {
_cachedPath = [audioFile.cachedFileURL path];
_cachedURL = audioFile.cachedFileURL;
}else{
_cachedPath = [[self class] _cachedPathForAudioFileURL:_audioFileURL];
_cachedURL = [NSURL fileURLWithPath:_cachedPath];
}
if ([DOUAudioStreamer options] & DOUAudioStreamerRequireSHA256) {
_sha256Ctx = (CC_SHA256_CTX *)malloc(sizeof(CC_SHA256_CTX));
CC_SHA256_Init(_sha256Ctx);
}
[self _openAudioFileStream];
[self _createRequest];
[_request start];
}
return self;
}
每播放一首歌都会产生一个缓存文件,如果这样自己指定目录,那这个目录就会越来越大,那就需要考虑清除缓存的问题了。
@scfhao
可以自己来管理缓存,此策略只是在播放远程媒体的时候才会生效。 播放的时候可以使用缓存的文件来播放,而不需要再次远程读取。 在远程媒体路径随机的情况下,制定缓存的文件名, DOUAudioStreamer默认也生成了缓存文件,是根据URL sha256来命名的。 在updateBufferingStatus里可以判断音频文件是否下载完毕来决定下次是否使用此缓存。
如何取出缓存的文件?可以给解释一下吗?
@guokai1120 实现 cachedFileURL方法
@interface MyTrackFile< DOUAudioFile>
@end
@implementation MyTrackFile< DOUAudioFile>
-(NSURL) cachedFileURL
{
//缓存保存路径
return [NSURL fileURLWithPath: [NSTemporaryDirectory() stringByAppendingPathComponent:@"foo.mp3"]];
}
@end