Я следовал руководству по программированию Media Playback от Apple, чтобы загрузить контент HLS. Следующая реализация обычно работает нормально, но иногда и без видимой причины просто перестает работать. Методы делегатов не сообщат ни о ходе загрузки, ни об ошибке. Скачать просто отказаться от начала. Когда это происходит, для возобновления загрузки единственным способом является перезагрузка устройства. Кто-нибудь сталкивается с такой же проблемой? Может ли кто-нибудь указать мне, как это исправить?
func setupAssetDownload() {
// Create new background session configuration.
let configuration = URLSessionConfiguration.background(withIdentifier: "Player")
configuration.isDiscretionary = true
configuration.timeoutIntervalForResource = 300
// Create a new AVAssetDownloadURLSession with background configuration, delegate, and queue
downloadSession = AVAssetDownloadURLSession(configuration: configuration,
assetDownloadDelegate: self,
delegateQueue: OperationQueue.main)
}
Создание и настройка сеанса загрузки:
func assetDownload(for item: DownloadItem) {
let asset = AVURLAsset(url: item.url)
asset.resourceLoader.preloadsEligibleContentKeys = true
asset.resourceLoader.setDelegate(self, queue: DispatchQueue.global(qos: .default))
// Create new AVAssetDownloadTask for the desired asset
guard let task = downloadSession.makeAssetDownloadTask(asset: asset,
assetTitle: item.title!,
assetArtworkData: data,
options: [AVAssetDownloadTaskMinimumRequiredMediaBitrateKey: 2_787_000])
else {
status[item.url!] = .error
return
}
task.taskDescription = item.title!
// Start task and begin download
task.resume()
}