Я пытаюсь использовать AVAssetDownloadTask
для загрузки и воспроизведения зашифрованного аудиосодержимого FairPlay в автономном режиме.Я продолжал получать такую ошибку в urlSession:task:didCompleteWithError:
:
Error Domain = AVFoundationErrorDomain Code = -11863 «Операция остановлена» UserInfo = {NSLocalizedFailureReason = Это содержимое больше не доступно., NSLocalizedDescription = Операция остановлена}
Мой поток был:
Все это работало и выполнялось так же, как в примере кода HLSCatalog от Apple .Но загрузка все равно выдала бы мне вышеупомянутую ошибку, даже если подключить тот же список воспроизведения и ключевые URL-адреса к примеру кода, это бы хорошо загрузилось.
Я наконец понял, что AVAssetDownloadTask
будет загружать только AVURLAsset
экземпляр , который уже был передан в потоковом режиме и получил ключи дешифрования (через AVAssetResourceLoaderDelegate
) и который не связан с игроком.Я не могу просто создать новый AVURLAsset
, используя тот же URL-адрес, который уже воспроизводится, и загрузить его.Похоже, что для загрузки произвольного контента FairPlay мне необходимо:
- Сделать
AVURLAsset
- Сделать
AVPlayer
и установить его громкость на 0 - Дайте ему актив и воспроизведите его
- Подождите, пока он не запросит свои ключи у загрузчика ресурсов и не начнет играть
- Дайте ему задачу загрузки и отмените связь с игроком
Но это кажется ужасным.Это не может быть правдой.
Итак, мой вопрос: Как загрузить AVURLAsset с шифрованием FairPlay, не передавая этот конкретный экземпляр раньше?