Я создаю систему воспроизведения hls < /strong> в Swift, где я загружаю: < /p>
- Playlist
Код: Выделить всё
.m3u8 - видео сегменты
Код: Выделить всё
.ts - aes-128 local.key
Код: Выделить всё
❌ Unknown status
NSURLConnection finished with error - code -1002
❌ Failed: unsupported URL
Код: Выделить всё
#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 или скрытую Gotcha с Avassetresourceloader , связанный с Local.Key ?AddInstanceForFactory: No factory registered for id
NSURLConnection finished with error - code -1002
< /code>
playlist.m3u8
local.key
360p_000.ts
360p_001.ts
...
< /code>
Подробнее здесь: https://stackoverflow.com/questions/797 ... cal-key-an
Мобильная версия