## Название: AvPlayer не может воспроизводить автономный AES -128 зашифрованный HLS с Local.Key и Local Playlist.m3u8 (оIOS

Программируем под IOS
Ответить
Anonymous
 ## Название: AvPlayer не может воспроизводить автономный AES -128 зашифрованный HLS с Local.Key и Local Playlist.m3u8 (о

Сообщение Anonymous »


Я создаю систему воспроизведения hls < /strong> в Swift, где я загружаю: < /p> Скачанный список воспроизведения и сегменты работают нормально при открытии в VLC Player [/b] с использованием локального плейлиста.m3u8 . Но это не удается в AvPlayer со следующей ошибкой:

Код: Выделить всё

❌ Unknown status
NSURLConnection finished with error - code -1002
❌ Failed: unsupported URL
my playlist.m3u8 переписано

Код: Выделить всё

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="local.key",IV=0x56355f45e03c425f43ad7eeac956d1b8
#EXTINF:4.000000,
360p_000.ts
#EXTINF:4.000000,
360p_001.ts
...
< /code>
Я заменил ключевой uri < /code> на local.key < /code> и убедился, что файл доступен в той же папке, что и плейлист.var components = URLComponents(url: playlistURL, resolvingAgainstBaseURL: false)!
components.scheme = "localhls" // AVAssetResourceLoader trigger
let customURL = components.url!

let asset = AVURLAsset(url: customURL)
let loader = LocalHLSKeyLoader(keyFileURL: destinationFolder.appendingPathComponent("local.key"))
asset.resourceLoader.setDelegate(loader, queue: .main)

let item = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: item)

let vc = AVPlayerViewController()
vc.player = player
UIApplication.shared.windows.first?.rootViewController?.present(vc, animated: true) {
player.play()
}
< /code>

 Пользовательский загрузчик ресурсов (local.key handler): < /h2>
class LocalHLSKeyLoader: NSObject, AVAssetResourceLoaderDelegate {
let keyFileURL: URL

init(keyFileURL: URL) {
self.keyFileURL = keyFileURL
}

func resourceLoader(_ loader: AVAssetResourceLoader,
shouldWaitForLoadingOfRequestedResource request: AVAssetResourceLoadingRequest) -> Bool {
guard
let url = request.request.url,
url.absoluteString.contains("local.key"),
let dataRequest = request.dataRequest
else {
return false
}

do {
let keyData = try Data(contentsOf: keyFileURL)
dataRequest.respond(with: keyData)
request.finishLoading()
return true
} catch {
request.finishLoading(with: error)
return false
}
}
}
✅ Что работает:

All .ts , .m3u8 и local.key файлы присутствуют в приложении.

Код: Выделить всё

VLC< /code> успешно воспроизводит один и тот же автономный список воспроизведения < /li>
 Я правильно переписываю URL -министры плейлиста < /li>
 Приложение с чтением доступа ко всем файлам < /li>
< /ul>

 ❌ Что не: < /h2>

 ❌.AVPlayer
сбои с неподдерживаемым URL (-1002) или остается застрявшим в. .m3u8 , .ts и local.key ?
Есть ли лучший способ переписать URL или скрытую Gotcha с Avassetresourceloader , связанный с Local.Key ?AddInstanceForFactory: No factory registered for id
NSURLConnection finished with error - code -1002
< /code>

📂 локальная структура папок (документы /myofflinehls): < /h2>
playlist.m3u8
local.key
360p_000.ts
360p_001.ts
...
< /code>

💡 Любая помощь, идеи или рабочая пример! < /h2>

Подробнее здесь: https://stackoverflow.com/questions/797 ... cal-key-an
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»