我实际上是在应用程序中实现下载功能。我面临着一个非常奇怪的 AVAssetDownloadTask 错误。
实际上,在一天开始时,下载资产的实现是有效的。
当我resume
在我AssetDownloadTask
的新创建的函数上调用该函数时,下载立即开始并且该AVAssetDownloadDelegate
函数
func urlSession(
_会话:URLSession,
assetDownloadTask:AVAssetDownloadTask,
didLoad timeRange:CMTimeRange,
totalTimeRangesLoadedloadedTimeRanges:[NSValue],
timeRangeExpectedToLoad:CMTimeRange
)
被调用并显示活动下载任务的进度。
但是在一天中的某一时刻,该过程停止了工作。现在,当我尝试启动/恢复时,AssetDownloadTask
什么也没有发生。AVAssetDownloadDelegate
下载进程不会调用任何函数。就像什么都没有发生一样。我什至没有收到错误。
奇怪的是,如果我取消了AssetDownloadTask
这个
func urlSession(_会话:URLSession,assetDownloadTask:AVAssetDownloadTask,didFinishDownloadingTo location:URL)
和
func urlSession(
_会话:URLSession,
任务:URLSessionTask,
didCompleteWithError错误:错误?
)
正确地调用表明该过程似乎以某种方式暂停。
在 IOS 11 上运行的设备上,我似乎没有任何这些问题。
我想知道你们中是否有人有一个想法可以解释为什么我AssetDownloadTask
无法在 IOS 10.3 设备上启动/恢复。
您将在下面找到我的下载管理器的几个部分。
let backgroundConfiguration = URLSessionConfiguration.background(withIdentifier: "\(Bundle.main.bundleIdentifier!).background")
// Create the AVAssetDownloadURLSession using the configuration.
assetDownloadURLSession = AVAssetDownloadURLSession(configuration: backgroundConfiguration, assetDownloadDelegate: self, delegateQueue: OperationQueue.main)
private var activeDownloadsMap = [AVAssetDownloadTask: XXXXXXX]()
func downloadAsset(for asset: XXXXX) {
// Get the default media selections for the asset's media selection groups.
let preferredMediaSelection = asset.geturlAsset().preferredMediaSelection
if #available(iOS 10.0, *) {
guard let task = assetDownloadURLSession.makeAssetDownloadTask(asset: asset.geturlAsset(),
assetTitle: asset.title,
assetArtworkData: nil,
options: nil) else { return }
// To better track the AVAssetDownloadTask we set the taskDescription to something unique for our sample.
task.taskDescription = asset.title
activeDownloadsMap[task] = asset
task.resume()
} else {
return
}
}
extension DownloadManager: AVAssetDownloadDelegate {
public func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didLoad timeRange: CMTimeRange, totalTimeRangesLoaded loadedTimeRanges: [NSValue], timeRangeExpectedToLoad: CMTimeRange) {
// This delegate callback should be used to provide download progress for your AVAssetDownloadTask.
guard let asset = activeDownloadsMap[assetDownloadTask] else { return }
var percentComplete = 0.0
for value in loadedTimeRanges {
let loadedTimeRange: CMTimeRange = value.timeRangeValue
percentComplete +=
CMTimeGetSeconds(loadedTimeRange.duration) / CMTimeGetSeconds(timeRangeExpectedToLoad.duration)
}
debugPrint("DOWNLOAD: Progress \( assetDownloadTask) \(percentComplete)")
}
}
提前感谢您为我提供的任何帮助以尝试解决此问题。无法确定它是否来自设备/代码/操作系统版本
此致,
马丁