Git Product home page Git Product logo

fkdownloader's Issues

多目录

怎么实现同时下载多个视频,但是这些视频的存储目录为不同的文件夹

支持多种下载任务列表管理

正打算自己写一个,发现你的这个框架,可以节省不少工作
想问一下你这边如对多种任务下载队列进行管理呢,比如我一个app里面,既有电影下载,又有音乐下载,这是两种不同的任务,都需要后台下载

功能优化

有个需求该项目能否满足,或者提供下思路,就是下载顺序问题,按加入顺序进行依次下载,还有个开始时间和结束时间能否满足

崩溃

设备型号:iPhone 6
系统版本:10.2
操作步骤:运行demo,点击下载,再点击暂停,再点击取消
期望结果:正常
运行结果:崩溃
您的代码:无
19510f20-cd8a-4307-92af-76c3d91d504d

demo 不能正常下载,进度不显示, 急!!!

设备型号: iPhone 6S
系统版本: 10.3.3
操作步骤: 先运行demo到手机, 然后手机设置低电量模式并拔下数据线,打开demo
期望结果: 能正常下载
运行结果: 点击“开始”按钮已变为“暂停”(说明为正在下载中),但无进度条显示, 取消低电量模式或者数据线连接电脑就能正常下载
您的代码: demo原代码

task 暂停状态不正确

调用 task 的 suspend 方法没有调用 sendSuspendInfo 方法将 status 置为 TaskStatusSuspend ,会导致在有任务是强制重启 restore 方法报错

image

Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"

当我在下载中强制退出app,不是后台。然后再重启 app 的时候,就会报这个错误

Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSErrorFailingURLStringKey=http://61.184.206.158/9bcd3aa274db88c3bf9213c80fba82fd.ts?ts_name=1&k=36f50601c365b2ff9e341757a80f8d8a-93fb-1544440233&vvid=d1db0cad-271f-af54-6663-1508bcde8dee&type=mpptv.wp&bppcataid=9&segment=1f62a124_1f624b44_1544425833, NSErrorFailingURLKey=http://61.184.206.158/9bcd3aa274db88c3bf9213c80fba82fd.ts?ts_name=1&k=36f50601c365b2ff9e341757a80f8d8a-93fb-1544440233&vvid=d1db0cad-271f-af54-6663-1508bcde8dee&type=mpptv.wp&bppcataid=9&segment=1f62a124_1f624b44_1544425833, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "BackgroundDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>",
    "LocalDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>"
), _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>}

再之后,无论怎么操作都不会下载成功了。

task 过多主线程卡顿

当添加很多 task(没办法,M3U8列表的下载一次下载至少200个请求地址)

[[FKDownloadManager manager].taskHub.allTask orderEach:^(FKTask *task, NSUInteger idx) {
        [[FKDownloadManager manager] start:task.url];
    }];

遍历执行 start 方法后

image

由于这里将 task 返回到了主线程,过多的 task 会造成界面卡顿。

downloader.restore size 为零

设备型号:ipone 8s plus
系统版本: 12.1.2
操作步骤: 下载文件downloader.restore 获取size = 0
期望结果: 不为零
运行结果:
您的代码: kf demo

任务不执行

使用最新版本

 [[FKDownloadManager manager] addTasksWithArray:array tag:strtag];  // 全部添加
            [[FKDownloadManager manager] startWithTag:strtag];                 //按标签启动

最后只下载了五六个,看taskhub里其它任务均为等待状态 ,但看fklog输出为

FKDownloadManager.m:258	开始执行 FKTask: <FKTask: 0x6000029a57a0>.<711>.<TaskStatusNone>.<https://ese2a2b9c8d9cb-pub.pubssl.ss.net/22989/42fcc57b3ec347e6b20ad023c28f967e/lgjOnsNjII53qVF8-sd_seg_62_ehls_a2f3bc?schoolId=22989&fileGlobalId=42fcc57b3ec347e6b20ad023c28f967e&userId=1&userName=%E9%A2%86%E5%B8%A6%E5%90%9B1>.<0.0000>
FKDownloadManager.m:265	当前执行数量 3 已超过 3

没有执行的任务均输出了上面的日志,但是后续并没有执行,检查整个日志都 没有执行过startNextIdleTask函数

谢谢

通过 task 直接取 tags 没有值

sorry,又来提 bug 了。
直接通过 task.tags 取值为空

    NSMutableSet *subtract = [NSMutableSet setWithSet:self.tags];
    [subtract subtractSet:tags];
    if (subtract.count > 0) {
        [self.tags unionSet:tags];
    }

断点查看,这里好像没有添加进去。

pod版本 FKDownloader (0.1.3) 求助

设备型号:iPhone6s Plus
系统版本:12.3.1
操作步骤:
收到长链接推送后添加下载任务。
期望结果:
能够按照给定的最大并发书数(3)以队列方式逐个完成下载。
运行结果:任务卡住,当正在执行的任务数量超过给定个数时提示超过最大并发数(貌似好像给定一个无法解析的链接进去的时候也不会报错,不返回结果,怀疑卡住和中间传入过错误链接有关系。)
您的代码:
didFinishLaunchingWithOptions中调用下面的方法
image
收到长链接推送后添加并开始任务的相关代码
image
后台下载处理
image
报错信息:(控制台输出)
image

task 下载完成后删除任务崩溃

当我添加一组任务,全部下载完成后我想清除这些任务,因为自己另外做了汇总的存储,同时也避免 task 中的任务过多。我在 didFinishTask 的回调中判断这组任务的数量是否全部下载完成,然后调用:

