perf(media): optimize yt-dlp extraction speed and fix proxy propagation

- Add '--extractor-args youtube:player_client=ios,web' to bypass heavy JS challenge solving
- Add '--compat-options no-youtube-unavailable-videos' to skip blocked videos
- Fix missing proxy configuration in MediaExtractionEngine that caused timeouts
- Add '--live-from-start' for yt-dlp to handle live streams correctly
This commit is contained in:
NimBold
2026-06-10 03:12:42 +03:30
parent 88e99a8528
commit 22cc11f751
3 changed files with 21 additions and 3 deletions
+2 -1
View File
@@ -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
@@ -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
]
+16 -2
View File
@@ -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)