mirror of
https://github.com/bytedream/stream-bypass.git
synced 2025-06-27 18:40:31 +02:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
44d4c9cbcf | |||
b34531b982 | |||
e699d3885c | |||
396038a803 | |||
bd64d4ed0b | |||
a207c336b0 | |||
2460657f2a | |||
698ed5ac3c | |||
dc42220f09 | |||
e146649bbf | |||
424e34190c |
32
README.md
32
README.md
@ -67,22 +67,22 @@ 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) | ❌ | URL can be extracted but not played (see [here](https://github.com/ByteDream/stream-bypass/blob/674527ed9c1aa35a30fed135c46017571dd3ce31/src/match/matches.ts#L18) for more information) |
|
||||
| [evoload.io](https://evoload.io) | ✔️ | |
|
||||
| [mixdrop.co](https://mixdrop.co) | ✔ ️ | |
|
||||
| [mp4upload.com](https://mp4upload.com) | ❌ | URL can be extracted but not. Probably the same issue as with doodstream |
|
||||
| [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) | ✔️ | |
|
||||
| [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) | ✔ | |
|
||||
|
||||
- ✔️: 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.0",
|
||||
"version": "2.1.1",
|
||||
"description": "Multi-browser addon for multiple streaming providers which redirects directly to the source video",
|
||||
"main": "src/index.ts",
|
||||
"scripts": {
|
||||
|
15
src/index.ts
15
src/index.ts
@ -1,6 +1,7 @@
|
||||
import {getMatch} from "./match/match";
|
||||
import {storageDelete, storageGet} from "./store/store";
|
||||
import {Match, matches} from "./match/matches";
|
||||
import play = chrome.cast.media.timeout.play;
|
||||
|
||||
async function main() {
|
||||
let match: Match;
|
||||
@ -20,7 +21,19 @@ async function main() {
|
||||
}
|
||||
|
||||
const url = await match.match(re)
|
||||
location.assign(chrome.runtime.getURL(`ui/player/player.html?id=${match.id}&url=${encodeURIComponent(url)}`))
|
||||
|
||||
if (match.replace && !url.endsWith('.m3u8')) {
|
||||
const player = document.createElement('video')
|
||||
player.style.width = '100%'
|
||||
player.style.height = '100%'
|
||||
player.controls = true
|
||||
player.src = url
|
||||
|
||||
document.body.innerHTML = ''
|
||||
document.body.append(player)
|
||||
} else {
|
||||
window.location.assign(chrome.runtime.getURL(`ui/player/player.html?id=${match.id}&url=${encodeURIComponent(url)}&domains=${window.location.host}`))
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
|
@ -9,24 +9,23 @@ export abstract class Match {
|
||||
id: string
|
||||
reliability: Reliability
|
||||
domains: string[]
|
||||
replace?: boolean
|
||||
regex: RegExp
|
||||
abstract match(match: RegExpMatchArray): Promise<string>
|
||||
|
||||
notice?: string
|
||||
}
|
||||
|
||||
// DOES NOT WORK.
|
||||
// The url can be extracted (sometimes??? wtf) without problems but to receive the actual video, custom request
|
||||
// headers must be set. And because the javascript and browser ecosystem is so fucked up, there is no good way to
|
||||
// do this with media which can be natively played with the browser, like here.
|
||||
class Doodstream implements Match {
|
||||
name = 'Doodstream'
|
||||
id = 'doodstream'
|
||||
reliability = Reliability.HIGH
|
||||
domains = [
|
||||
'doodstream.com',
|
||||
'dood.pm'
|
||||
'dood.pm',
|
||||
'dood.ws'
|
||||
]
|
||||
replace = true
|
||||
regex = new RegExp(/(\/pass_md5\/.*?)'.*(\?token=.*?expiry=)/s)
|
||||
|
||||
async match(match: RegExpMatchArray): Promise<string> {
|
||||
@ -79,19 +78,20 @@ class Mixdrop implements Match {
|
||||
}
|
||||
}
|
||||
|
||||
/*class Mp4Upload implements Match {
|
||||
class Mp4Upload implements Match {
|
||||
name = 'Mp4Upload'
|
||||
id = 'mp4upload'
|
||||
reliability = Reliability.LOW
|
||||
reliability = Reliability.NORMAL
|
||||
domains = [
|
||||
'mp4upload.com'
|
||||
]
|
||||
replace = true
|
||||
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`
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
class Newgrounds implements Match {
|
||||
name = 'Newgrounds'
|
||||
@ -121,10 +121,10 @@ class Streamtape implements Match {
|
||||
domains = [
|
||||
'streamtape.com'
|
||||
]
|
||||
regex = new RegExp(/\/get_video\S*(?=')/gm)
|
||||
regex = new RegExp(/id=.*(?=')/gm)
|
||||
|
||||
async match(match: RegExpMatchArray): Promise<string> {
|
||||
return `https://streamtape.com${match[0]}`
|
||||
return `https://streamtape.com/get_video?${match.reverse()[0]}`
|
||||
}
|
||||
}
|
||||
|
||||
@ -242,8 +242,10 @@ class Vupload implements Match {
|
||||
}
|
||||
|
||||
export const matches = [
|
||||
new Doodstream(),
|
||||
new Evoload(),
|
||||
new Mixdrop(),
|
||||
new Mp4Upload(),
|
||||
new Newgrounds(),
|
||||
new Streamtape(),
|
||||
new Streamzz(),
|
||||
|
@ -2,7 +2,7 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>HLS</title>
|
||||
<title>Stream Bypass</title>
|
||||
<link rel="stylesheet" href="player.css">
|
||||
<script src="player.js" defer></script>
|
||||
</head>
|
||||
|
@ -65,13 +65,14 @@ async function main() {
|
||||
const urlQuery = new URLSearchParams(window.location.search)
|
||||
const id = urlQuery.get('id')
|
||||
const url = 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>`)
|
||||
return
|
||||
}
|
||||
document.title = match.name
|
||||
document.title = `Stream Bypass (${domain})`
|
||||
|
||||
url.endsWith('.m3u8') ? await play_hls(url, match) : await play_native(url, match)
|
||||
}
|
||||
|
Reference in New Issue
Block a user