AVAggregateAssetDownloadTask дважды загружает файл m3u8

Я использую AssetPersistenceManager из этого примера Apple: https://developer.apple.com/documentation/avfoundation/media_assets_playback_and_editing/using_avfoundation_to_play_and_persist_http_live_streams Я создаю AVURLAsset с основным URL-адресом плейлиста, затем вызываю downloadStream(for:) с этим активом, и AVAggregateAssetDownloadTask успешно завершает загрузку!

Он сохраняет папку с именем 286943_chapter_01_C955A55455AC0C4E.movpkg, которая содержит загруженные сегменты, мой файл .m3u8 и файл StreamInfoBoot.xml. Файл StreamInfoBook.xml содержит ссылки между файлом локального сегмента (или .frag) и URL-адресом сегмента m3u8.

Однако эти URL-адреса подписаны и сгенерированы Cloudfront. А иногда некоторые URL-адреса в файле .m3u8 не совпадают с URL-адресами в StreamInfoBook.xml из-за параметра Expires в cloudfrount.

Поэтому я думаю, что, возможно, AVAggregateAssetDownloadTask вызывает файл .m3u8 дважды: один раз для сохранения .m3u8 и один раз для загрузки сегментов и записи StreamInfoBook.xml.

Кто-нибудь уже сталкивался с этой проблемой? Что я могу сделать, чтобы проверить, можно ли играть с моим активом в автономном режиме или нет? Есть ли у вас предложения ?

Вот пример несоответствия URL-адресов сегментов.

В загруженном файле .m3u8:

https: //ezvoiznbov32f.cloudfront.net/file/265579/audio/chapter_08_10.mp3?Expires=1576159816&Signature=vfAYZ8ivP7yKeiranpba3R24gTSxexX4Nb1VjbDrR917pyFQqi2DMMMf8gi3LcueKXxv0FITprXzLXV62Py0Ph4nMxp8ixf5qG5sYnW1JcO74BxNfJE~DEurN~yQgczNBOK4b~bEXrDDZId1AweYJrgjZtjSoyUwAGXf~LA_&Key-Pair-Id=APKAAFEFNOSQQ34Q

В StreamInfoBook.xml файле:

https: //ezvoiznbov32f.cloudfront.net/file/265579/audio/chapter_08_10.mp3?Expires=1576159817&Signature=PZ~tqOeIa3Vm26qKTFYU1LCGfvsWNpkUDMi3eFr~EhyRTLj66CDInSwfpoorYjl4Kl4B9eQ1W8ZzTlIMDGvs36wJ235JOszeov23IuIOzAJTlNw7zQYEd4Y1tq~nyZinpFoyDRGk0CelKOhH91Itb3rpQUeMN6lDhO-cq1X1OM_&Key-Pair-Id=APKAAFEFNOSQQ34Q

Я тестирую iOS 13.2


person vmeyer    schedule 12.12.2019    source источник


Ответы (1)


Ну, отвечая себе:

После очень долгих попыток заставить AVAggregateAssetDownloadTask работать в фоновом режиме, пока система убивает приложение, я наконец переключился на AVAssetDownloadTask.

Теперь все работает отлично! Это как волшебство!

Разница между агрегированными и обычными задачами заключается в выборе медиа. Но мне это пока не нужно....

person vmeyer    schedule 19.12.2019