Я использую 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