diff --git a/Sources/Firelink/AddDownloadsView.swift b/Sources/Firelink/AddDownloadsView.swift index ee48e72..014a4f0 100644 --- a/Sources/Firelink/AddDownloadsView.swift +++ b/Sources/Firelink/AddDownloadsView.swift @@ -603,7 +603,8 @@ struct AddDownloadsView: View { for: item.url, cookieSource: settings.mediaCookieSource, credentials: metadataCredentials(for: item.url), - transferOptions: transferOptions + transferOptions: transferOptions, + proxyConfiguration: settings.downloadProxyConfiguration ) fetchedItem.mediaMetadata = metadata fetchedItem.mediaOptions = options diff --git a/Sources/Firelink/MediaDownloadEngine.swift b/Sources/Firelink/MediaDownloadEngine.swift index f46cfdb..3266033 100644 --- a/Sources/Firelink/MediaDownloadEngine.swift +++ b/Sources/Firelink/MediaDownloadEngine.swift @@ -45,6 +45,9 @@ final class MediaDownloadEngine: @unchecked Sendable { "--newline", "--ffmpeg-location", ffmpegURL.path, "--force-ipv4", + "--live-from-start", + "--extractor-args", "youtube:player_client=ios,web", + "--compat-options", "no-youtube-unavailable-videos", "-o", item.destinationPath ] diff --git a/Sources/Firelink/MediaExtractionEngine.swift b/Sources/Firelink/MediaExtractionEngine.swift index 7570a5a..e42720e 100644 --- a/Sources/Firelink/MediaExtractionEngine.swift +++ b/Sources/Firelink/MediaExtractionEngine.swift @@ -69,7 +69,8 @@ enum MediaExtractionEngine { for url: URL, cookieSource: BrowserCookieSource, credentials: DownloadCredentials?, - transferOptions: DownloadTransferOptions + transferOptions: DownloadTransferOptions, + proxyConfiguration: DownloadProxyConfiguration ) async throws -> (MediaMetadata, [CleanFormatOption]) { guard let ytDlpURL = await MediaEngineManager.shared.binaryPath(for: .ytDlp), FileManager.default.isExecutableFile(atPath: ytDlpURL.path) else { @@ -77,7 +78,20 @@ enum MediaExtractionEngine { } let ytDlpPath = ytDlpURL.path - var args = ["-J", "--no-warnings", "--ignore-no-formats-error", "--no-playlist", "--force-ipv4"] + var args = [ + "-J", + "--no-warnings", + "--ignore-no-formats-error", + "--no-playlist", + "--force-ipv4", + "--extractor-args", "youtube:player_client=ios,web", + "--compat-options", "no-youtube-unavailable-videos" + ] + + if let proxyURI = proxyConfiguration.customProxyURI, proxyConfiguration.mode == .custom { + args.append(contentsOf: ["--proxy", proxyURI]) + } + appendCommonArguments(to: &args, cookieSource: cookieSource, credentials: credentials, transferOptions: transferOptions) args.append(url.absoluteString)