dreamio/Dreamio/VLCNativePlaybackBackend.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
}
}
}