summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
authorGuido Cella <guido@guidocella.xyz>2021-09-17 09:37:09 +0200
committerNiklas Haas <github-daiK1o@haasn.dev>2021-09-25 13:57:36 +0200
commitcc4ada655aae06218b900bb434e3521566394cde (patch)
tree70b928a1d2ac6894f4f36a672719a86dcbdec981 /player
parent5bf92b628d0d27675a06f94da827299131ff698b (diff)
downloadmpv-cc4ada655aae06218b900bb434e3521566394cde.tar.bz2
mpv-cc4ada655aae06218b900bb434e3521566394cde.tar.xz
ytdl_hook.lua: search for yt-dlp by default
Because youtube-dl is inactive and the yt-dlp fork is becoming more popular, make mpv use yt-dlp without any extra configuration. yt-dlp is ordered before youtube-dl because it's more obscure, so users who have yt-dlp installed are more likely to want to use it rather than youtube-dl. Fixes #9208.
Diffstat (limited to 'player')
-rw-r--r--player/lua/ytdl_hook.lua66
1 files changed, 48 insertions, 18 deletions
diff --git a/player/lua/ytdl_hook.lua b/player/lua/ytdl_hook.lua
index b9cb04645e..27d39afb75 100644
--- a/player/lua/ytdl_hook.lua
+++ b/player/lua/ytdl_hook.lua
@@ -8,11 +8,12 @@ local o = {
use_manifests = false,
all_formats = false,
force_all_formats = true,
- ytdl_path = "youtube-dl",
+ ytdl_path = "",
}
local ytdl = {
- path = nil,
+ path = "",
+ paths_to_search = {"yt-dlp", "yt-dlp_x86", "youtube-dl"},
searched = false,
blacklisted = {}
}
@@ -88,7 +89,13 @@ local function map_codec_to_mpv(codec)
return nil
end
+local function platform_is_windows()
+ return package.config:sub(1,1) == "\\"
+end
+
local function exec(args)
+ msg.debug("Running: " .. table.concat(args, " "))
+
local ret = mp.command_native({name = "subprocess",
args = args,
capture_stdout = true,
@@ -718,20 +725,6 @@ end
function run_ytdl_hook(url)
local start_time = os.clock()
- -- check for youtube-dl in mpv's config dir
- if not (ytdl.searched) then
- local exesuf = (package.config:sub(1,1) == '\\') and '.exe' or ''
- local ytdl_mcd = mp.find_config_file(o.ytdl_path .. exesuf)
- if ytdl_mcd == nil then
- msg.verbose("No youtube-dl found with path "..o.ytdl_path..exesuf.." in config directories")
- ytdl.path = o.ytdl_path
- else
- msg.verbose("found youtube-dl at: " .. ytdl_mcd)
- ytdl.path = ytdl_mcd
- end
- ytdl.searched = true
- end
-
-- strip ytdl://
if (url:find("ytdl://") == 1) then
url = url:sub(8)
@@ -786,8 +779,45 @@ function run_ytdl_hook(url)
end
table.insert(command, "--")
table.insert(command, url)
- msg.debug("Running: " .. table.concat(command,' '))
- local es, json, result, aborted = exec(command)
+
+ local es, json, result, aborted
+ if ytdl.searched then
+ es, json, result, aborted = exec(command)
+ else
+ local separator = platform_is_windows() and ";" or ":"
+ if o.ytdl_path:match("[^" .. separator .. "]") then
+ ytdl.paths_to_search = {}
+ for path in o.ytdl_path:gmatch("[^" .. separator .. "]+") do
+ table.insert(ytdl.paths_to_search, path)
+ end
+ end
+
+ for _, path in pairs(ytdl.paths_to_search) do
+ -- search for youtube-dl in mpv's config dir
+ local exesuf = platform_is_windows() and ".exe" or ""
+ local ytdl_cmd = mp.find_config_file(path .. exesuf)
+ if ytdl_cmd then
+ msg.verbose("Found youtube-dl at: " .. ytdl_cmd)
+ ytdl.path = ytdl_cmd
+ command[1] = ytdl.path
+ es, json, result, aborted = exec(command)
+ break
+ else
+ msg.verbose("No youtube-dl found with path " .. path .. exesuf .. " in config directories")
+ command[1] = path
+ es, json, result, aborted = exec(command)
+ if result.error_string == "init" then
+ msg.verbose("youtube-dl with path " .. path .. exesuf .. " not found in PATH or not enough permissions")
+ else
+ msg.verbose("Found youtube-dl with path " .. path .. exesuf .. " in PATH")
+ ytdl.path = path
+ break
+ end
+ end
+ end
+
+ ytdl.searched = true
+ end
if aborted then
return