[[[FKDownloadManager manager] acquireWithTag:targetId] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
                    [[FKDownloadManager manager] remove:obj.url];
                }];

并开始下一组任务,这样操作好像是不安全的,我已遇到过两种错误(一定概率下):
image
还有一种:
[FKTask retain]: message sent to deallocated instance 0x2812dcd20

不能实现断点下载,暂停之后会从头开始下载

设备型号:iPhone 7
系统版本: 12+
操作步骤:使用http://d30.xcenable.com/storage/attachment/2019/8/14/4f9516f08b134a0c81a7c68247580a0f.mp4 下载视频,
期望结果:实现断点下载
运行结果:不能实现断点下载,暂停之后继续点击下载,会从头开始下载
您的代码:
image

报错信息:我测试了下载发现我们公司的服务器下的资源都是这种情况,这两个方法 cancelByProducingResumeData 和 didCompleteWithError 里面的取的resumedata都为nil,不知道是什么原因

URL 重定向问题

当访问一个地址,比如: www.xx.com/1.mp4 ,但是它的真实地址可能是: www.yy.com/1.mp4。由于是通过 url.identifier 来确定任务的,在 urlsession 的回调的时候获取task.currentRequest.URL.absoluteString 会得到后面的地址从而找不到该任务从而下载失败。

task 定时器问题

image

当 task 重建定时器时,有概率会出现这个 crash ,有时是上面这里,有时是下面

dispatch_source_cancel(self.timer);

一个task

设备型号:
系统版本:
操作步骤:
期望结果:
运行结果:
您的代码:

task.isFinish 的 progress 的建议

- (void)reday {
    FKLog(@"开始准备: %@", self)
    
    if (self.isFinish) {
        self.progress.totalUnitCount = 1;
        [self sendFinishInfo];
        return;
    }
...

当 task 的文件已经完成时,建议将文件的大小作为 progress 的 totalUnitCount

时效性验证设置为可选项

有的一组下载链接是通过参数来区别文件的,如果忽略参数设置 identifier 会导致这类任务无法添加。建议对该选项提供 configure 和 task 的设置。

addTasksWithArray 后不能立即执行开始任务

    [[FKDownloadManager manager] addTasksWithArray:tasks.copy];
    // 第一次会取不到值
    [[FKDownloadManager manager].taskHub.allTask orderEach:^(FKTask *task, NSUInteger idx) {
        [[FKDownloadManager manager] start:task.url];
    }];

当添加一组任务后立即调用开始任务,taskHub 中会返回一个空数组。

url.encodeEscapedString 下载错误

我这边测试发现一些请求地址先编码后会请求错误,去掉编码后可以正常请求成功。不知道这个操作是否必须?

请求过多造成主线程卡顿

  1. 一次添加比如100个 task,不停的归档会造成主线程卡死,直到所有任务添加完成。
  2. 且开始执行任务后,执行过程中有明显卡顿。
  3. groupProgress 计算错误,过多的 task 中,有时会往回跳。比如:0.5->0.55->0.2->0.6 这种。

切换一组任务的暂停/恢复任务的状态的问题

切换一组任务的暂停/恢复任务几次后,其中的单个任务下载完成后执行下一个任务时会没有任何响应,不会响应下载的回调,也不会出错。操作一次就能下载成功一个任务,但下一个不会自动开始。

暂停

[[[FKDownloadManager manager] acquireWithTag:xx] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
                    [[FKDownloadManager manager] suspend:obj.url];
                }];

恢复

[[[FKDownloadManager manager] acquireWithTag:xx] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
                    [[FKDownloadManager manager] resume:obj.url];
                }];

FKMessager 监听有时会出现监听不被移除的问题

设备型号:iPhone7 Plus
系统版本:12.4.1
操作步骤:运行Demo,下载一个文件,进入下载管理页面,等待下载完成,完全退出Demo,再次运行Demo,直接打开下载管理页面。
期望结果: FKMessager messagerWithURL的监听回调只执行一次然后就移除监听,并且不在回调
运行结果:监听不会被移除,并且该Block代码块一直在被执行
您的代码:您的Demo,什么都没有改
报错信息:
image

addedBlock 赋值问题

[[FKDownloadManager manager] addTasksWithArray:tasks tag:""];
[FKDownloadManager manager].addedBlock = ^{
           //
};

当执行较少的任务时,这样使用会存在 block 还未赋值的问题。虽然将赋值放在前面能解决,建议可以添加对一组任务操作的状态同步。

另外非常感谢,目前使用这个库已经满足我 MP4 和 M3U8 的下载需求了。

文件可能重名问题

如果不指定 task 的 filename,使用 url.lastPathComponent 作为文件名时,可能存在 url 不同,但是文件名相同的问题。

运用大侠库的时候 crash, 求解决,万分感谢!!!

设备型号:iPhone
系统版本:13。5.1
操作步骤:demo 运行 资源列表 添加下载任务 添加了一屏幕多点 就是使得列表可以滑动 不管是在下载中还是下载完后 下载管理中上下多滑几次就会crash 必现
期望结果:由于项目中用到了大侠的库,求解决,万分感谢
运行结果:
您的代码:
报错信息:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <NSConcreteMapTable: 0x102613a10> was mutated while being enumerated.'

restory 报错

image

下载中强制重启app,- (void)restore:(NSURLSessionDownloadTask *)task 方法中,self.resumeData 为 nil 时会报错

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.