【发布时间】:2019-03-14 10:30:04
【问题描述】:
感谢 AVAssetDownloadURLSession、iOS 11 的 AVAssetDownloadDelegate 使用 makeAssetDownloadTask(...) 和 aggregateAssetDownloadTask(...) 方法下载离线视频。
一切正常,但我只想让用户尽可能准确地了解每次下载的进度。
为此,我使用:
- urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didLoad timeRange: CMTimeRange, totalTimeRangesLoaded loadedTimeRanges: [NSValue], timeRangeExpectedToLoad: CMTimeRange)
- urlSession(_ session: URLSession, aggregateAssetDownloadTask: AVAggregateAssetDownloadTask, didLoad timeRange: CMTimeRange, totalTimeRangesLoaded loadedTimeRanges: [NSValue], timeRangeExpectedToLoad: CMTimeRange, for mediaSelection: AVMediaSelection)
通过这些方法,我可以分别计算视频和每个曲目(音频/字幕)的下载进度。所以我假设视频占下载量的 70%,而曲目的下载量是 30% 除以曲目数量。 我将每个项目的下载进度存储在一个临时字典中(乘以它们的比率),并添加每个下载进度以具有全局表示。
最终它运行良好,但并不像预期的那么顺利。例如,我花了 3 分钟下载内容,但如果曲目的权重很轻,则进度会在 1 秒内从 70% 跃升至 85%(如果我有 2 首曲目要下载),然后就会变慢。 我想要一个全球性的进步。
我对这个解决方案绝对不满意,但我目前没有找到其他解决方案。
你们中的一些人有什么想法/解决方案吗?
谢谢大家
【问题讨论】:
-
我很想看看你的代码,我遇到了同样的问题,你的解决方案比我现在的更好。
-
遗憾的是我还没有找到解决方案,因为我没有足够的时间找到更好的方法。
-
完全相同的问题 :( 很遗憾他们没有为它添加全局进度。@Guillaume 你能分享你的计算作为参考吗?
-
@mgyky 其实我确实离开了公司,也选择使用其他公司的SDK,不是开源的,所以很抱歉,我不能告诉你。但是,在那之前我所做的是一个近似值。我有 1 个视频文件和 4 个曲目。所以用视频 = 80% 和 4 个轨道 = 20% 进行了计算。它可以正常工作,但由于视频的侧面以及轨道的大小和类型,它可能会很快结束。
-
@Guillaume 感谢您的快速回答 :) 实际上,我观看了 WWDC 2020 探索如何下载和播放 HLS 离线会话,主持人也说了同样的话。无论如何,在开始这部分代码之前,我想看一个例子:) 我的曲目是动态的,有时是 2 个声音,2 个字幕,有时只有 1 个声音,仅此而已。我会弄清楚。谢谢你,祝你在新职位上一切顺利。
标签: ios download avfoundation offline progress