Я загружаю офлайн-видео благодаря 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 трека для загрузки) и замедлится сразу после этого.
Я хотел бы добиться глобального прогресса.
Я определенно не доволен этим решением, но в настоящее время я не нашел другого решения.
У кого-нибудь есть идеи / решения?
Спасибо, ребята