這兩天在寫(xiě)視頻的東西,然后就在網(wǎng)上找了很多資料布持。
找到覺(jué)得比較適合自己需求(邊看邊下載,離線緩存)的一個(gè)demo:
<a href = "http://www.reibang.com/p/57cf45834e7f">基于AVPlayer封裝視頻播放器(具有邊下邊播按傅、離線緩存胧卤、自定義控制面板等功能)</a>
但是作者里面用到的下載的類(lèi)的封裝不是很好,這時(shí)我就找到了<a >HSDownloadManager</a>
然后利用這兩個(gè)demo進(jìn)行優(yōu)化况芒,下面來(lái)說(shuō)說(shuō)我優(yōu)化的東西:
1叶撒、在LYPlayerDemo中痊乾,我放棄了它是下載文件:
圖片發(fā)自簡(jiǎn)書(shū).png
然后引入了HSDownloadManager。
2蛾魄、修改HSDownloadManager里的保存路徑,因?yàn)槲野l(fā)現(xiàn)它保存是沒(méi)有后綴名的舌狗,這樣就導(dǎo)致了很多視頻下載下來(lái)但是從本地獲取就播放不了了扔水。
// 保存文件名
//#define HSFileName(url) url.md5String
#define HBFileName(url) [[url componentsSeparatedByString:@"."] lastObject]
#define HBFirstName(url) [[url componentsSeparatedByString:@"."] firstObject] .md5String
#define HSFileName(url) [NSString stringWithFormat:@"%@.%@",HBFirstName(url),HBFileName(url)]
3、在LYVideoPlayer.m的文件里修改一下內(nèi)容:
//下載
[[HSDownloadManager sharedInstance] download:videoUrl progress:^(NSInteger receivedSize, NSInteger expectedSize, CGFloat progress) {
dispatch_async(dispatch_get_main_queue(), ^{
NSString * progressStr = [NSString stringWithFormat:@"%.f%%", progress * 100];
//進(jìn)度
NSLog(@"progress:%@",progressStr);
});
} state:^(DownloadState state) {
dispatch_async(dispatch_get_main_queue(), ^{
NSString *str = [self getTitleWithDownloadState:state];
NSLog(@"下載情況:%@",str);
});
}];
//判斷一下
NSURL *url = [[NSURL alloc]init];
//判斷一下有沒(méi)有下載完畢
if ([[HSDownloadManager sharedInstance] isCompletion:videoUrl]) {
//下載成功
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:HSFileFullpath(videoUrl)]) {
url = [NSURL fileURLWithPath:HSFileFullpath(videoUrl)];
NSLog(@"已經(jīng)下載成功了的");
NSLog(@"下載完成的路徑:%@",HSFileFullpath(videoUrl));
}
}
else{
//下載失敗
NSString *filePath = [videoUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
url = [NSURL URLWithString:filePath];
NSLog(@"還沒(méi)有下載的url:%@",url);
}
//播放
[self getUrlToPlayVideo:url];
4、判斷下載好的視頻是否有效待德,如果無(wú)效将宪,那么把文件刪除
NSLog(@"======== 播放失敗");
//可能下載的文件不可讀取,所以移除之前的文件
[[HSDownloadManager sharedInstance] deleteFile:self.videoUrl];
這是我修改后的demo印蔗,趕時(shí)間的小伙伴們可以直接拿來(lái)用:<a >HBVideoPlayer</a>
END.