Корректное выполнение автономной загрузки с AVAssetDownloadURLSession - PullRequest
1 голос
/ 14 марта 2019

Я загружаю офлайн-видео благодаря AVAssetDownloadURLSession, AVAssetDownloadDelegate для iOS 11 с использованием методов makeAssetDownloadTask (...) и aggregateAssetDownloadTask (...).

Все работает, но я просто хочу, чтобы пользователи знали о ходе каждой загрузки как можно точнее.

Для этого я использую:

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

- urlSession(_ session: URLSession, aggregateAssetDownloadTask: AVAggregateAssetDownloadTask, didLoad timeRange: CMTimeRange, totalTimeRangesLoaded loadedTimeRanges: [NSValue], timeRangeExpectedToLoad: CMTimeRange, for mediaSelection: AVMediaSelection)

С помощью этих методов я могу рассчитать ход загрузки видео и каждой дорожки (аудио / субтитры) отдельно. Поэтому я предполагаю, что загрузка видео составляет 70%, а для треков - 30%, поделенное на количество треков. Я сохраняю прогресс загрузки каждого элемента во временном словаре (умноженном на их соотношение) и добавляю каждый прогресс для загрузки, чтобы иметь глобальное представление.

В конце концов, он работает нормально, но не так гладко, как ожидалось. Например, я трачу 3 минуты на загрузку контента, но если вес трека невелик, прогресс будет скачок с 70% до 85% за 1 сек (если у меня есть 2 трека для загрузки) и замедлится сразу после этого. Я хотел бы добиться глобального прогресса.

Я определенно не доволен этим решением, но в настоящее время я не нашел другого решения.

У кого-нибудь есть идеи / решения?

Спасибо, ребята

...