mirror of
https://github.com/bytedream/stream-bypass.git
synced 2025-06-27 10:30:31 +02:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
9f0e1b59ce | |||
d928d25e09 | |||
266771aa13 | |||
d56672d90f | |||
a9ea5fe4b2 | |||
bb3f5384d6 | |||
6989587161 |
35
README.md
35
README.md
@ -67,22 +67,25 @@ Install the addon directly from the [firefox addon store](https://addons.mozilla
|
||||
|
||||
## 📜 Supported sites
|
||||
|
||||
| Site | Supported | Note |
|
||||
|-----------------------------------------------------------------------|-----------|--------------------------------------------------|
|
||||
| [doodstream.com](doodstream.com) / [dood.pm](https://dood.pm) | ✔️ | |
|
||||
| [evoload.io](https://evoload.io) | ✔️ | |
|
||||
| [mixdrop.co](https://mixdrop.co) | ✔ ️ | |
|
||||
| [mp4upload.com](https://mp4upload.com) | ✔ | |
|
||||
| [newgrounds.com](https://newgrounds.com) | ✔ | |
|
||||
| [streamtape.com](https://streamtape.com) | ✔ | |
|
||||
| [streamzz.to](https://streamzz.to) / [streamz.ws](https://streamz.ws) | ✔ | |
|
||||
| [upstream.to](https://upstream.to) | ✔ | |
|
||||
| [videovard.sx](https://videovard.sx) | ❌ | Reverse engineering the site costs too much time |
|
||||
| [vidlox.me](https://vidlox.me) | ⚠ | Website down / Timeout |
|
||||
| [vidoza.net](https://vidoza.net) | ✔ | |
|
||||
| [vivo.sx](https://vivo.sx) | ⚠️ | Website down / Timeout |
|
||||
| [voe.sx](https://voe.sx) / [voeunblk.com](https://voeunblk.com) | ✔ | |
|
||||
| [vupload.com](https://vupload.com) | ✔ | |
|
||||
| Site | Supported | Note |
|
||||
|-----------------------------------------------------------------------|-----------|-------------------------------------------------------|
|
||||
| [doodstream.com](doodstream.com) / [dood.pm](https://dood.pm) | ✔️ | |
|
||||
| [evoload.io](https://evoload.io) | ⚠️️ | Website down / Timeout |
|
||||
| [filemoon.sx](https://filemoon.sx) | ✔ | |
|
||||
| [mcloud.to](https://mcloud.to/) | ❌ | Reverse engineering the site costs too much time (#5) |
|
||||
| [mixdrop.co](https://mixdrop.co) | ✔ ️ | |
|
||||
| [mp4upload.com](https://mp4upload.com) | ✔ | |
|
||||
| [newgrounds.com](https://newgrounds.com) | ✔ | |
|
||||
| [streamtape.com](https://streamtape.com) | ✔ | |
|
||||
| [streamzz.to](https://streamzz.to) / [streamz.ws](https://streamz.ws) | ✔ | |
|
||||
| [upstream.to](https://upstream.to) | ✔ | |
|
||||
| [videovard.sx](https://videovard.sx) | ❌ | Reverse engineering the site costs too much time |
|
||||
| [vidlox.me](https://vidlox.me) | ⚠ | Website down / Timeout |
|
||||
| [vidoza.net](https://vidoza.net) | ✔ | |
|
||||
| [vistream.pro](https://vidstream.pro) | ❌ | Reverse engineering the site costs too much time (#5) |
|
||||
| [vivo.sx](https://vivo.sx) | ⚠️ | Website down / Timeout |
|
||||
| [voe.sx](https://voe.sx) | ✔ | |
|
||||
| [vupload.com](https://vupload.com) | ✔ | |
|
||||
|
||||
- ✔️: Everything ok.
|
||||
- ⚠: Included in the addon but will probably not work. See `Note` in this case, an explanation why will stand there in the most cases.
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "stream-bypass",
|
||||
"version": "2.1.5",
|
||||
"version": "2.1.6",
|
||||
"description": "Multi-browser addon for multiple streaming providers which redirects directly to the source video",
|
||||
"main": "src/index.ts",
|
||||
"scripts": {
|
||||
|
@ -3,7 +3,7 @@
|
||||
"name": "Stream Bypass",
|
||||
"author": "ByteDream",
|
||||
"description": "A multi-browser addon / extension for multiple streaming providers which redirects directly to the source video.",
|
||||
"version": "2.1.5",
|
||||
"version": "2.1.6",
|
||||
"homepage_url": "https://github.com/ByteDream/stream-bypass",
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
|
@ -1,5 +1,5 @@
|
||||
export enum Reliability {
|
||||
HIGH = 1,
|
||||
HIGH,
|
||||
NORMAL,
|
||||
LOW,
|
||||
}
|
||||
@ -65,6 +65,26 @@ class Evoload implements Match {
|
||||
}
|
||||
}
|
||||
|
||||
class Filemoon implements Match {
|
||||
name = 'Filemoon'
|
||||
id = 'filemoon'
|
||||
reliability = Reliability.HIGH
|
||||
domains = [
|
||||
'filemoon.sx'
|
||||
]
|
||||
regex = new RegExp(/(?<=\|)\w{2,}/gm)
|
||||
|
||||
async match(match: RegExpMatchArray): Promise<string> {
|
||||
const start_idx = match.indexOf('moon')
|
||||
|
||||
const prefix = `${match[start_idx]}-${match[start_idx-1]}-${match[start_idx-2]}-${match[start_idx-3]}`
|
||||
const time = match.find(m => m.length === 10 && !isNaN(parseInt(m)))
|
||||
const offset = !isNaN(parseInt(match[start_idx-12])) && parseInt(match[start_idx-12]).toString().length == match[start_idx-12].length ? 0 : -1
|
||||
|
||||
return `https://${prefix}.filemoon.${match[start_idx-4]}/${match[start_idx-5]}/${match[start_idx-6]}/${match[start_idx-7]}/${match[start_idx-8]}/master.m3u8?t=${match[start_idx-11]}${offset != 0 ? `-${match[start_idx-12]}` : ''}&s=${time}&e=${match[start_idx + offset - 12]}&sp=${match[start_idx + offset - 18]}`
|
||||
}
|
||||
}
|
||||
|
||||
class Mixdrop implements Match {
|
||||
name = 'Mixdrop'
|
||||
id = 'mixdrop'
|
||||
@ -98,7 +118,8 @@ class Mp4Upload implements Match {
|
||||
regex = new RegExp(/(?<=\|)\w{2,}/gm)
|
||||
|
||||
async match(match: RegExpMatchArray): Promise<string> {
|
||||
return `https://${match[34]}.mp4upload.com:${match[89]}/d/${match[88]}/video.mp4`
|
||||
let id = match.slice().reduce((a, b) => a.length >= b.length ? a : b)
|
||||
return `https://www4.mp4upload.com:282/d/${id}/video.mp4`
|
||||
}
|
||||
}
|
||||
|
||||
@ -253,6 +274,7 @@ class Vupload implements Match {
|
||||
export const matches = [
|
||||
new Doodstream(),
|
||||
new Evoload(),
|
||||
new Filemoon(),
|
||||
new Mixdrop(),
|
||||
new Mp4Upload(),
|
||||
new Newgrounds(),
|
||||
|
@ -11,7 +11,7 @@
|
||||
<div id="message-container">
|
||||
<p id="message"></p>
|
||||
<br>
|
||||
<p>Open a new issue <a href="https://github.com/ByteDream/stream-bypass/issues/new">here</a></p>
|
||||
<p>Open a new issue <a href="https://github.com/ByteDream/stream-bypass/issues">here</a></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
import {Match, matches, Reliability} from "../../match/matches";
|
||||
import {matches} from "../../match/matches";
|
||||
// @ts-ignore
|
||||
import Hls from "hls.js";
|
||||
|
||||
@ -8,51 +8,13 @@ function show_message(message: string) {
|
||||
document.getElementById('video').hidden = true
|
||||
}
|
||||
|
||||
async function check_loaded(match: Match, check: Promise<boolean>) {
|
||||
const loaded = await new Promise((resolve, _) => {
|
||||
setTimeout(() => {
|
||||
resolve(false)
|
||||
}, match.reliability * 3000)
|
||||
|
||||
check
|
||||
.then(value => resolve(value))
|
||||
.catch(_ => resolve(false))
|
||||
})
|
||||
|
||||
if (!loaded) {
|
||||
let message: string
|
||||
switch (match.reliability) {
|
||||
case Reliability.LOW:
|
||||
message = `The reliability for this domain is low, errors like this are common.
|
||||
Try to choose another streaming provider (if existent) or deactivate the addon for this provider (${match.name}) and try again`
|
||||
break
|
||||
case Reliability.NORMAL:
|
||||
message = `The reliability for this domain is normal, errors like this can occur but are not very common. Try to refresh the page`
|
||||
break
|
||||
case Reliability.HIGH:
|
||||
message = `The reliability for this domains is high, errors like this are very unlikely to happen.
|
||||
Try to refresh the page and if the error still exists you might want to open a new issue.
|
||||
When you're using Tor, such errors have a slight chance to occur more often,
|
||||
so if this is the case just try to reload the page and see if it's working then`
|
||||
break
|
||||
}
|
||||
show_message(`Could not load video. ${message}`)
|
||||
}
|
||||
}
|
||||
|
||||
async function play_native(url: string, match: Match) {
|
||||
async function play_native(url: string) {
|
||||
const video = document.getElementById('video') as HTMLVideoElement
|
||||
video.controls = true
|
||||
video.src = url
|
||||
|
||||
const readyState = new Promise<boolean>((resolve, _) => {
|
||||
video.onloadeddata = () => resolve(true)
|
||||
})
|
||||
|
||||
await check_loaded(match, readyState)
|
||||
}
|
||||
|
||||
async function play_hls(url: string, match: Match) {
|
||||
async function play_hls(url: string) {
|
||||
const video = document.getElementById('video') as HTMLVideoElement
|
||||
video.controls = true
|
||||
|
||||
@ -64,12 +26,6 @@ async function play_hls(url: string, match: Match) {
|
||||
})
|
||||
hls.loadSource(url)
|
||||
hls.attachMedia(video)
|
||||
|
||||
const readyState = new Promise<boolean>((resolve, _) => {
|
||||
video.onloadeddata = () => resolve(true)
|
||||
})
|
||||
|
||||
await check_loaded(match, readyState)
|
||||
} else {
|
||||
show_message('Failed to play m3u8 video (hls is not supported). Try again or create a new issue <a href="https://github.com/ByteDream/stream-bypass/issues/new">here</a>')
|
||||
}
|
||||
@ -78,17 +34,17 @@ async function play_hls(url: string, match: Match) {
|
||||
async function main() {
|
||||
const urlQuery = new URLSearchParams(window.location.search)
|
||||
const id = urlQuery.get('id')
|
||||
const url = urlQuery.get('url')
|
||||
const url = decodeURIComponent(urlQuery.get('url'))
|
||||
const domain = urlQuery.get('domain')
|
||||
|
||||
const match = matches.find((m) => m.id === id)
|
||||
if (match === undefined) {
|
||||
show_message(`Invalid id: ${id}. Please report this <a href="https://github.com/ByteDream/stream-bypass/issues/new">here</a>`)
|
||||
show_message(`Invalid id: ${id}. Please report this <a href="https://github.com/ByteDream/stream-bypass/issues">here</a>`)
|
||||
return
|
||||
}
|
||||
document.title = `Stream Bypass (${domain})`
|
||||
|
||||
url.endsWith('.m3u8') ? await play_hls(url, match) : await play_native(url, match)
|
||||
new URL(url).pathname.endsWith('.m3u8') ? await play_hls(url) : await play_native(url)
|
||||
}
|
||||
|
||||
main()
|
||||
|
@ -17,7 +17,7 @@
|
||||
<hr>
|
||||
<table id="sub-container">
|
||||
</table>
|
||||
<a id="error" href="https://github.com/ByteDream/stream-bypass/issues/new">Something does not work</a>
|
||||
<a id="error" href="https://github.com/ByteDream/stream-bypass/issues">Something does not work</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
Reference in New Issue
Block a user