Merge 582ec8ab21726413d4b9b6beffa3f0022ff7834a into 049d591d294e2a43cb32b97a0bb018c2093e5beb

This commit is contained in:
Spendable1569 2026-09-05 23:09:59 +01:00 committed by GitHub
commit 612e943753
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 45 additions and 7 deletions

View File

@ -911,6 +911,18 @@ default_user_preferences:
##
#quality_dash: auto
##
## Default dash video codec.
##
## Note: this setting only takes effect if the
## 'quality' parameter is set to "dash".
##
## Accepted values:
## av1, h264
## Default: h264
##
#codec_dash: h264
##
## Default video playback speed.
##

View File

@ -96,6 +96,9 @@
"preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p",
"preferences_codec_dash_label": "Preferred DASH video codec: ",
"preferences_codec_dash_option_av1": "AV1",
"preferences_codec_dash_option_h264": "H.264",
"preferences_volume_label": "Player volume: ",
"preferences_comments_label": "Default comments: ",
"youtube": "YouTube",

View File

@ -37,6 +37,7 @@ struct ConfigPreferences
property player_style : String = "invidious"
property quality : String = "dash"
property quality_dash : String = "auto"
property codec_dash : String = "h264"
property default_home : String? = "Popular"
property feed_menu : Array(String) = ["Popular", "Trending", "Subscriptions", "Playlists"]
property automatic_instance_redirect : Bool = false

View File

@ -66,6 +66,9 @@ module Invidious::Routes::PreferencesRoute
quality_dash = env.params.body["quality_dash"]?.try &.as(String)
quality_dash ||= CONFIG.default_user_preferences.quality_dash
codec_dash = env.params.body["codec_dash"]?.try &.as(String)
codec_dash ||= CONFIG.default_user_preferences.codec_dash
volume = env.params.body["volume"]?.try &.as(String).to_i?
volume ||= CONFIG.default_user_preferences.volume
@ -170,6 +173,7 @@ module Invidious::Routes::PreferencesRoute
player_style: player_style,
quality: quality,
quality_dash: quality_dash,
codec_dash: codec_dash,
default_home: default_home,
feed_menu: feed_menu,
automatic_instance_redirect: automatic_instance_redirect,

View File

@ -43,6 +43,7 @@ struct Preferences
property quality : String = CONFIG.default_user_preferences.quality
@[JSON::Field(converter: Preferences::ProcessString)]
property quality_dash : String = CONFIG.default_user_preferences.quality_dash
property codec_dash : String = CONFIG.default_user_preferences.codec_dash
property default_home : String? = CONFIG.default_user_preferences.default_home
property feed_menu : Array(String) = CONFIG.default_user_preferences.feed_menu
property related_videos : Bool = CONFIG.default_user_preferences.related_videos

View File

@ -17,6 +17,7 @@ module Invidious::Videos
property player_style : String
property quality : String
property quality_dash : String
property codec_dash : String
property raw : Bool
property region : String?
property related_videos : Bool
@ -43,6 +44,7 @@ module Invidious::Videos
preferred_captions = query["subtitles"]?.try &.split(",").map(&.downcase)
quality = query["quality"]?
quality_dash = query["quality_dash"]?
codec_dash = query["codec_dash"]?
region = query["region"]?
related_videos = query["related_videos"]?.try { |q| (q == "true" || q == "1").to_unsafe }
speed = query["speed"]?.try &.rchop("x").to_f?
@ -66,6 +68,7 @@ module Invidious::Videos
preferred_captions ||= preferences.captions
quality ||= preferences.quality
quality_dash ||= preferences.quality_dash
codec_dash ||= preferences.codec_dash
related_videos ||= preferences.related_videos.to_unsafe
speed ||= preferences.speed
video_loop ||= preferences.video_loop.to_unsafe
@ -87,6 +90,7 @@ module Invidious::Videos
preferred_captions ||= CONFIG.default_user_preferences.captions
quality ||= CONFIG.default_user_preferences.quality
quality_dash ||= CONFIG.default_user_preferences.quality_dash
codec_dash ||= CONFIG.default_user_preferences.codec_dash
related_videos ||= CONFIG.default_user_preferences.related_videos.to_unsafe
speed ||= CONFIG.default_user_preferences.speed
video_loop ||= CONFIG.default_user_preferences.video_loop.to_unsafe
@ -148,6 +152,7 @@ module Invidious::Videos
preferred_captions: preferred_captions,
quality: quality,
quality_dash: quality_dash,
codec_dash: codec_dash,
raw: raw,
region: region,
related_videos: related_videos,

