mirror of
https://github.com/dirtydishes/dreamio.git
synced 2026-06-06 13:37:24 +00:00
58 lines
1.6 KiB
Swift
58 lines
1.6 KiB
Swift
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
|
|
}
|
|
}
|
|
}
|