美文网首页
基于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封装视频

    这两天在写视频的东西,然后就在网上找了很多资料。 找到觉得比较适合自己需求(边看边下载,离线缓存)的一个demo:...

  • iOS AVPlayer视频播放器

    GOVVideoPlayer/GOVVideoController 是一个基于AVPlayer封装的视频播放器,支...

  • iOS 视频播放

    1.基于AVPlayer的ZFPlayer ,是对AVPlayer的封装,有人会问它支持什么格式的视频播放,问这个...

  • iOS的视屏播放

    1.AVPlayer:基于Layer显示,自己编写面板,最好对AVPlayer封装. 2.MPMoverPlaye...

  • AVPlayer封装

    说明 基于AVPlayer和MVP模式封装的一个视频播放控制器,支持全屏,暂停播放,进度条拖动。 Demo地址 A...

  • ZYPlayer 基于 AVFoundation AVPlaye

    ZYPlayer 是一款基于AVFoundation 下AVPlayer 封装的视频播放器前言:写这篇文章并不是为...

  • 基于AVPlayer封装的视频播放器

    更新:2017.11.14 更新内容:1.可以由在指定区域播放,并切换到全屏模式,然后点击切换按钮切换到以前指定区...

  • iOS 基于AVPLayer封装视频播放器

    最近的公司有个需求,需要做客户端播放远程视频。本来需求很简单,只要能播放、暂停、拖动进度就行啦。原定技术方案使用系...

  • avplayer

    参考1.iOS通过AVPlayer打造自己的视频播放器2.基于 AVPlayer 自定义播放器3.AVPlayer...

  • 基于系统AVplayer的音频播放实现1.0-2.0倍速播放,锁

    音频播放主要是基于系统的AVPlayer和AVPlayerItem,不像视频需要显示画面需要AVPlayerLay...

网友评论

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

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