View File

@ -23,10 +23,10 @@
end
audio_streams.each_with_index do |fmt, i|
src_url = "/latest_version?id=#{video.id}&itag=#{fmt["itag"]}"
src_url = "/latest_version?id=#{URI.encode_www_form(video.id)}&itag=#{URI.encode_www_form(fmt["itag"].to_json)}"
src_url += "&local=true" if params.local
src_url = invidious_companion.public_url.to_s + src_url +
"&check=#{invidious_companion_check_id}" if (invidious_companion)
"&check=#{URI.encode_www_form(invidious_companion_check_id || "")}" if (invidious_companion)
bitrate = fmt["bitrate"]
mimetype = HTML.escape(fmt["mimeType"].as_s)
@ -42,7 +42,8 @@
<% if params.quality == "dash"
src_url = "/api/manifest/dash/id/" + video.id + "?local=true&unique_res=1"
src_url = invidious_companion.public_url.to_s + src_url +
"&check=#{invidious_companion_check_id}" if (invidious_companion)
"&check=#{URI.encode_www_form(invidious_companion_check_id || "")}" if (invidious_companion)
src_url += "&codec_dash=#{URI.encode_www_form(params.codec_dash)}" if (invidious_companion && ["av1", "h264"].includes?(params.codec_dash))
%>
<source src="<%= src_url %>" type='application/dash+xml' label="dash">
<% end %>
@ -51,10 +52,10 @@
fmt_stream.reject! { |f| f["itag"] == 17 }
fmt_stream.sort_by! {|f| params.quality == f["quality"] ? 0 : 1 }
fmt_stream.each_with_index do |fmt, i|
src_url = "/latest_version?id=#{video.id}&itag=#{fmt["itag"]}"
src_url = "/latest_version?id=#{URI.encode_www_form(video.id)}&itag=#{URI.encode_www_form(fmt["itag"].to_json)}"
src_url += "&local=true" if params.local
src_url = invidious_companion.public_url.to_s + src_url +
"&check=#{invidious_companion_check_id}" if (invidious_companion)
"&check=#{URI.encode_www_form(invidious_companion_check_id || "")}" if (invidious_companion)
quality = fmt["quality"]
mimetype = HTML.escape(fmt["mimeType"].as_s)
@ -71,7 +72,7 @@
<% preferred_captions.each do |caption|
api_captions_url = "/api/v1/captions/"
api_captions_url = invidious_companion.public_url.to_s + api_captions_url if (invidious_companion)
api_captions_check_id = "&check=#{invidious_companion_check_id}"
api_captions_check_id = "&check=#{URI.encode_www_form(invidious_companion_check_id || "")}"
%>
<track kind="captions" src="<%= api_captions_url %><%= video.id %>?label=<%= caption.name %><%= api_captions_check_id %>" label="<%= caption.name %>">
<% end %>
@ -79,7 +80,7 @@
<% captions.each do |caption|
api_captions_url = "/api/v1/captions/"
api_captions_url = invidious_companion.public_url.to_s + api_captions_url if (invidious_companion)
api_captions_check_id = "&check=#{invidious_companion_check_id}"
api_captions_check_id = "&check=#{URI.encode_www_form(invidious_companion_check_id || "")}"
%>
<track kind="captions" src="<%= api_captions_url %><%= video.id %>?label=<%= caption.name %><%= api_captions_check_id %>" label="<%= caption.name %>">
<% end %>

View File

@ -73,6 +73,17 @@
</div>
<% end %>
<% if !CONFIG.disabled?("dash") %>
<div class="pure-control-group">
<label for="codec_dash"><%= I18n.translate(locale, "preferences_codec_dash_label") %></label>
<select name="codec_dash" id="codec_dash">
<% {"av1", "h264"}.each do |option| %>
<option value="<%= option %>" <% if preferences.codec_dash == option %> selected <% end %>><%= I18n.translate(locale, "preferences_codec_dash_option_" + option) %></option>
<% end %>
</select>
</div>
<% end %>
<div class="pure-control-group">
<label for="volume"><%= I18n.translate(locale, "preferences_volume_label") %></label>
<input name="volume" id="volume" data-onrange="update_volume_value" type="range" min="0" max="100" step="5" value="<%= preferences.volume %>">