Загрузка содержимого HLS не начинается - PullRequest
1 голос
/ 08 марта 2019

Я следовал руководству по программированию 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()
}
...