fix(hls): improve audio track selection and auto-detect "Original"

- Auto-select "Original" audio track by default in both native and Plyr HLS players
- Fix native HLS audio selector to use numeric indices instead of string matching
- Robustly detect "original" track by checking both `name` and `lang` attributes
- Fix audio track change handler to correctly switch between available tracks
This commit is contained in:
2026-04-05 18:31:35 -05:00
parent e8e2aa93d6
commit 13a0e6ceed
2 changed files with 24 additions and 16 deletions

View File

@@ -361,9 +361,11 @@
if (hlsInstance && hlsInstance.audioTracks && hlsInstance.audioTracks.length > 0) { if (hlsInstance && hlsInstance.audioTracks && hlsInstance.audioTracks.length > 0) {
// Prefer "original" audio track // Prefer "original" audio track
const originalIdx = hlsInstance.audioTracks.findIndex(t => const originalIdx = hlsInstance.audioTracks.findIndex(t => {
(t.name || '').toLowerCase().includes('original') const name = (t.name || '').toLowerCase();
); const lang = (t.lang || '').toLowerCase();
return name.includes('original') || lang === 'original';
});
if (originalIdx !== -1) { if (originalIdx !== -1) {
hlsInstance.audioTrack = originalIdx; hlsInstance.audioTrack = originalIdx;
console.log('Selected original audio track:', hlsInstance.audioTracks[originalIdx].name); console.log('Selected original audio track:', hlsInstance.audioTracks[originalIdx].name);

View File

@@ -149,17 +149,11 @@ document.addEventListener('DOMContentLoaded', function() {
if (audioTrackSelect) { if (audioTrackSelect) {
audioTrackSelect.addEventListener('change', function() { audioTrackSelect.addEventListener('change', function() {
const trackId = this.value; const trackIdx = parseInt(this.value);
if (hls && hls.audioTracks) { if (!isNaN(trackIdx) && hls && hls.audioTracks && trackIdx >= 0 && trackIdx < hls.audioTracks.length) {
const index = hls.audioTracks.findIndex(t => hls.audioTrack = trackIdx;
t.lang === trackId || t.name === trackId console.log('Audio track changed to:', hls.audioTracks[trackIdx].name || trackIdx);
);
if (index !== -1) {
hls.audioTrack = index;
console.log('Audio track changed to:', index);
}
} }
}); });
} }
@@ -171,13 +165,25 @@ document.addEventListener('DOMContentLoaded', function() {
// Populate audio track select if needed // Populate audio track select if needed
if (audioTrackSelect && data.audioTracks.length > 0) { if (audioTrackSelect && data.audioTracks.length > 0) {
audioTrackSelect.innerHTML = '<option value="">Select audio track</option>'; audioTrackSelect.innerHTML = '<option value="">Select audio track</option>';
data.audioTracks.forEach(track => { let originalIdx = -1;
data.audioTracks.forEach((track, idx) => {
// Find "original" track
if (originalIdx === -1 && (track.name || '').toLowerCase().includes('original')) {
originalIdx = idx;
}
const option = document.createElement('option'); const option = document.createElement('option');
option.value = track.lang || track.name; option.value = String(idx);
option.textContent = track.name || track.lang || `Track ${track.id}`; option.textContent = track.name || track.lang || `Track ${idx}`;
audioTrackSelect.appendChild(option); audioTrackSelect.appendChild(option);
}); });
audioTrackSelect.disabled = false; audioTrackSelect.disabled = false;
// Auto-select "original" audio track
if (originalIdx !== -1) {
hls.audioTrack = originalIdx;
audioTrackSelect.value = String(originalIdx);
console.log('Auto-selected original audio track:', data.audioTracks[originalIdx].name);
}
} }
}); });
} }