feat: add customizable video buffer lenghts
Some checks failed
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.13.3, true) (push) Has been cancelled
Build and release container directly from master / release (docker/Dockerfile, AMD64, ubuntu-latest, linux/amd64, ) (push) Has been cancelled
Build and release container directly from master / release (docker/Dockerfile.arm64, ARM64, ubuntu-24.04-arm, linux/arm64/v8, -arm64) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.12.2, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.14.1, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.15.1, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.16.3, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (nightly, false) (push) Has been cancelled
Invidious CI / Test ${{ matrix.name }} Docker build (AMD64, ubuntu-latest) (push) Has been cancelled
Invidious CI / Test ${{ matrix.name }} Docker build (ARM64, ubuntu-24.04-arm) (push) Has been cancelled
Invidious CI / lint (push) Has been cancelled

This commit is contained in:
Fijxu
2025-10-05 18:16:41 -03:00
parent 8bc5f938a7
commit ae5de9e015
5 changed files with 54 additions and 3 deletions

View File

@@ -1,6 +1,7 @@
'use strict'; 'use strict';
var player_data = JSON.parse(document.getElementById('player_data').textContent); var player_data = JSON.parse(document.getElementById('player_data').textContent);
var video_data = JSON.parse(document.getElementById('video_data').textContent); var video_data = JSON.parse(document.getElementById('video_data').textContent);
const CONFIG = JSON.parse(document.getElementById('config').textContent);
var options = { var options = {
liveui: true, liveui: true,
@@ -54,8 +55,13 @@ videojs.Vhs.xhr.beforeRequest = function(options) {
return options; return options;
}; };
videojs.Vhs.GOAL_BUFFER_LENGTH = 40; // Buffer limits
videojs.Vhs.MAX_GOAL_BUFFER_LENGTH = 80; if (CONFIG.videojs.goal_buffer_length) {
videojs.Vhs.GOAL_BUFFER_LENGTH = CONFIG.videojs.goal_buffer_length;
}
if (CONFIG.videojs.max_goal_buffer_length) {
videojs.Vhs.MAX_GOAL_BUFFER_LENGTH = CONFIG.videojs.max_goal_buffer_length;
}
var player = videojs('player', options); var player = videojs('player', options);

View File

@@ -1245,4 +1245,25 @@ video_cache:
## Accepted values: a string ## Accepted values: a string
## Default: "Backend" ## Default: "Backend"
## ##
#backend_name_prefix: "Backend" #backend_name_prefix: "Backend"
#########################################
#
# VideoJS Settings
#
#########################################
videojs:
## Change goal buffer length
##
## Accepted values: a positive integer OR null
## Default: 30
##
goal_buffer_length: 30
## Change max goal buffer length
##
## Accepted values: a positive integer OR null
## Default: 60
##
max_goal_buffer_length: 60

View File

@@ -252,6 +252,16 @@ class Config
property backend_name_prefix : String = "Backend" property backend_name_prefix : String = "Backend"
property videojs : VideoJSConfig = VideoJSConfig.from_yaml("")
struct VideoJSConfig
include YAML::Serializable
include JSON::Serializable
property goal_buffer_length : Int32? = 30
property max_goal_buffer_length : Int32? = 60
end
def disabled?(option) def disabled?(option)
case disabled = CONFIG.disable_proxy case disabled = CONFIG.disable_proxy
when Bool when Bool

View File

@@ -30,6 +30,13 @@
}.to_pretty_json }.to_pretty_json
%> %>
</script> </script>
<script id="config" type="application/json">
<%=
{
"videojs" => CONFIG.videojs,
}.to_pretty_json
%>
</script>
<%= rendered "components/player" %> <%= rendered "components/player" %>
<script src="/<%= JS_PATH %>/embed.js?v=<%= ASSET_COMMIT %>"></script> <script src="/<%= JS_PATH %>/embed.js?v=<%= ASSET_COMMIT %>"></script>

View File

@@ -82,6 +82,13 @@ we're going to need to do it here in order to allow for translations.
}.to_pretty_json }.to_pretty_json
%> %>
</script> </script>
<script id="config" type="application/json">
<%=
{
"videojs" => CONFIG.videojs,
}.to_pretty_json
%>
</script>
<div id="player-container" class="h-box"> <div id="player-container" class="h-box">
<%= rendered "components/player" %> <%= rendered "components/player" %>