This commit is contained in:
parent
3e20780b60
commit
83ab76c7d3
3 changed files with 72 additions and 12 deletions
|
|
@ -147,12 +147,32 @@
|
||||||
enableWorker: true,
|
enableWorker: true,
|
||||||
lowLatencyMode: true,
|
lowLatencyMode: true,
|
||||||
backBufferLength: 90,
|
backBufferLength: 90,
|
||||||
|
// Increased retry settings for LLHLS resilience
|
||||||
|
fragLoadingMaxRetry: 6,
|
||||||
|
fragLoadingRetryDelay: 1000,
|
||||||
|
manifestLoadingMaxRetry: 4,
|
||||||
|
levelLoadingMaxRetry: 4,
|
||||||
|
maxBufferLength: 30,
|
||||||
|
maxBufferHole: 0.5,
|
||||||
xhrSetup: function(xhr, url) {
|
xhrSetup: function(xhr, url) {
|
||||||
// Only add token if not already present (segments don't have it)
|
let finalUrl = url;
|
||||||
if (viewerToken && url.includes('/app/') && !url.includes('token=')) {
|
|
||||||
const separator = url.includes('?') ? '&' : '?';
|
// Use URL API for proper parameter handling to avoid encoding issues
|
||||||
xhr.open('GET', url + separator + 'token=' + encodeURIComponent(viewerToken), true);
|
try {
|
||||||
|
const urlObj = new URL(url);
|
||||||
|
if (viewerToken && url.includes('/app/') && !urlObj.searchParams.has('token')) {
|
||||||
|
urlObj.searchParams.set('token', viewerToken);
|
||||||
|
finalUrl = urlObj.toString();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// Fallback for relative URLs
|
||||||
|
if (viewerToken && url.includes('/app/') && !url.includes('token=')) {
|
||||||
|
const separator = url.includes('?') ? '&' : '?';
|
||||||
|
finalUrl = url + separator + 'token=' + encodeURIComponent(viewerToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xhr.open('GET', finalUrl, true);
|
||||||
xhr.withCredentials = true;
|
xhr.withCredentials = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -162,11 +162,32 @@
|
||||||
enableWorker: true,
|
enableWorker: true,
|
||||||
lowLatencyMode: true,
|
lowLatencyMode: true,
|
||||||
backBufferLength: 30,
|
backBufferLength: 30,
|
||||||
|
// Increased retry settings for LLHLS resilience
|
||||||
|
fragLoadingMaxRetry: 6,
|
||||||
|
fragLoadingRetryDelay: 1000,
|
||||||
|
manifestLoadingMaxRetry: 4,
|
||||||
|
levelLoadingMaxRetry: 4,
|
||||||
|
maxBufferLength: 30,
|
||||||
|
maxBufferHole: 0.5,
|
||||||
xhrSetup: function(xhr, url) {
|
xhrSetup: function(xhr, url) {
|
||||||
if (token && url.includes('/app/') && !url.includes('token=')) {
|
let finalUrl = url;
|
||||||
const separator = url.includes('?') ? '&' : '?';
|
|
||||||
xhr.open('GET', url + separator + 'token=' + encodeURIComponent(token), true);
|
// Use URL API for proper parameter handling to avoid encoding issues
|
||||||
|
try {
|
||||||
|
const urlObj = new URL(url);
|
||||||
|
if (token && url.includes('/app/') && !urlObj.searchParams.has('token')) {
|
||||||
|
urlObj.searchParams.set('token', token);
|
||||||
|
finalUrl = urlObj.toString();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// Fallback for relative URLs
|
||||||
|
if (token && url.includes('/app/') && !url.includes('token=')) {
|
||||||
|
const separator = url.includes('?') ? '&' : '?';
|
||||||
|
finalUrl = url + separator + 'token=' + encodeURIComponent(token);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xhr.open('GET', finalUrl, true);
|
||||||
xhr.withCredentials = true;
|
xhr.withCredentials = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -356,13 +356,32 @@
|
||||||
enableWorker: true,
|
enableWorker: true,
|
||||||
lowLatencyMode: true,
|
lowLatencyMode: true,
|
||||||
backBufferLength: 90,
|
backBufferLength: 90,
|
||||||
|
// Increased retry settings for LLHLS resilience
|
||||||
|
fragLoadingMaxRetry: 6,
|
||||||
|
fragLoadingRetryDelay: 1000,
|
||||||
|
manifestLoadingMaxRetry: 4,
|
||||||
|
levelLoadingMaxRetry: 4,
|
||||||
|
maxBufferLength: 30,
|
||||||
|
maxBufferHole: 0.5,
|
||||||
xhrSetup: function(xhr, url) {
|
xhrSetup: function(xhr, url) {
|
||||||
// Add viewer token to HLS segment requests (not playlists, which already have it)
|
let finalUrl = url;
|
||||||
// Only add if token is not already present in the URL
|
|
||||||
if (viewerToken && url.includes('/app/') && !url.includes('token=')) {
|
// Use URL API for proper parameter handling to avoid encoding issues
|
||||||
const separator = url.includes('?') ? '&' : '?';
|
try {
|
||||||
xhr.open('GET', url + separator + 'token=' + encodeURIComponent(viewerToken), true);
|
const urlObj = new URL(url);
|
||||||
|
if (viewerToken && url.includes('/app/') && !urlObj.searchParams.has('token')) {
|
||||||
|
urlObj.searchParams.set('token', viewerToken);
|
||||||
|
finalUrl = urlObj.toString();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// Fallback for relative URLs
|
||||||
|
if (viewerToken && url.includes('/app/') && !url.includes('token=')) {
|
||||||
|
const separator = url.includes('?') ? '&' : '?';
|
||||||
|
finalUrl = url + separator + 'token=' + encodeURIComponent(viewerToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xhr.open('GET', finalUrl, true);
|
||||||
xhr.withCredentials = true;
|
xhr.withCredentials = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue