mirror of
https://github.com/ThaUnknown/miru.git
synced 2026-04-20 08:42:05 +00:00
removed render as blob, not worth the majorly increased ram usage, moved stream disabling
This commit is contained in:
parent
15f99d2312
commit
691ad06913
4 changed files with 36 additions and 53 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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")) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue