diff --git a/app/js/playerHandler.js b/app/js/playerHandler.js
index c586461..956bd6f 100644
--- a/app/js/playerHandler.js
+++ b/app/js/playerHandler.js
@@ -477,9 +477,9 @@ async function btnpip() {
function renderFrame() {
if (running === true) {
- context.drawImage(video, 0, 0)
- context.drawImage(subtitleCanvas, 0, 0, canvas.width, canvas.height)
- window.requestAnimationFrame(renderFrame)
+ context.drawImage(video, 0, 0);
+ context.drawImage(subtitleCanvas, 0, 0, canvas.width, canvas.height);
+ window.requestAnimationFrame(renderFrame);
}
}
canvasVideo.srcObject = canvas.captureStream()
diff --git a/app/js/subtitles-octopus-worker.js b/app/js/subtitles-octopus-worker.js
index 78fe9b8..807a94a 100644
--- a/app/js/subtitles-octopus-worker.js
+++ b/app/js/subtitles-octopus-worker.js
@@ -9064,27 +9064,27 @@ self.fastRender = function (force) {
self.offscreenRender = function (force) {
self.rafId = 0;
self.renderPending = false;
- // var startTime = performance.now();
+ // let startTime = performance.now();
let result = self.octObj.renderImage(self.getCurrentTime() + self.delay, self.changed),
changed = Module.getValue(self.changed, "i32");
if ((changed != 0 || force) && self.offscreenCanvas) {
let images = self.buildResultImage(result);
- // var newTime = performance.now();
- // var libassTime = newTime - startTime;
+ // let newTime = performance.now(),
+ // libassTime = newTime - startTime;
let promises = [];
for (var i = 0; i < images.length; i++) {
promises[i] = createImageBitmap(images[i].image)
}
Promise.all(promises).then(function (bitmaps) {
- // var decodeTime = performance.now() - newTime;
+ // let decodeTime = performance.now() - newTime;
function renderFastFrames() {
- // var beforeDrawTime = performance.now();
+ // let beforeDrawTime = performance.now();
self.offscreenCanvasCtx.clearRect(0, 0, self.offscreenCanvas.width, self.offscreenCanvas.height);
for (var i = 0; i < bitmaps.length; i++) {
self.offscreenCanvasCtx.drawImage(bitmaps[i], images[i].x, images[i].y);
- // var drawTime = Math.round(performance.now() - beforeDrawTime);
- // console.log(bitmaps.length + ' bitmaps, libass: ' + Math.round(libassTime) + 'ms, decode: ' + Math.round(decodeTime) + 'ms, draw: ' + drawTime + 'ms');
}
+ // let drawTime = performance.now() - beforeDrawTime;
+ // console.log(bitmaps.length + ' bitmaps, libass: ' + libassTime + 'ms, decode: ' + decodeTime + 'ms, draw: ' + drawTime + 'ms');
}
self.requestAnimationFrame(renderFastFrames);
})
@@ -9124,15 +9124,14 @@ self.buildResultImageItem = function (ptr) {
data = new Uint32Array(buf);
let bitmapPosition = 0,
resultPosition = 0;
- for (var y = 0; y < h; ++y) {
- for (var x = 0; x < w; ++x) {
- const k = Module.HEAPU8[bitmap + bitmapPosition + x];
+ for (let y = h; y--; bitmapPosition += stride) {
+ const offset = bitmap + bitmapPosition;
+ for (let x = 0, z = w; z--; ++x, resultPosition++) {
+ const k = Module.HEAPU8[offset + x];
if (k !== 0) {
data[resultPosition] = a * k << 24 | c;
}
- resultPosition++;
}
- bitmapPosition += stride;
}
const image = new ImageData(buf8, w, h);
x = ptr.dst_x;
diff --git a/app/js/torrentHandler.js b/app/js/torrentHandler.js
index 656e578..8477d73 100644
--- a/app/js/torrentHandler.js
+++ b/app/js/torrentHandler.js
@@ -26,7 +26,7 @@ const announceList = [
// ['ws://tracker.btsync.cf:6969/announce'],
// ['ws://hub.bugout.link:80/announce']
],
- videoExtensions = ['.avi', '.mp4', '.m4v', '.webm', '.mov', '.mkv', '.mpg', '.mpeg', '.ogv', '.wmv', '.m2ts'],
+ videoExtensions = [".3g2", ".3gp", ".asf", ".avi", ".dv", ".flv", ".gxf", ".m2ts", ".m4a", ".m4b", ".m4p", ".m4r", ".m4v", ".mkv", ".mov", ".mp4", ".mpd", ".mpeg", ".mpg", ".mxf", ".nut", ".ogm", ".ogv", ".swf", ".ts", ".vob", ".webm", ".wmv", ".wtv"],
scope = "/app/",
sw = navigator.serviceWorker.register('sw.js', { scope }).then(e => {
if (searchParams.get("file")) addTorrent(searchParams.get("file"), {}) // add a torrent if its in the link params
@@ -84,6 +84,7 @@ loadOfflineStorage()
function cleanupTorrents() {
// creates an array of all non-offline store torrents and removes them
client.torrents.filter(torrent => !offlineTorrents[torrent.infoHash]).forEach(torrent => torrent.destroy({ destroyStore: true }))
+ document.querySelector(".playlist").innerHTML = ""
}
// manually add trackers
@@ -104,10 +105,8 @@ async function playTorrent(torrent, opts) {
await sw
videoFiles = torrent.files.filter(file => videoExtensions.some(ext => file.name.endsWith(ext)))
if (videoFiles.length > 1) {
- if (!torrent.store.store._idbkvStore) {
- torrent.files.forEach(file => file.deselect());
- torrent.deselect(0, torrent.pieces.length - 1, false);
- }
+ torrent.files.forEach(file => file.deselect());
+ torrent.deselect(0, torrent.pieces.length - 1, false);
let frag = document.createDocumentFragment()
for (let file of videoFiles) {
let mediaInformation = await resolveFileMedia({ fileName: file.name, method: "SearchName" })
@@ -153,7 +152,7 @@ function serveFile(file, req) {
const res = {
status: 200,
headers: {
- 'Content-Type': file._getMimeType() || 'video/webm', // lazy workaround for some browsers getting upset about no mime type
+ 'Content-Type': file._getMimeType(),
// Support range-requests
'Accept-Ranges': 'bytes'
}
diff --git a/app/test2.html b/app/test2.html
deleted file mode 100644
index 2fa0f5d..0000000
--- a/app/test2.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/support.html b/support.html
new file mode 100644
index 0000000..626f302
--- /dev/null
+++ b/support.html
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Miru - FAQ
+
+
+
+
+
+
+
+
+
+
+
+ Containers
+ Chromium
+ Mobile Chromium
+ Edge Chromium
+ Firefox
+
+
+
+
+ 3g2
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ 3gp
+ ✓
+ ✓
+ ✓
+ ✘
+
+
+ avi
+ ✘
+ ✘
+ ✘
+ ✘
+
+
+ m2ts
+ ✘
+ ✘
+ ✓**
+ ✘
+
+
+ m4v etc.
+ ✓*
+ ✓*
+ ✓*
+ ✓*
+
+
+ mp4
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ mpeg
+ ✘
+ ✘
+ ✘
+ ✘
+
+
+ mov
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ ogm ogv
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ webm
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ mkv
+ ✓
+ ✓
+ ✓
+ ✘
+
+
+
+ * Container might be supported, but the container's codecs might not be.
+ ** Documented as working, but can't reproduce.
+ Full list of all tested video extensions:
+ .3g2 .3gp .asf .avi .dv .flv .gxf .m2ts .m4a .m4b .m4p .m4r .m4v .mkv .mov .mp4 .mpd .mpeg .mpg .mxf
+ .nut .ogm .ogv .swf .ts .vob .webm .wmv .wtv
+ Are any missing?
+
+
+
+ Video Codecs
+ Chromium
+ Mobile Chromium
+ Edge Chromium
+ Firefox
+
+
+
+
+ AV1
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ H.263
+ ✘
+ ✘
+ ✘
+ ✘
+
+
+ H.264
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ H.265
+ ✘
+ ✘
+ ✓*
+ ✘
+
+
+ MPEG-2/4
+ ✘
+ ✘
+ ✘
+ ✘
+
+
+ Theora
+ ✓
+ ✘
+ ✓
+ ✓
+
+
+ VP8/9
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+
+ * Requires MSStore extension which you can get by clicking
this link while using Edge.
+
+
+
+ Audio Codecs
+ Chromium
+ Mobile Chromium
+ Edge Chromium
+ Firefox
+
+
+
+
+ AAC
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ AC3
+ ✘
+ ✘
+ ✓**
+ ✘
+
+
+ DTS
+ ✘
+ ✘
+ ✘
+ ✘
+
+
+ EAC3
+ ✘
+ ✘
+ ✓**
+ ✘
+
+
+ FLAC
+ ✓
+ ✓*
+ ✓
+ ✓
+
+
+ MP3
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ Opus
+ ✓
+ ✓
+ ✓
+ ✓
+
+
+ TrueHD
+ ✘
+ ✘
+ ✘
+ ✘
+
+
+ Vorbis
+ ✓
+ ✓
+ ✓
+ ✓*
+
+
+
+ * Might not work in some video containers.
+ ** Documented as working, but can't reproduce.
+
+
+
+
+
+
+
\ No newline at end of file