美文网首页
基于AVPlayer和HSDownloadManager封装视频

基于AVPlayer和HSDownloadManager封装视频

作者: 明似水 | 来源:发表于2017-03-06 18:05 被阅读177次

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

    找到觉得比较适合自己需求(边看边下载,离线缓存)的一个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.

    相关文章

      网友评论

          本文标题:基于AVPlayer和HSDownloadManager封装视频

          本文链接:https://www.haomeiwen.com/subject/pxeugttx.html