0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 12:02:23 +02:00

ytdl_hook: enable default selection via --ytdl-format with all_formats

In all_formats mode, we've ignored what --ytdl-format did so far, since
we've converted the full format list, instead of just the formats
selected by youtube-dl.

But we can easily restore --ytdl-format behavior: just mark the selected
tracks as default tracks.
This commit is contained in:
wm4 2020-02-21 14:18:35 +01:00
parent a77780e6be
commit 4c32468241
2 changed files with 32 additions and 5 deletions

View File

@ -841,13 +841,16 @@ Program Behavior
If 'yes' will attempt to add all formats found reported by youtube-dl
(default: no). Each format is added as a separate track. In addition,
they are delay-loaded, and actually opened only when a track is selected
(this should keep load times as low as without this option). It also
adds average bitrate metadata, if available, which means
``--hls-bitrate`` will decide which track to select. (HLS used to be the
(this should keep load times as low as without this option).
It adds average bitrate metadata, if available, which means you can use
``--hls-bitrate`` to decide which track to select. (HLS used to be the
only format whose alternative quality streams were exposed in a similar
way, thus the option name.)
The ``--ytdl-format`` option is essentially ignored.
Tracks which represent formats that were selected by youtube-dl as
default will have the default flag set. This means mpv should generally
still select formats chosen with ``--ytdl-format`` by default.
Although this mechanism makes it possible to switch streams at runtime,
it's not suitable for this purpose for various technical reasons. (It's

View File

@ -25,6 +25,14 @@ function Set (t)
return set
end
-- ?: surrogate (keep in mind that there is no lazy evaluation)
function iif(cond, if_true, if_false)
if cond then
return if_true
end
return if_false
end
local safe_protos = Set {
"http", "https", "ftp", "ftps",
"rtmp", "rtmps", "rtmpe", "rtmpt", "rtmpts", "rtmpte",
@ -340,6 +348,17 @@ local function formats_to_edl(json, formats, use_all_formats)
muxed_needed = false,
}
local default_formats = {}
local requested_formats = json["requested_formats"]
if use_all_formats and requested_formats then
for _, track in ipairs(requested_formats) do
local id = track["format_id"]
if id then
default_formats[id] = true
end
end
end
local duration = as_integer(json["duration"])
local single_url = nil
local streams = {}
@ -414,8 +433,13 @@ local function formats_to_edl(json, formats, use_all_formats)
end
title = title .. "muxed-" .. index
end
local flags = {}
if default_formats[track["format_id"]] then
flags[#flags + 1] = "default"
end
hdr[#hdr + 1] = "!track_meta,title=" ..
edl_escape(title) .. ",byterate=" .. byterate
edl_escape(title) .. ",byterate=" .. byterate ..
iif(#flags > 0, ",flags=" .. table.concat(flags, "+"), "")
end
if duration > 0 then