基于AVPlayer和HSDownloadManager封装视频播放器

这两天在写视频的东西,然后就在网上找了很多资料。

找到觉得比较适合自己需求(边看边下载,离线缓存)的一个demo:
<a href = "http://www.jianshu.com/p/57cf45834e7f">基于AVPlayer封装视频播放器(具有边下边播、离线缓存、自定义控制面板等功能)</a>

但是作者里面用到的下载的类的封装不是很好,这时我就找到了<a href = "https://github.com/HHuiHao/HSDownloadManager">HSDownloadManager</a>

然后利用这两个demo进行优化,下面来说说我优化的东西:

1、在LYPlayerDemo中,我放弃了它是下载文件:

图片发自简书.png

然后引入了HSDownloadManager。

2、修改HSDownloadManager里的保存路径,因为我发现它保存是没有后缀名的,这样就导致了很多视频下载下来但是从本地获取就播放不了了。

// 保存文件名
//#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的文件里修改一下内容:

//下载
    [[HSDownloadManager sharedInstance] download:videoUrl progress:^(NSInteger receivedSize, NSInteger expectedSize, CGFloat progress) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSString * progressStr = [NSString stringWithFormat:@"%.f%%", progress * 100];
            //进度
            NSLog(@"progress:%@",progressStr);
            
        });
    } state:^(DownloadState state) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSString *str = [self getTitleWithDownloadState:state];
            NSLog(@"下载情况:%@",str);
        });
    }];
    
    //判断一下
    NSURL *url = [[NSURL alloc]init];
    //判断一下有没有下载完毕
    if ([[HSDownloadManager sharedInstance] isCompletion:videoUrl]) {
        //下载成功
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if ([fileManager fileExistsAtPath:HSFileFullpath(videoUrl)]) {
            url = [NSURL fileURLWithPath:HSFileFullpath(videoUrl)];
            NSLog(@"已经下载成功了的");
            NSLog(@"下载完成的路径:%@",HSFileFullpath(videoUrl));
        }
        
    }
    else{
        //下载失败
        NSString *filePath = [videoUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        url = [NSURL URLWithString:filePath];
        NSLog(@"还没有下载的url:%@",url);
    }
    //播放
    [self getUrlToPlayVideo:url];

4、判断下载好的视频是否有效,如果无效,那么把文件删除

NSLog(@"======== 播放失败");
                //可能下载的文件不可读取,所以移除之前的文件
                [[HSDownloadManager sharedInstance] deleteFile:self.videoUrl];

这是我修改后的demo,赶时间的小伙伴们可以直接拿来用:<a href = "https://github.com/smileKH/HBVideoPlayer">HBVideoPlayer</a>

END.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,956评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,786评论 4 61
  • 莫张狂,张狂心气泄。 莫低沉,低沉志气衰。 平和,平庸,平实。 非平,无以积厚。 心气,以平为贵。 志气,以高为富...
    千劫尘土一杯沙阅读 3,237评论 0 1
  • 起身,行走,坐下,行走,坐下,行走,坐下,躺下,每天这样,是什么使然,每一步的诱惑是什么,关键我也没有完成什么,什...
    巴士加路阅读 1,238评论 0 0
  • 我以为我会孤单
    cucu阅读 1,481评论 0 1

友情链接更多精彩内容