Update player.js

This commit is contained in:
Anirudh Sevugan 2025-08-24 16:40:21 -05:00 committed by GitHub
parent 2176853993
commit 6e4f9d0459
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -66,9 +66,13 @@ document.addEventListener('DOMContentLoaded', () => {
}); });
async function addSubtitles(url) { async function addSubtitles(url) {
// Remove existing tracks // Remove existing tracks and revoke any previous blob URLs
const existingTracks = mediaPlayer.getElementsByTagName('track'); const existingTracks = mediaPlayer.getElementsByTagName('track');
for (let track of existingTracks) track.remove(); for (let i = existingTracks.length - 1; i >= 0; i--) {
const track = existingTracks[i];
if (track.src.startsWith('blob:')) URL.revokeObjectURL(track.src);
track.remove();
}
// Fetch subtitle content // Fetch subtitle content
let text = ''; let text = '';
@ -84,26 +88,28 @@ async function addSubtitles(url) {
const firstLine = text.split(/\r?\n/)[0].trim(); const firstLine = text.split(/\r?\n/)[0].trim();
const format = firstLine.startsWith('WEBVTT') || url.toLowerCase().endsWith('.vtt') ? 'vtt' : 'srt'; const format = firstLine.startsWith('WEBVTT') || url.toLowerCase().endsWith('.vtt') ? 'vtt' : 'srt';
// Convert SRT → VTT if needed // Determine track source
let trackSrc = url;
if (format === 'srt') { if (format === 'srt') {
// Convert SRT → VTT
text = 'WEBVTT\n\n' + text text = 'WEBVTT\n\n' + text
.replace(/\r+/g, '') .replace(/\r+/g, '')
.replace(/^\s+|\s+$/g, '') .replace(/^\s+|\s+$/g, '')
.split('\n') .split('\n')
.map(line => line.replace(/(\d+):(\d+):(\d+),(\d+)/g, '$1:$2:$3.$4')) .map(line => line.replace(/(\d+):(\d+):(\d+),(\d+)/g, '$1:$2:$3.$4'))
.join('\n'); .join('\n');
}
// Create Blob URL // Create Blob URL for converted subtitles
const blob = new Blob([text], { type: 'text/vtt' }); const blob = new Blob([text], { type: 'text/vtt' });
const blobUrl = URL.createObjectURL(blob); trackSrc = URL.createObjectURL(blob);
}
// Create and append track // Create and append track
const track = document.createElement('track'); const track = document.createElement('track');
track.kind = 'subtitles'; track.kind = 'subtitles';
track.label = 'English'; track.label = 'English';
track.srclang = 'en'; track.srclang = 'en';
track.src = blobUrl; track.src = trackSrc;
track.default = true; track.default = true;
mediaPlayer.appendChild(track); mediaPlayer.appendChild(track);
@ -111,10 +117,11 @@ async function addSubtitles(url) {
setTimeout(() => { setTimeout(() => {
for (let t of mediaPlayer.textTracks) t.mode = 'disabled'; for (let t of mediaPlayer.textTracks) t.mode = 'disabled';
track.track.mode = 'showing'; track.track.mode = 'showing';
}, 50); // slight delay ensures the browser registers it }, 50);
} }
/*// Handle submit subtitle URL /*// Handle submit subtitle URL
function clearSubtitles() { function clearSubtitles() {
const tracks = mediaPlayer.getElementsByTagName('track'); const tracks = mediaPlayer.getElementsByTagName('track');
@ -123,14 +130,18 @@ function clearSubtitles() {
} }
}*/ }*/
// Handle submit subtitle URL
function clearSubtitles() { function clearSubtitles() {
const tracks = mediaPlayer.getElementsByTagName('track'); const tracks = mediaPlayer.getElementsByTagName('track');
for (let i = tracks.length - 1; i >= 0; i--) { for (let i = tracks.length - 1; i >= 0; i--) {
tracks[i].remove(); const track = tracks[i];
if (track.src.startsWith('blob:')) {
URL.revokeObjectURL(track.src); // free memory leaks from SRT to VTT converted subtitles
}
track.remove();
} }
} }
// Use this function when a new video is loaded // Use this function when a new video is loaded
submitSubtitlesBtn.addEventListener('click', () => { submitSubtitlesBtn.addEventListener('click', () => {