1. 离线播放
iOS10开始,我们可以使用AVFoundation对HLS资源进行下载。下面我们看一下下载的工作流。
我们使用AVAssetDownloadURLSession进行下载,它是NSURLSession的子类,专门用于资源的下载, 在创建的时候使用URLSessionConfiguration进行配置
funcsetupAssetDownload(){
// 1. 后台session配置
configuration=URLSessionConfiguration.background(withIdentifier:downloadIdentifier)
// 2.创建 AVAssetDownloadURLSession,设置代理及回调线程
downloadSession=AVAssetDownloadURLSession(configuration:configuration,
assetDownloadDelegate:self,
delegateQueue:OperationQueue.main)
}
然后我们创建下载任务,并开始下载
// 3.创建asset
leturl=URL(string:"https://devimages-cdn.apple.com/samplecode/avfoundationMedia/AVFoundationQueuePlayer_HLS2/master.m3u8")!
letasset=AVURLAsset(url:url)
// 4.创建下载任务
letdownloadTask=downloadSession.makeAssetDownloadTask(asset:asset,
assetTitle:"master",
assetArtworkData:nil,
options:nil)
// 5.开始下载
downloadTask?.resume()
AVAssetDownloadTask 是NSURLSessionTask的子类, 这意味着下载任务可以被挂起或者是取消。如果你取消了一个下载任务,你在程序中删除已经下载的数据。
App有可能会被系统终止,如果我们还有下载任务,在重新启动的时候需要进行任务恢复
funcrestorePendingDownloads(){
// 1. 根据Identifierr创建URLSessionConfiguration
configuration=URLSessionConfiguration.background(withIdentifier:downloadIdentifier)