Воспроизведение зашифрованного видео с помощью AVPlayer
Я реализую приложение, содержащее видеоплеер. По некоторым причинам видеофайлы зашифрованы с помощью AES, и размер этих файлов может быть довольно большим, чтобы не загружать его в ОЗУ как одну часть. Я ищу способ воспроизвести его с помощью AVPlayer.
Пробовал:
1) Пользовательский NSURLProtocol, как предлагается здесь http://aptogo.co.uk/2010/07/protecting-resources/
Не работает, я предлагаю, чтобы AVPlayer использовал его собственный, а мой не вызывался.
2) Используйте AVAsset для измельчения видео в небольших кусках, а затем подайте их на AVPlayer - не удалось, потому что для этого нет API в AVPlayer.
Было бы полезно получить любое обходное решение:)
Ответы
Ответ 1
У вас есть 2 варианта:
-
Если таргетинг на iOS 7 и новее, проверьте AVAssetResourceLoaderDelegate. Это позволяет вам делать то, что было бы с пользовательским NSURLProtocol, но специально для AVPlayer.
-
Эмулировать HTTP-сервер с поддержкой заголовка Range и указывать AVURLAsset на localhost.
Я реализовал # 2 раньше и могу предоставить дополнительную информацию, если это необходимо.
Ответ 2
Я только что загрузил образец проекта Apple https://developer.apple.com/library/ios/samplecode/sc1791/Listings/ReadMe_txt.html и, похоже, делает именно то, что вы хотите.
Делегат улавливает каждый вызов AVURLAsset
AVAssetResourceLoader
и составляет новый .m3a8
файл с собственным ключом дешифрования.
Затем он передает плеер всем .ts
URL-адресам файла в m3a8
.
Проект представляет собой хороший обзор того, что можно делать с каналами HLS.