mirror of
https://github.com/dirtydishes/dreamio.git
synced 2026-06-06 13:37:24 +00:00
fix native playback stream resolution
This commit is contained in:
parent
b15e4d640e
commit
d46004a98e
11 changed files with 588 additions and 16 deletions
|
|
@ -30,21 +30,21 @@ final class VLCNativePlaybackBackend: NSObject, NativePlaybackBackend {
|
|||
func play(request: NativePlaybackRequest) {
|
||||
#if canImport(MobileVLCKit)
|
||||
let media = VLCMedia(url: request.playbackURL)
|
||||
var headers = ["Referer": request.referer]
|
||||
if let userAgent = request.userAgent {
|
||||
headers["User-Agent"] = userAgent
|
||||
}
|
||||
|
||||
let headerValue = headers
|
||||
let headerValue = request.headers
|
||||
.map { "\($0.key): \($0.value)" }
|
||||
.joined(separator: "\r\n")
|
||||
media.addOption(":http-referrer=\(request.referer)")
|
||||
if let userAgent = request.userAgent {
|
||||
media.addOption(":http-user-agent=\(userAgent)")
|
||||
}
|
||||
media.addOption(":http-header=\(headerValue)")
|
||||
if !headerValue.isEmpty {
|
||||
media.addOption(":http-header=\(headerValue)")
|
||||
}
|
||||
|
||||
mediaPlayer.media = media
|
||||
#if DEBUG
|
||||
print("[DreamioVLC] opening url=\(URLRedactor.redactedURLString(request.playbackURL.absoluteString))")
|
||||
#endif
|
||||
mediaPlayer.play()
|
||||
#else
|
||||
onFailure?(NativePlaybackError.backendUnavailable)
|
||||
|
|
@ -54,6 +54,7 @@ final class VLCNativePlaybackBackend: NSObject, NativePlaybackBackend {
|
|||
func stop() {
|
||||
#if canImport(MobileVLCKit)
|
||||
mediaPlayer.stop()
|
||||
mediaPlayer.drawable = nil
|
||||
mediaPlayer.media = nil
|
||||
#endif
|
||||
}
|
||||
|
|
@ -62,14 +63,40 @@ final class VLCNativePlaybackBackend: NSObject, NativePlaybackBackend {
|
|||
#if canImport(MobileVLCKit)
|
||||
extension VLCNativePlaybackBackend: VLCMediaPlayerDelegate {
|
||||
func mediaPlayerStateChanged(_ aNotification: Notification) {
|
||||
#if DEBUG
|
||||
print("[DreamioVLC] state=\(stateName(mediaPlayer.state))")
|
||||
#endif
|
||||
switch mediaPlayer.state {
|
||||
case .opening, .buffering, .playing:
|
||||
case .buffering, .playing:
|
||||
onReady?()
|
||||
case .error:
|
||||
onFailure?(NativePlaybackError.backendUnavailable)
|
||||
onFailure?(NativePlaybackError.playbackFailed)
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
private func stateName(_ state: VLCMediaPlayerState) -> String {
|
||||
switch state {
|
||||
case .opening:
|
||||
return "opening"
|
||||
case .buffering:
|
||||
return "buffering"
|
||||
case .playing:
|
||||
return "playing"
|
||||
case .ended:
|
||||
return "ended"
|
||||
case .stopped:
|
||||
return "stopped"
|
||||
case .error:
|
||||
return "error"
|
||||
case .paused:
|
||||
return "paused"
|
||||
case .esAdded:
|
||||
return "elementary-stream-added"
|
||||
@unknown default:
|
||||
return "unknown"
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue