需要强大的 *AVKit用户 * 和 *AVFoundation用户 * 的帮助
我正在努力恢复以前部分下载的HLS流。
网址,我有,改变每24小时。如果用户试图恢复下载-它只是重新开始,并忽略较早的下载进度。
我使用来自apple的代码-Using AVFoundation to Play and Persist HTTP Live Streams
现在它是这样工作的:
1.通过assetDownloadURLSession.aggregateAssetDownloadTask
流开始下载
1.用户按下暂停。在这种情况下,我将所有进度保存到本地文件,并使用bookmarkData()来保持本地URL:
let bookmark = try tempDownloadUrl?.bookmarkData()
userDefaults.set(bookmark, forKey: assetId)
1.链接失效,用户从AVAssetDownloadDelegate
点击恢复-〉didFinishDownloadingTo
,立即触发403 -禁止。
1.我尝试使用assetDownloadURLSession.aggregateAssetDownloadTask
创建新的AVAggregateAssetDownloadTask
并插入文件的本地URL(.movpkg)来重新启动下载任务。如果链接没有更改,则一切按预期工作。
1."我们在这里"
一些想法:
- 也许我们可以设法复制下载量,如果m3u8块到新的下载任务
- 也许我们可以更改之前下载的**.movpkg**文件中的某种 serverURL。
或者一些新的东西。(我可以分享一个链接,死亡后2分钟的测试目的)
先谢了。
1条答案
按热度按时间unftdfkk1#
好吧。我知道怎么处理这么复杂的任务了。
主要的事情是更新我们的本地.movpkg文件中的死NetworkURL到一个新的闪亮的NetworkURL。
首先,我们需要读取本地文件.movpkg文件的内容。
很好,现在我们需要遍历本地目录并找到**.xml和.frag**文件,它们保存着我们的旧URL。
[* 很抱歉代码有些混乱,它不是可用于生产的代码,它只是指出了解决问题的正确方向。请根据您自己的目的重构它 *]:
因此,在上面的代码中,我们搜索我们的oldUrlString并将其替换为newUrlString。您也可以从xml文件或CoreData(如果您将oldUrl存储在某个地方)获得oldUrlString。
在更新之前,从oldUrlString和newUrlString中删除最后一个路径组件。因此,链接类似于:
而不是
这是因为块是这样放置的,如果你不从路径中删除chunklist_b1728000.m3u8,替换将不起作用:
就这样,URL替换后,简历下载成功。