问题标签 [avassetdownloadstoragemanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
438 浏览

ios - 如何防止 iOS 自动删除为离线播放而保存的 HLS 内容?

HLS 离线播放是在 WWDC 2016 的这次会议上宣布的,在 iOS 10 中。但是在大约 21:20 标记时,演示者正在谈论如何不应该将下载的文件从AVAssetDownloadTask放置它们的位置移动,因为系统可能需要如果磁盘空间不足,请删除它们。文档中也提到了这种可能性:

重要的

如果可用磁盘空间极低,操作系统可能会自动删除下载的资产。在您向用户展示资产可用于播放之前,请验证该资产是否存在并且可以离线播放。

我正在构建一个应用程序来使用 HLS 播放 DRM 的音频内容,并且我希望同时支持流式传输和下载,以便用户可以保存他们想要的文件以供离线播放。但是,如果下载的文件在未经用户许可的情况下被删除,那将是一种糟糕的体验。

所以我的问题是:如何防止系统删除下载的文件?即使文档明确表示不要移动它们,我可以移动它们吗?有没有其他方法可以下载文件?iOS 11 中有一个新类AVAssetDownloadStorageManager,支持将存储管理策略设置为默认或重要...是否可以保证系统不会在不至少先询问用户的情况下删除“重要”下载的媒体?Roger Pantos在 WWDC 2017 的 HTTP 实时流媒体进展中表示,系统可能会在询问用户后删除资产以为软件更新腾出空间,但该声明并不意味着资产不会因为其他原因而自动删除。

0 投票
1 回答
427 浏览

ios - NSURLSessions 和 HLS 视频缓存 - 部分下载无法删除

我正在尝试在用户观看 HLS 视频流(非实时)时对其进行缓存。为此,我们设置了一个类似于苹果在此处推荐的 AvAssetDownloadTask:

https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/MediaPlaybackGuide/Contents/Resources/en.lproj/HTTPLiveStreaming/HTTPLiveStreaming.html

这种方法效果很好,因为我们可以将下载任务中的 url 资产传递给同时下载和流式传输。

我们希望将此下载临时缓存到应用程序的视频下载部分,这几乎可以在 NSUrlSessionTask 委托中本地工作,除非我们要删除部分数据。

如果下载完成,我们会收到最终下载位置,并且可以添加过期时间或稍后手动删除文件。但是,如果下载仅部分完成,我无法找到删除部分下载视频的方法。

我希望取消任务并使任务无效可以清理部分下载,但似乎并非如此,上面的链接中还有更多苹果状态: In the case where a download is canceled, and there is no intention of resuming it, your app is responsible for deleting the portion of the asset already downloaded to a user’s device.

但是,没有任何关于如何实现这一点的建议。删除此部分下载似乎应该很容易访问,但尚未找到实现此目的的方法。

手动迭代视频下载目录似乎也不显示这些部分下载;但它们在我们的应用程序设置的主要 iOS 设置的“下载的视频”部分中可见。

想知道是否其他人已经解决了这个问题或有如何完成的建议。