removed render as blob, not worth the majorly increased ram usage, moved stream disabling

This commit is contained in:
ThaUnknown 2020-12-25 21:15:02 +01:00
parent 15f99d2312
commit 691ad06913
4 changed files with 36 additions and 53 deletions

View file

@ -339,11 +339,6 @@
<input type="checkbox" id="player8" checked>
<label for="player8">Post-Download Processing</label>
</div>
<div class="custom-switch mb-10" data-toggle="tooltip" data-placement="top"
data-title="Renders The Video As A Blob When Available, Greatly Improves Playback Performance, DOUBLES RAM Usage.">
<input type="checkbox" id="player9">
<label for="player9">Render As Blob</label>
</div>
<div class="custom-switch mb-20" data-toggle="tooltip" data-placement="top"
data-title="Pauses/Resumes Video Playback When Tabbing In/Out Of The App.">
<input type="checkbox" id="player10" checked>

View file

@ -1,6 +1,9 @@
const settingsElements = [
player1, player2, player3, player4, player5, player6, player7, player8, player9, player10, subtitle1, subtitle2, subtitle3, torrent1, torrent2, torrent3, torrent4, torrent5, torrent6, torrent7, torrent8, torrent9, other1, other2
player1, player2, player3, player4, player5, player6, player7, player8, player10, subtitle1, subtitle2, subtitle3, torrent1, torrent2, torrent3, torrent4, torrent5, torrent6, torrent7, torrent8, torrent9, other1, other2
]
setRes.addEventListener("click", restoreDefaults)
settingsTab.addEventListener("click", applySettingsTimeout)
regProtButton.addEventListener("click", registerProtocol)
let settings = {}
function restoreDefaults() {
localStorage.removeItem("settings");
@ -53,9 +56,6 @@ clearRelCache.onclick = () => {
store = {}
}
renderSettings()
setRes.addEventListener("click", restoreDefaults)
settingsTab.addEventListener("click", applySettingsTimeout)
regProtButton.addEventListener("click", registerProtocol)
let searchParams = new URLSearchParams(location.href)
if (searchParams.get("access_token")) {

View file

@ -2,17 +2,16 @@ const { SubtitleStream } = MatroskaSubtitles
const { SubtitleParser } = MatroskaSubtitles
function subStream(stream) { // subtitle parsing with seeking support
if (video.src.endsWith(".mkv") || video.src.endsWith(".webm")) {
if (playerData.subtitleStream) {
playerData.subtitleStream = new SubtitleStream(playerData.subtitleStream)
} else {
playerData.subtitleStream = new SubtitleStream()
playerData.subtitleStream.once('tracks', pTracks => {
bcap.removeAttribute("disabled")
playerData.headers = []
pTracks.forEach(track => {
if (track.type != "ass") { // overwrite webvtt header with custom one
track.header = `[Script Info]
if (playerData.subtitleStream) {
playerData.subtitleStream = new SubtitleStream(playerData.subtitleStream)
} else {
playerData.subtitleStream = new SubtitleStream()
playerData.subtitleStream.once('tracks', pTracks => {
bcap.removeAttribute("disabled")
playerData.headers = []
pTracks.forEach(track => {
if (track.type != "ass") { // overwrite webvtt header with custom one
track.header = `[Script Info]
Title: English
ScriptType: v4.00+
Collisions: Normal
@ -30,30 +29,29 @@ Style: Default,Roboto Medium,26,&H00FFFFFF,&H000000FF,&H00020713,&H00000000,0,0,
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
`
}
playerData.headers[track.number] = track
playerData.subtitles[track.number] = new Set()
if (!playerData.selectedHeader) playerData.selectedHeader = track.number
})
})
}
playerData.subtitleStream.on('subtitle', (subtitle, trackNumber) => {
if (!playerData.parsed && playerData.headers) {
if (playerData.headers[trackNumber].type == "webvtt") convertSub(subtitle)
let formatSub = "Dialogue: " + (subtitle.layer || 0) + "," + new Date(subtitle.time).toISOString().slice(12, -1).slice(0, -1) + "," + new Date(subtitle.time + subtitle.duration).toISOString().slice(12, -1).slice(0, -1) + "," + (subtitle.style || "Default") + "," + (subtitle.name || "") + "," + (subtitle.marginL || "0") + "," + (subtitle.marginR || "0") + "," + (subtitle.marginV || "0") + "," + (subtitle.effect || "") + "," + subtitle.text
if (!playerData.subtitles[trackNumber].has(formatSub)) {
playerData.subtitles[trackNumber].add(formatSub)
if (playerData.selectedHeader == trackNumber)
renderSubs.call(null, trackNumber)
}
}
playerData.headers[track.number] = track
playerData.subtitles[track.number] = new Set()
if (!playerData.selectedHeader) playerData.selectedHeader = track.number
})
})
playerData.subtitleStream.on('file', file => {
if (file.mimetype == ("application/x-truetype-font" || "application/font-woff")) playerData.fonts.push(window.URL.createObjectURL(new Blob([file.data], { type: file.mimetype })))
})
stream.pipe(playerData.subtitleStream)
}
playerData.subtitleStream.on('subtitle', (subtitle, trackNumber) => {
if (playerData.headers && !playerData.parsed) {
if (playerData.headers[trackNumber].type == "webvtt") convertSub(subtitle)
let formatSub = "Dialogue: " + (subtitle.layer || 0) + "," + new Date(subtitle.time).toISOString().slice(12, -1).slice(0, -1) + "," + new Date(subtitle.time + subtitle.duration).toISOString().slice(12, -1).slice(0, -1) + "," + (subtitle.style || "Default") + "," + (subtitle.name || "") + "," + (subtitle.marginL || "0") + "," + (subtitle.marginR || "0") + "," + (subtitle.marginV || "0") + "," + (subtitle.effect || "") + "," + subtitle.text
if (!playerData.subtitles[trackNumber].has(formatSub)) {
playerData.subtitles[trackNumber].add(formatSub)
if (playerData.selectedHeader == trackNumber)
renderSubs.call(null, trackNumber)
}
}
})
playerData.subtitleStream.on('file', file => {
if (file.mimetype == ("application/x-truetype-font" || "application/font-woff")) playerData.fonts.push(window.URL.createObjectURL(new Blob([file.data], { type: file.mimetype })))
})
stream.pipe(playerData.subtitleStream)
}
let octopusTimeout
function renderSubs(trackNumber) {
@ -106,18 +104,8 @@ function postDownload(file) { // parse subtitles fully after a download is finis
parser.on('finish', () => {
playerData.subtitles = subtitles
playerData.parsed = 1
playerData.subtitleStream = undefined
renderSubs.call(null, playerData.selectedHeader)
if (settings.player9) { // render the video to a blob for faster playback and seeking, F RAM
file.getBlobURL((err, url) => {
setTimeout(() => {
let time = video.currentTime,
playState = !video.paused
video.src = url
video.currentTime = time
if (playState) video.play()
}, 5000);
})
}
});
file.createReadStream().pipe(parser)
}

View file

@ -158,7 +158,7 @@ function serveFile(file, req) {
res.body = req.method === 'HEAD' ? '' : 'stream'
// parser is really a passthrough mkv stream now
let stream = file.createReadStream(range)
subStream(stream)
if ((file.name.endsWith(".mkv") || file.name.endsWith(".webm")) && !playerData.parsed) subStream(stream)
return [res, req.method === 'GET' && playerData.subtitleStream || stream]
}