Load audio and video together with one command with MPV

This commit is contained in:
Arkadiusz Fal 2022-05-30 17:36:26 +02:00
parent 26ef360b2a
commit 48ba498183
2 changed files with 30 additions and 20 deletions

View File

@ -153,28 +153,30 @@ final class MPVBackend: PlayerBackend {
self.stop()
if let url = stream.singleAssetURL {
self.onFileLoaded = {
updateCurrentStream()
startPlaying()
DispatchQueue.main.async { [weak self] in
guard let self = self else {
return
}
self.client.loadFile(url, time: time) { [weak self] _ in
self?.isLoadingVideo = true
}
} else {
self.onFileLoaded = { [weak self] in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
self?.client.addAudio(stream.audioAsset.url) { _ in
updateCurrentStream()
startPlaying()
}
if let url = stream.singleAssetURL {
self.onFileLoaded = {
updateCurrentStream()
startPlaying()
}
}
self.client.loadFile(stream.videoAsset.url, time: time) { [weak self] _ in
self?.isLoadingVideo = true
self?.pause()
self.client.loadFile(url, time: time) { [weak self] _ in
self?.isLoadingVideo = true
}
} else {
self.onFileLoaded = { [weak self] in
updateCurrentStream()
startPlaying()
}
self.client.loadFile(stream.videoAsset.url, audio: stream.audioAsset.url, time: time) { [weak self] _ in
self?.isLoadingVideo = true
self?.pause()
}
}
}
}

View File

@ -103,13 +103,21 @@ final class MPVClient: ObservableObject {
}
}
func loadFile(_ url: URL, time: CMTime? = nil, completionHandler: ((Int32) -> Void)? = nil) {
func loadFile(_ url: URL, audio: URL? = nil, time: CMTime? = nil, completionHandler: ((Int32) -> Void)? = nil) {
var args = [url.absoluteString]
var options = [String]()
if let time = time {
args.append("replace")
args.append("start=\(Int(time.seconds))")
options.append("start=\(Int(time.seconds))")
}
if let audioURL = audio?.absoluteString {
options.append("audio-files-append=\"\(audioURL)\"")
}
args.append(options.joined(separator: ","))
command("loadfile", args: args, returnValueCallback: completionHandler)
}