diff --git a/config/config.example.yml b/config/config.example.yml index 56c516293..d91f65056 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -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. ## diff --git a/locales/en-US.json b/locales/en-US.json index 8032cf987..e373f6598 100644 --- a/locales/en-US.json +++ b/locales/en-US.json @@ -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", diff --git a/src/invidious/config.cr b/src/invidious/config.cr index 58b77cba8..ee288b706 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -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 diff --git a/src/invidious/routes/preferences.cr b/src/invidious/routes/preferences.cr index 77ea02e91..4238f2c5a 100644 --- a/src/invidious/routes/preferences.cr +++ b/src/invidious/routes/preferences.cr @@ -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, diff --git a/src/invidious/user/preferences.cr b/src/invidious/user/preferences.cr index ad4a9bc74..655084577 100644 --- a/src/invidious/user/preferences.cr +++ b/src/invidious/user/preferences.cr @@ -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 diff --git a/src/invidious/videos/video_preferences.cr b/src/invidious/videos/video_preferences.cr index 38870947d..7c6237535 100644 --- a/src/invidious/videos/video_preferences.cr +++ b/src/invidious/videos/video_preferences.cr @@ -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, diff --git a/src/invidious/views/components/player.ecr b/src/invidious/views/components/player.ecr index fbd472e0e..b1331a62a 100644 --- a/src/invidious/views/components/player.ecr +++ b/src/invidious/views/components/player.ecr @@ -42,6 +42,7 @@ <% 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 + + "&codec_dash=#{params.codec_dash}" + "&check=#{invidious_companion_check_id}" if (invidious_companion) %> diff --git a/src/invidious/views/user/preferences.ecr b/src/invidious/views/user/preferences.ecr index d6692081c..6abee3862 100644 --- a/src/invidious/views/user/preferences.ecr +++ b/src/invidious/views/user/preferences.ecr @@ -73,6 +73,17 @@ <% end %> + <% if !CONFIG.disabled?("dash") %> +
+ + +
+ <% end %> +