mirror of
https://github.com/dirtydishes/dreamio.git
synced 2026-06-06 13:37:24 +00:00
add native debrid stream playback
This commit is contained in:
parent
3df2e2b833
commit
d28540ce98
12 changed files with 936 additions and 62 deletions
58
Dreamio/VLCNativePlaybackBackend.swift
Normal file
58
Dreamio/VLCNativePlaybackBackend.swift
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import UIKit
|
||||
import MobileVLCKit
|
||||
|
||||
final class VLCNativePlaybackBackend: NSObject, NativePlaybackBackend {
|
||||
let view = UIView()
|
||||
var onReady: (() -> Void)?
|
||||
var onFailure: ((Error) -> Void)?
|
||||
|
||||
private let mediaPlayer = VLCMediaPlayer()
|
||||
|
||||
override init() {
|
||||
super.init()
|
||||
mediaPlayer.delegate = self
|
||||
view.backgroundColor = .black
|
||||
}
|
||||
|
||||
func prepare(in viewController: UIViewController) {
|
||||
mediaPlayer.drawable = view
|
||||
}
|
||||
|
||||
func play(request: NativePlaybackRequest) {
|
||||
let media = VLCMedia(url: request.playbackURL)
|
||||
var headers = ["Referer": request.referer]
|
||||
if let userAgent = request.userAgent {
|
||||
headers["User-Agent"] = userAgent
|
||||
}
|
||||
|
||||
let headerValue = 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)")
|
||||
|
||||
mediaPlayer.media = media
|
||||
mediaPlayer.play()
|
||||
}
|
||||
|
||||
func stop() {
|
||||
mediaPlayer.stop()
|
||||
mediaPlayer.media = nil
|
||||
}
|
||||
}
|
||||
|
||||
extension VLCNativePlaybackBackend: VLCMediaPlayerDelegate {
|
||||
func mediaPlayerStateChanged(_ aNotification: Notification) {
|
||||
switch mediaPlayer.state {
|
||||
case .opening, .buffering, .playing:
|
||||
onReady?()
|
||||
case .error:
|
||||
onFailure?(NativePlaybackError.backendUnavailable)
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue