AVAssetDownloadTask无法在IOS 10.3设备

时间:2017-12-21 17:02:41

标签: ios swift download avassetdownloadtask

我实际上是在应用程序中实现下载功能。 我正面临一个非常奇怪的错误AVAssetDownloadTask。

确实在当天开始下载资产的实施工作正在进行中。

当我在新创建的resume上调用AssetDownloadTask函数时,下载立即开始,AVAssetDownloadDelegate函数

  

func urlSession(
              _ session:URLSession,
                assetDownloadTask:AVAssetDownloadTask,
                didLoad timeRange:CMTimeRange,
                totalTimeRangesLoaded loadedTimeRanges:[NSValue],
                timeRangeExpectedToLoad:CMTimeRange
                )

被调用并显示了主动下载任务的进度。

但在当天的某个时刻,这个过程停止了。现在,当我尝试启动/恢复时AssetDownloadTask没有任何反应。 没有调用AVAssetDownloadDelegate函数来进行下载。这就像什么都没发生一样。我甚至没有收到错误。

奇怪的是,如果我取消了AssetDownloadTask

  

func urlSession(   _ session:URLSession,   assetDownloadTask:AVAssetDownloadTask,   didFinishDownloadingTo location:URL   )

  

func urlSession(
     _ session: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)")


}
}

提前感谢您提供任何帮助,让我试一试。 无法弄清楚它是否来自设备/代码/操作系统版本

致以最诚挚的问候,

马丁

0 个答案:

没有答案