add native stream seek cache proxy

This commit is contained in:
dirtydishes 2026-05-25 16:22:55 -04:00
parent 4815c3a7f6
commit bccae25937
8 changed files with 849 additions and 2 deletions

View file

@ -11,6 +11,7 @@ final class NativePlayerViewController: UIViewController {
private var attachedSubtitleURLs: Set<URL>
private var audioMenuSignature: String?
private var captionsMenuSignature: String?
private var streamCacheProxy: NativeStreamCacheProxy?
var onDismiss: (() -> Void)?
private let loadingView: UIActivityIndicatorView = {
@ -137,7 +138,8 @@ final class NativePlayerViewController: UIViewController {
configureBackend()
configureLayout()
startStartupTimer()
backend.play(request: request)
let playbackRequest = startProxyPlaybackRequest(for: request)
backend.play(request: playbackRequest)
addSubtitleCandidates(request.subtitleCandidates)
}
@ -192,9 +194,28 @@ final class NativePlayerViewController: UIViewController {
controlsTimer?.invalidate()
progressTimer?.invalidate()
backend.stop()
streamCacheProxy?.stop()
streamCacheProxy = nil
onDismiss?()
}
private func startProxyPlaybackRequest(for request: NativePlaybackRequest) -> NativePlaybackRequest {
guard request.playbackURL.scheme?.lowercased().hasPrefix("http") == true else {
return request
}
let proxy = NativeStreamCacheProxy(session: NativeStreamCacheProxy.Session(request: request))
do {
let proxyURL = try proxy.start()
streamCacheProxy = proxy
return request.withPlaybackURL(proxyURL)
} catch {
#if DEBUG
print("[DreamioStreamProxy] start-failed error=\(error.localizedDescription)")
#endif
return request
}
}
private func resolveSubtitleCandidates(_ candidates: [SubtitleCandidate]) async -> [SubtitleCandidate] {
var resolved: [SubtitleCandidate] = []
for candidate in candidates {