thumbnails work.... this isnt going wel...

This commit is contained in:
ThaUnknown 2021-02-05 22:43:40 +01:00
parent 14fac22162
commit e383266e35
5 changed files with 25 additions and 24 deletions

View file

@ -168,7 +168,7 @@
</nav> </nav>
<div class="overflow-y-hidden content-wrapper"> <div class="overflow-y-hidden content-wrapper">
<section id="player" class="overflow-hidden"> <section id="player" class="overflow-hidden">
<video id="video" src=""></video> <video id="video" src="" preload="none"></video>
<a href="#player" class="w-full h-full"></a> <a href="#player" class="w-full h-full"></a>
<div class="player d-none flex-column justify-content-between w-full h-full"> <div class="player d-none flex-column justify-content-between w-full h-full">
<div class="stats row"> <div class="stats row">

View file

@ -138,7 +138,7 @@ async function buildVideo(torrent, opts) { // sets video source and creates a bu
}); });
await postDownload(selectedFile) await postDownload(selectedFile)
if (settings.player5) { if (settings.player5) {
finishThumbnails(selectedFile); finishThumbnails(`${scope}webtorrent/${torrent.infoHash}/${encodeURI(selectedFile.path)}`);
} }
if (!torrent.store.store._store) { if (!torrent.store.store._store) {
downloadFile(selectedFile) downloadFile(selectedFile)
@ -286,18 +286,16 @@ function createThumbnail(vid, delay) {
} }
} }
function finishThumbnails() { function finishThumbnails(src) {
if (settings.player5 && settings.player8) { if (settings.player5 && settings.player8) {
let thumbVid = document.createElement("video"), let thumbVid = document.createElement("video"),
index = 0, index = 0,
delay delay = video.duration / 300 < 5 ? 5 : video.duration / 300
video.duration / 300 < 5 ? delay = 5 : delay = video.duration / 300 thumbVid.src = src
thumbVid.src = video.src
thumbVid.preload = "none" thumbVid.preload = "none"
thumbVid.volume = 0 thumbVid.volume = 0
thumbVid.playbackRate = 0
thumbVid.addEventListener('loadeddata', loadTime) thumbVid.addEventListener('loadeddata', loadTime)
thumbVid.addEventListener('seeked', () => { thumbVid.addEventListener('canplay', () => {
createThumbnail(thumbVid, delay); createThumbnail(thumbVid, delay);
loadTime(); loadTime();
}) })
@ -310,10 +308,12 @@ function finishThumbnails() {
} else { } else {
delete thumbVid; delete thumbVid;
thumbVid.remove() thumbVid.remove()
console.log("Thumbnail creating finished", index)
} }
index++ index++
} }
thumbVid.play() console.log("Thumbnail creating started", thumbVid)
thumbVid.load()
} }
} }

View file

@ -25,14 +25,12 @@ Style: Default,${Object.values(subtitle1list.options).filter(item => item.value
}) })
} }
playerData.subtitleStream.on('subtitle', (subtitle, trackNumber) => { playerData.subtitleStream.on('subtitle', (subtitle, trackNumber) => {
console.log(subtitle)
if (playerData.headers && !playerData.parsed) { if (playerData.headers && !playerData.parsed) {
if (playerData.headers[trackNumber].type == "webvtt") convertSub(subtitle) 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 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
playerData.subtitles[trackNumber].add(formatSub) playerData.subtitles[trackNumber].add(formatSub)
if (playerData.selectedHeader == trackNumber) renderSubs(trackNumber) if (playerData.selectedHeader == trackNumber) renderSubs(trackNumber)
} }
}) })
playerData.subtitleStream.on('file', file => { 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 }))) if (file.mimetype == ("application/x-truetype-font" || "application/font-woff")) playerData.fonts.push(window.URL.createObjectURL(new Blob([file.data], { type: file.mimetype })))
@ -41,7 +39,6 @@ Style: Default,${Object.values(subtitle1list.options).filter(item => item.value
} }
let octopusTimeout let octopusTimeout
async function renderSubs(trackNumber) { async function renderSubs(trackNumber) {
console.log("test")
if (!playerData.octopusInstance) { if (!playerData.octopusInstance) {
let options = { let options = {
video: video, video: video,
@ -52,7 +49,6 @@ async function renderSubs(trackNumber) {
workerUrl: 'js/subtitles-octopus-worker.js', workerUrl: 'js/subtitles-octopus-worker.js',
timeOffset: 0 timeOffset: 0
}; };
console.log("yes")
if (!playerData.octopusInstance) playerData.octopusInstance = new SubtitlesOctopus(options); if (!playerData.octopusInstance) playerData.octopusInstance = new SubtitlesOctopus(options);
} else { } else {
if (!octopusTimeout) { if (!octopusTimeout) {
@ -99,7 +95,7 @@ Style: Default,${Object.values(subtitle1list.options).filter(item => item.value
playerData.subtitles[trackNumber].add("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) playerData.subtitles[trackNumber].add("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)
}) })
parser.on('finish', () => { parser.on('finish', () => {
console.log("Finished") console.log("Sub parsing finished")
playerData.parsed = 1 playerData.parsed = 1
playerData.subtitleStream = undefined playerData.subtitleStream = undefined
renderSubs(playerData.selectedHeader) renderSubs(playerData.selectedHeader)
@ -110,6 +106,7 @@ Style: Default,${Object.values(subtitle1list.options).filter(item => item.value
} }
resolve(); resolve();
}); });
console.log("Sub parsing started")
file.createReadStream().pipe(parser) file.createReadStream().pipe(parser)
} }
}) })

View file

@ -194,9 +194,11 @@ navigator.serviceWorker.addEventListener('message', evt => {
respondWith(response) respondWith(response)
async function pull(msg) { async function pull(msg) {
if (msg.data) { if (msg.data) {
respondWith((await asyncIterator.next()).value) const chunk = (await asyncIterator.next()).value
respondWith(chunk)
if (!chunk) port.onmessage = null
} else { } else {
console.log('Closing stream', stream) console.log('Closing stream')
stream.destroy() stream.destroy()
port.onmessage = null port.onmessage = null
} }

View file

@ -37,13 +37,6 @@ self.addEventListener('fetch', evt => {
let tm = null let tm = null
const body = data.body === 'stream' ? new ReadableStream({ const body = data.body === 'stream' ? new ReadableStream({
pull(controller) { pull(controller) {
clearTimeout(tm)
tm = setTimeout(() => {
controller.close()
mc.port1.postMessage(false)
}, 15000)
return new Promise(rs => { return new Promise(rs => {
mc.port1.onmessage = evt => { mc.port1.onmessage = evt => {
if (evt.data) { if (evt.data) {
@ -51,10 +44,19 @@ self.addEventListener('fetch', evt => {
} else { } else {
clearTimeout(tm) clearTimeout(tm)
controller.close() // evt.data is null, means the stream ended controller.close() // evt.data is null, means the stream ended
// mc.port1.postMessage(false) mc.port1.onmessage = null
} }
rs() rs()
} }
clearTimeout(tm)
tm = setTimeout(() => {
controller.close()
mc.port1.postMessage(false) // send timeout
mc.port1.onmessage = null
rs()
}, 5000)
mc.port1.postMessage(true) // send a pull request mc.port1.postMessage(true) // send a pull request
}) })
}, },