NSURLSessions и HLS кеширование видео - частичные загрузки не могут быть удалены - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь кэшировать видеопоток HLS (не в режиме реального времени), пока пользователь смотрит его.Чтобы сделать это, мы настроили AvAssetDownloadTask, аналогично тому, как Apple рекомендует здесь:

https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/MediaPlaybackGuide/Contents/Resources/en.lproj/HTTPLiveStreaming/HTTPLiveStreaming.html

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

Мы хотим, чтобы эта загрузка временно кэшировалась в разделе загрузок видео приложения, это почти естественным образом работает с делегатом NSUrlSessionTask, за исключением случаев, когда мы хотим удалить частичные данные.

Если загрузкаПосле завершения мы получаем окончательное местоположение для загрузки и можем добавить время истечения или вручную удалить файл позже.Однако, если загрузка только частично завершена, я не могу найти способ удалить частично загруженное видео.

Я надеялся, что отмена и аннулирование задачи очистит частичную загрузку, но, похоже, это не так.больше яблочных состояний в ссылке выше: In the case where a download is canceled, and there is no intention of resuming it, your app is responsible for deleting the portion of the asset already downloaded to a user’s device.

Однако нет никаких рекомендаций, как этого добиться.Кажется, что удаление этой частичной загрузки должно быть легко доступным, но еще предстоит найти способ достичь этого.

Ручная итерация каталога загрузки видео, похоже, также не отображает эти частичные загрузки;тем не менее, они видны в разделе «загруженные видео» настроек нашего приложения в основных настройках iOS.

Интересно, решил ли кто-нибудь еще эту проблему или есть рекомендации по ее выполнению.

1 Ответ

0 голосов
/ 23 мая 2018

Нашел ответ, вместо того, чтобы приостановить задачу загрузки, его нужно отменить, как только мы захотим завершить частичную загрузку в кэш, после чего будет запущено

- (void)URLSession:(NSURLSession *)session assetDownloadTask:(AVAssetDownloadTask *)assetDownloadTask didFinishDownloadingToURL:(NSURL *)location {

, в которомпоследний URL указан.

...