feat(extractor): add new MediaFlow Proxy extractors FileMoon, LuluStream and Voe
This commit is contained in:
parent
d1493cbb57
commit
bb21bbc7fa
23 changed files with 1688 additions and 0 deletions
20
src/extractor/FileMoon.test.ts
Normal file
20
src/extractor/FileMoon.test.ts
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import winston from 'winston';
|
||||
import { createTestContext } from '../test';
|
||||
import { FetcherMock } from '../utils';
|
||||
import { ExtractorRegistry } from './ExtractorRegistry';
|
||||
import { FileMoon } from './FileMoon';
|
||||
|
||||
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
|
||||
const extractorRegistry = new ExtractorRegistry(logger, [new FileMoon(new FetcherMock(`${__dirname}/__fixtures__/FileMoon`))]);
|
||||
|
||||
const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow.test.org', mediaFlowProxyPassword: 'test' });
|
||||
|
||||
describe('FileMoon', () => {
|
||||
test('z1ekv717 d', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://z1ekv717.fun/d/wkhcbggdxf1d'))).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('page not found', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://filemoon.sx/e/n7i8zodwjqr9'))).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
73
src/extractor/FileMoon.ts
Normal file
73
src/extractor/FileMoon.ts
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
import * as cheerio from 'cheerio';
|
||||
import { NotFoundError } from '../error';
|
||||
import { Context, Format, Meta, UrlResult } from '../types';
|
||||
import { buildMediaFlowProxyExtractorStreamUrl, guessHeightFromPlaylist, supportsMediaFlowProxy } from '../utils';
|
||||
import { Extractor } from './Extractor';
|
||||
|
||||
/** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/filemoon.py */
|
||||
export class FileMoon extends Extractor {
|
||||
public readonly id = 'filemoon';
|
||||
|
||||
public readonly label = 'FileMoon (via MediaFlow Proxy)';
|
||||
|
||||
public override viaMediaFlowProxy = true;
|
||||
|
||||
public supports(ctx: Context, url: URL): boolean {
|
||||
const supportedDomain = null !== url.host.match(/filemoon/)
|
||||
|| [
|
||||
'1azayf9w.xyz',
|
||||
'222i8x.lol',
|
||||
'81u6xl9d.xyz',
|
||||
'8mhlloqo.fun',
|
||||
'96ar.com',
|
||||
'bf0skv.org',
|
||||
'boosteradx.online',
|
||||
'c1z39.com',
|
||||
'cinegrab.com',
|
||||
'f51rm.com',
|
||||
'furher.in',
|
||||
'kerapoxy.cc',
|
||||
'l1afav.net',
|
||||
'moonmov.pro',
|
||||
'smdfs40r.skin',
|
||||
'xcoic.com',
|
||||
'z1ekv717.fun',
|
||||
].includes(url.host);
|
||||
|
||||
return supportedDomain && supportsMediaFlowProxy(ctx);
|
||||
}
|
||||
|
||||
public override normalize(url: URL): URL {
|
||||
return new URL(url.href.replace('/e/', '/d/'));
|
||||
}
|
||||
|
||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
||||
const headers = { Referer: meta.referer ?? url.href };
|
||||
|
||||
const html = await this.fetcher.text(ctx, url, { headers });
|
||||
|
||||
if (/Page not found/.test(html)) {
|
||||
throw new NotFoundError();
|
||||
}
|
||||
|
||||
const playlistUrl = await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'FileMoon', url, headers);
|
||||
|
||||
const $ = cheerio.load(html);
|
||||
const title = $('h3').text().trim();
|
||||
|
||||
return [
|
||||
{
|
||||
url: playlistUrl,
|
||||
format: Format.hls,
|
||||
label: this.label,
|
||||
sourceId: `${this.id}_${meta.countryCodes?.join('_')}`,
|
||||
ttl: this.ttl,
|
||||
meta: {
|
||||
...meta,
|
||||
height: await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { queueLimit: 4 }),
|
||||
title,
|
||||
},
|
||||
},
|
||||
];
|
||||
};
|
||||
}
|
||||
20
src/extractor/LuluStream.test.ts
Normal file
20
src/extractor/LuluStream.test.ts
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import winston from 'winston';
|
||||
import { createTestContext } from '../test';
|
||||
import { FetcherMock } from '../utils';
|
||||
import { ExtractorRegistry } from './ExtractorRegistry';
|
||||
import { LuluStream } from './LuluStream';
|
||||
|
||||
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
|
||||
const extractorRegistry = new ExtractorRegistry(logger, [new LuluStream(new FetcherMock(`${__dirname}/__fixtures__/LuluStream`))]);
|
||||
|
||||
const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow.test.org', mediaFlowProxyPassword: 'test' });
|
||||
|
||||
describe('LuluStream', () => {
|
||||
test('streamhihi d', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://streamhihi.com/d/mk9m58lz8ts6'))).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('no such file', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://lulustream.com/e/uthq0o0sljnx'))).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
65
src/extractor/LuluStream.ts
Normal file
65
src/extractor/LuluStream.ts
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
import bytes from 'bytes';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { NotFoundError } from '../error';
|
||||
import { Context, Format, Meta, UrlResult } from '../types';
|
||||
import { buildMediaFlowProxyExtractorStreamUrl, guessHeightFromPlaylist, supportsMediaFlowProxy } from '../utils';
|
||||
import { Extractor } from './Extractor';
|
||||
|
||||
/** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/lulustream.py */
|
||||
export class LuluStream extends Extractor {
|
||||
public readonly id = 'lulustream';
|
||||
|
||||
public readonly label = 'LuluStream (via MediaFlow Proxy)';
|
||||
|
||||
public override viaMediaFlowProxy = true;
|
||||
|
||||
public supports(ctx: Context, url: URL): boolean {
|
||||
const supportedDomain = null !== url.host.match(/lulu/)
|
||||
|| [
|
||||
'732eg54de642sa.sbs',
|
||||
'cdn1.site',
|
||||
'd00ds.site',
|
||||
'streamhihi.com',
|
||||
].includes(url.host);
|
||||
|
||||
return supportedDomain && supportsMediaFlowProxy(ctx);
|
||||
}
|
||||
|
||||
public override normalize(url: URL): URL {
|
||||
return new URL(url.href.replace('/d/', '/e/'));
|
||||
}
|
||||
|
||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
||||
const headers = { Referer: meta.referer ?? url.href };
|
||||
|
||||
const fileUrl = new URL(url.href.replace('/e/', '/d/'));
|
||||
const html = await this.fetcher.text(ctx, fileUrl, { headers });
|
||||
|
||||
if (/No such file/.test(html)) {
|
||||
throw new NotFoundError();
|
||||
}
|
||||
|
||||
const $ = cheerio.load(html);
|
||||
const title = $('h1').text().trim();
|
||||
|
||||
const sizeMatch = html.match(/([\d.]+ ?[GM]B)/) as string[];
|
||||
|
||||
const playlistUrl = await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'LuluStream', url, headers);
|
||||
|
||||
return [
|
||||
{
|
||||
url: playlistUrl,
|
||||
format: Format.hls,
|
||||
label: this.label,
|
||||
sourceId: `${this.id}_${meta.countryCodes?.join('_')}`,
|
||||
ttl: this.ttl,
|
||||
meta: {
|
||||
...meta,
|
||||
bytes: bytes.parse(sizeMatch[1] as string) as number,
|
||||
height: await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { queueLimit: 4 }),
|
||||
title,
|
||||
},
|
||||
},
|
||||
];
|
||||
};
|
||||
}
|
||||
20
src/extractor/Voe.test.ts
Normal file
20
src/extractor/Voe.test.ts
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import winston from 'winston';
|
||||
import { createTestContext } from '../test';
|
||||
import { FetcherMock } from '../utils';
|
||||
import { ExtractorRegistry } from './ExtractorRegistry';
|
||||
import { Voe } from './Voe';
|
||||
|
||||
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
|
||||
const extractorRegistry = new ExtractorRegistry(logger, [new Voe(new FetcherMock(`${__dirname}/__fixtures__/Voe`))]);
|
||||
|
||||
const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow.test.org', mediaFlowProxyPassword: 'test' });
|
||||
|
||||
describe('Voe', () => {
|
||||
test('jilliandescribecompany', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://jilliandescribecompany.com/e/ea21l02gcygw'))).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('encoding error', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://voe.sx/e/c2yxvit4f6bz'))).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
151
src/extractor/Voe.ts
Normal file
151
src/extractor/Voe.ts
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
import * as cheerio from 'cheerio';
|
||||
import { NotFoundError } from '../error';
|
||||
import { Context, Format, Meta, UrlResult } from '../types';
|
||||
import { buildMediaFlowProxyExtractorStreamUrl, guessHeightFromPlaylist, supportsMediaFlowProxy } from '../utils';
|
||||
import { Extractor } from './Extractor';
|
||||
|
||||
/** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/voesx.py */
|
||||
export class Voe extends Extractor {
|
||||
public readonly id = 'voe';
|
||||
|
||||
public readonly label = 'VOE (via MediaFlow Proxy)';
|
||||
|
||||
public override viaMediaFlowProxy = true;
|
||||
|
||||
public supports(ctx: Context, url: URL): boolean {
|
||||
const supportedDomain = null !== url.host.match(/voe/)
|
||||
|| [
|
||||
'19turanosephantasia.com',
|
||||
'20demidistance9elongations.com',
|
||||
'30sensualizeexpression.com',
|
||||
'321naturelikefurfuroid.com',
|
||||
'35volitantplimsoles5.com',
|
||||
'449unceremoniousnasoseptal.com',
|
||||
'745mingiestblissfully.com',
|
||||
'adrianmissionminute.com',
|
||||
'alleneconomicmatter.com',
|
||||
'antecoxalbobbing1010.com',
|
||||
'apinchcaseation.com',
|
||||
'audaciousdefaulthouse.com',
|
||||
'availedsmallest.com',
|
||||
'bigclatterhomesguideservice.com',
|
||||
'boonlessbestselling244.com',
|
||||
'bradleyviewdoctor.com',
|
||||
'brittneystandardwestern.com',
|
||||
'brucevotewithin.com',
|
||||
'chromotypic.com',
|
||||
'chuckle-tube.com',
|
||||
'cindyeyefinal.com',
|
||||
'counterclockwisejacky.com',
|
||||
'crownmakermacaronicism.com',
|
||||
'cyamidpulverulence530.com',
|
||||
'diananatureforeign.com',
|
||||
'donaldlineelse.com',
|
||||
'edwardarriveoften.com',
|
||||
'erikcoldperson.com',
|
||||
'figeterpiazine.com',
|
||||
'fittingcentermondaysunday.com',
|
||||
'fraudclatterflyingcar.com',
|
||||
'gamoneinterrupted.com',
|
||||
'generatesnitrosate.com',
|
||||
'graceaddresscommunity.com',
|
||||
'greaseball6eventual20.com',
|
||||
'guidon40hyporadius9.com',
|
||||
'heatherdiscussionwhen.com',
|
||||
'housecardsummerbutton.com',
|
||||
'jamessoundcost.com',
|
||||
'jamiesamewalk.com',
|
||||
'jasminetesttry.com',
|
||||
'jayservicestuff.com',
|
||||
'jennifercertaindevelopment.com',
|
||||
'jilliandescribecompany.com',
|
||||
'johnalwayssame.com',
|
||||
'jonathansociallike.com',
|
||||
'josephseveralconcern.com',
|
||||
'kathleenmemberhistory.com',
|
||||
'kellywhatcould.com',
|
||||
'kennethofficialitem.com',
|
||||
'kristiesoundsimply.com',
|
||||
'launchreliantcleaverriver.com',
|
||||
'lisatrialidea.com',
|
||||
'loriwithinfamily.com',
|
||||
'lukecomparetwo.com',
|
||||
'mariatheserepublican.com',
|
||||
'matriculant401merited.com',
|
||||
'maxfinishseveral.com',
|
||||
'metagnathtuggers.com',
|
||||
'michaelapplysome.com',
|
||||
'nathanfromsubject.com',
|
||||
'nectareousoverelate.com',
|
||||
'nonesnanking.com',
|
||||
'paulkitchendark.com',
|
||||
'realfinanceblogcenter.com',
|
||||
'rebeccaneverbase.com',
|
||||
'reputationsheriffkennethsand.com',
|
||||
'richardsignfish.com',
|
||||
'roberteachfinal.com',
|
||||
'robertordercharacter.com',
|
||||
'robertplacespace.com',
|
||||
'sandratableother.com',
|
||||
'sandrataxeight.com',
|
||||
'scatch176duplicities.com',
|
||||
'sethniceletter.com',
|
||||
'shannonpersonalcost.com',
|
||||
'simpulumlamerop.com',
|
||||
'stevenimaginelittle.com',
|
||||
'strawberriesporail.com',
|
||||
'telyn610zoanthropy.com',
|
||||
'timberwoodanotia.com',
|
||||
'toddpartneranimal.com',
|
||||
'toxitabellaeatrebates306.com',
|
||||
'uptodatefinishconferenceroom.com',
|
||||
'v-o-e-unblock.com',
|
||||
'valeronevijao.com',
|
||||
'wolfdyslectic.com',
|
||||
'yodelswartlike.com',
|
||||
].includes(url.host);
|
||||
|
||||
return supportedDomain && supportsMediaFlowProxy(ctx);
|
||||
}
|
||||
|
||||
public override normalize(url: URL): URL {
|
||||
const videoId = url.pathname.split('/').slice(-1)[0] as string;
|
||||
|
||||
return new URL(`/e/${videoId}`, url);
|
||||
}
|
||||
|
||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
||||
const headers = { Referer: meta.referer ?? url.href };
|
||||
|
||||
const html = await this.fetcher.text(ctx, url, { headers });
|
||||
|
||||
const redirectMatch = html.match(/window\.location\.href\s*=\s*'([^']+)/);
|
||||
if (redirectMatch && redirectMatch[1]) {
|
||||
return await this.extractInternal(ctx, new URL(redirectMatch[1]), meta);
|
||||
}
|
||||
|
||||
if (/An error occurred during encoding/.test(html)) {
|
||||
throw new NotFoundError();
|
||||
}
|
||||
|
||||
const $ = cheerio.load(html);
|
||||
const title = $('meta[name="description"]').attr('content')?.trim().replace(/^Watch /, '').replace(/ at VOE$/, '').trim();
|
||||
|
||||
const playlistUrl = await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'Voe', url, headers);
|
||||
|
||||
return [
|
||||
{
|
||||
url: playlistUrl,
|
||||
format: Format.hls,
|
||||
label: this.label,
|
||||
sourceId: `${this.id}_${meta.countryCodes?.join('_')}`,
|
||||
ttl: this.ttl,
|
||||
meta: {
|
||||
...meta,
|
||||
height: await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { queueLimit: 4 }),
|
||||
title,
|
||||
},
|
||||
},
|
||||
];
|
||||
};
|
||||
}
|
||||
57
src/extractor/__fixtures__/FileMoon/https:filemoon.sxdn7i8zodwjqr9
generated
Normal file
57
src/extractor/__fixtures__/FileMoon/https:filemoon.sxdn7i8zodwjqr9
generated
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script>
|
||||
(function () {
|
||||
// Get all script tags in the <head>
|
||||
const scripts = document.head.querySelectorAll('script');
|
||||
|
||||
// Iterate through the scripts to find the one injecting the Proxy
|
||||
scripts.forEach((script) => {
|
||||
if (script.innerHTML.includes('window.open=new Proxy(window.open')) {
|
||||
console.log('Detected and removing injected script:', script);
|
||||
script.remove(); // Remove the script from the <head>
|
||||
}
|
||||
});
|
||||
|
||||
// Restore the original window.open functionality (optional)
|
||||
const originalOpen = Function.prototype.apply.bind(window.open);
|
||||
window.open = function (...args) {
|
||||
console.log('Restored window.open called:', args);
|
||||
return originalOpen(this, args);
|
||||
};
|
||||
|
||||
console.log('Injected script removed and window.open restored.');
|
||||
})();
|
||||
</script>
|
||||
<title>Not Found</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/assets/css/404.css?v=2">
|
||||
<link rel="apple-touch-icon" href="https://filemoon.to/assets/images/favicon/apple-touch-icon.png" sizes="180x180">
|
||||
<link rel="icon" href="https://filemoon.to/assets/images/favicon/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" href="https://filemoon.to/assets/images/favicon/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" href="https://filemoon.to/assets/images/favicon/favicon.ico">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
</body>
|
||||
<script src="/ad.js" type="text/javascript"></script>
|
||||
<div id="adb" class="ad doubleclick skyscraper" style="height:1px;width:1px;position:absolute;left:-999px;top:-999px;">ad</div>
|
||||
<script>
|
||||
window.fmn7i8zodwjqr9 = { token: "bed5d8dfa2e30a9a04", adblock: false, blockadblock: true, fileid: "n7i8zodwjqr9", ampallow: false };
|
||||
</script>
|
||||
|
||||
<div class="container">
|
||||
<div class="error e404">
|
||||
<div class="error-footer">
|
||||
<h1>Page not found</h1>
|
||||
<a href="/" class="button">Return home</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
4
src/extractor/__fixtures__/FileMoon/https:mediaflow.test.org-2df9a69a7a01fb3f2f7e847df89895d0
generated
Normal file
4
src/extractor/__fixtures__/FileMoon/https:mediaflow.test.org-2df9a69a7a01fb3f2f7e847df89895d0
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#EXTM3U
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=853331,RESOLUTION=1280x720,FRAME-RATE=24.000,CODECS="avc1.64001f,mp4a.40.2",VIDEO-RANGE=SDR
|
||||
https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fz1ekv717.fun%2Fd%2Fwkhcbggdxf1d&d=https%3A%2F%2Fbe7713.rcr82.waw05.i8yz83pn.com%2Fhls2%2F01%2F09665%2Fwkhcbggdxf1d_h%2Findex-v1-a1.m3u8%3Ft%3D359izbQ_L-sOHaIjj275YKdBDyiPzUi3ETfbNoN9bzU%26s%3D1759754698%26e%3D10800%26f%3D48329866%26srv%3D1075%26asn%3D13335%26sp%3D4000%26p%3D
|
||||
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=49442,RESOLUTION=1280x720,CODECS="avc1.64001f",URI="https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fz1ekv717.fun%2Fd%2Fwkhcbggdxf1d&d=https%3A%2F%2Fbe7713.rcr82.waw05.i8yz83pn.com%2Fhls2%2F01%2F09665%2Fwkhcbggdxf1d_h%2Fiframes-v1-a1.m3u8%3Ft%3D359izbQ_L-sOHaIjj275YKdBDyiPzUi3ETfbNoN9bzU%26s%3D1759754698%26e%3D10800%26f%3D48329866%26srv%3D1075%26asn%3D13335%26sp%3D4000%26p%3D",VIDEO-RANGE=SDR
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"destination_url":"https://be7713.rcr82.waw05.i8yz83pn.com/hls2/01/09665/wkhcbggdxf1d_h/master.m3u8?t=359izbQ_L-sOHaIjj275YKdBDyiPzUi3ETfbNoN9bzU&s=1759754698&e=10800&f=48329866&srv=1075&asn=13335&sp=4000&p=","request_headers":{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","referer":"https://z1ekv717.fun/d/wkhcbggdxf1d"},"mediaflow_proxy_url":"https://mediaflow.test.org/proxy/hls/manifest.m3u8","query_params":{"api_password":"test"}}
|
||||
226
src/extractor/__fixtures__/FileMoon/https:z1ekv717.fundwkhcbggdxf1d
generated
Normal file
226
src/extractor/__fixtures__/FileMoon/https:z1ekv717.fundwkhcbggdxf1d
generated
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Watch alien earth s01e01 1080p web h264 successfulcrab</title>
|
||||
<meta name="description" content="">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="theme-color" content="#FFF">
|
||||
|
||||
<link rel="apple-touch-icon" href="//z1ekv717.fun/assets/images/favicon/apple-touch-icon.png" sizes="180x180">
|
||||
<link rel="icon" href="//z1ekv717.fun/assets/images/favicon/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" href="//z1ekv717.fun/assets/images/favicon/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" href="//z1ekv717.fun/assets/images/favicon/favicon.ico">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="//z1ekv717.fun/assets/css/front.css?v=51">
|
||||
<META NAME="description" CONTENT="Watch video alien earth s01e01 1080p web h264 successfulcrab">
|
||||
<META NAME="keywords" CONTENT="alien, earth, s01e01, 1080p, web, h264, successfulcrab">
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body class="is-home d-flex flex-column justify-content-between ">
|
||||
<header class="header py-3 py-lg-4">
|
||||
<div class="container">
|
||||
<div class="row align-items-center justify-content-between justify-content-lg-start">
|
||||
<div class="col-auto d-lg-none">
|
||||
<button class="btn text-muted ssm-toggle-nav px-1" type="button">
|
||||
<i class="icon icon-menu icon-size-22 text-muted"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<a href="/" class="logo d-block"><img src="//z1ekv717.fun/assets/images/logo.svg" alt=""></a>
|
||||
</div>
|
||||
<div class="col-auto d-none d-lg-block flex-lg-grow-1">
|
||||
<nav class="nav ml-lg-3">
|
||||
<a class="nav-link" href="/premium">Premium</a>
|
||||
<a class="nav-link" href="/affiliate">Make Money</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<div class="d-none d-lg-flex">
|
||||
|
||||
<a href="/login" class="btn btn-dark sign-btn rounded-pill mr-2">Log In</a>
|
||||
<a href="/register" class="btn btn-success sign-btn rounded-pill">Sign Up</a>
|
||||
|
||||
</div>
|
||||
<div class="d-lg-none">
|
||||
<button class="btn text-muted usrmobile-toggle-nav px-1" type="button">
|
||||
<i class="icon icon-user icon-size-18 text-muted"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
<script src="https://filemoon.to/js/jquery.cookie.js"></script>
|
||||
<script>
|
||||
$.cookie('file_id', '48329866', { expires: 10 });
|
||||
$.cookie('aff', '31148', { expires: 10 });
|
||||
$.cookie('ref_url', 'https://z1ekv717.fun/d/wkhcbggdxf1d', { expires: 10 });
|
||||
</script>
|
||||
<script type="text/javascript" src='/js/ls.js'></script>
|
||||
<main class="flex-grow-1 a-bean">
|
||||
<div class="container mt-5">
|
||||
<div class="mb-4 mb-lg-5 sm-bg px-4 py-5 p-lg-0 mx-lg-5 rounded-lg">
|
||||
<div class="row justify-content-between align-items-center text-muted mb-4 mb-lg-5">
|
||||
<div class="col-auto mb-2">
|
||||
<h3 class="text-light mb-0 font-weight-bold">alien earth s01e01 1080p web h264-successfulcrab</h3>
|
||||
</div>
|
||||
<div class="col-auto mb-2"> Uploaded: <span class="text-success">2025-08-13 00:08:29</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-4 mb-lg-5 ">
|
||||
<div class="position-relative">
|
||||
|
||||
<div class="bimg-top text-center">
|
||||
<div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="height: 640px;" id="iframe-holder">
|
||||
|
||||
<iframe src="https://pqham.com/bkg/wkhcbggdxf1d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="100%" height="100%" allowfullscreen></iframe>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="bimg-bottom text-center">
|
||||
<div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mb-4 mb-lg-5 text-center">
|
||||
<a href="/download/wkhcbggdxf1d" class="btn btn-success px-5">Download</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<style>
|
||||
#vplayer {padding-top: 56.25%;}
|
||||
.bimg-top,
|
||||
.bimg-bottom {
|
||||
display: -webkit-flex;
|
||||
display: -ms-flex;
|
||||
display: flex;
|
||||
-ms-align-items: center;
|
||||
align-items: center;
|
||||
-webkit-flex-wrap: wrap;
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
.bimg-top div,
|
||||
.bimg-bottom div {
|
||||
margin: .5rem;
|
||||
}
|
||||
@media(min-width:1600px){
|
||||
.bimg-top,
|
||||
.bimg-bottom {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
flex-direction: column;
|
||||
}
|
||||
.bimg-top {
|
||||
left: -310px;
|
||||
}
|
||||
.bimg-bottom {
|
||||
right: -310px;
|
||||
}
|
||||
.bimg-top div,
|
||||
.bimg-bottom div {
|
||||
margin: .5rem 0;
|
||||
}
|
||||
}
|
||||
@media(min-width:1800px){
|
||||
.bimg-top {
|
||||
left: -350px;
|
||||
}
|
||||
.bimg-bottom {
|
||||
right: -350px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<footer class="footer py-4 py-lg-5">
|
||||
<div class="container">
|
||||
<div class="row align-items-center justify-content-between">
|
||||
<div class="col-auto my-1">
|
||||
<div class="text-muted"> FileMoon © 2022 </div>
|
||||
</div>
|
||||
<div class="col-auto my-1">
|
||||
<nav class="nav">
|
||||
<a class="nav-link text-muted footer-link px-0 mr-4" href="/">Home</a>
|
||||
<a class="nav-link text-muted footer-link px-0 mr-4" href="/tos">Terms of Service</a>
|
||||
<a class="nav-link text-muted footer-link px-0 mr-4" href="/privacy">Privacy Policy</a>
|
||||
<a class="nav-link text-muted footer-link px-0 mr-4" href="/copyright">Copyright Policy</a>
|
||||
<a class="nav-link text-muted footer-link px-0 mr-4" href="/affiliate">Make Money</a>
|
||||
<a class="nav-link text-muted footer-link px-0 mr-4" href="/api">API Documentation</a>
|
||||
<a class="nav-link text-muted footer-link px-0 mr-4" href="https://status.filemoon.sx">Server Status</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
<div class="ssm">
|
||||
<nav class="nav ssm-nav flex-column">
|
||||
<a class="nav-link ssm-nav-link active" href="/"><i class="icon icon-home icon-size-16 ssm-nav-icon mr-3"></i>Home</a>
|
||||
<a class="nav-link ssm-nav-link" href="/dashboard"><i class="icon icon-account icon-size-16 ssm-nav-icon mr-3"></i>My account</a>
|
||||
<a class="nav-link ssm-nav-link" href="/premium"><i class="icon icon-money icon-size-16 ssm-nav-icon mr-3"></i>Premium</a>
|
||||
<a class="nav-link ssm-nav-link" href="/affiliate"><i class="icon icon-money icon-size-16 ssm-nav-icon mr-3"></i>Make Money</a>
|
||||
</nav>
|
||||
<hr class="mx-3">
|
||||
<nav class="nav flex-column ssm-nav">
|
||||
<a class="nav-link ssm-nav-link" href="/tos"><i class="icon icon-pen icon-size-16 ssm-nav-icon mr-3"></i>Terms of Service</a>
|
||||
<a class="nav-link ssm-nav-link" href="/privacy"><i class="icon icon-key icon-size-16 ssm-nav-icon mr-3"></i>Privacy Policy</a>
|
||||
<a class="nav-link ssm-nav-link" href="/api"><i class="icon icon-note icon-size-16 ssm-nav-icon mr-3"></i>API Documentation</a>
|
||||
<a class="nav-link ssm-nav-link" href="https://status.filemoon.sx"><i class="icon icon-note icon-size-16 ssm-nav-icon mr-3"></i>Server Status</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="ssm-overlay ssm-toggle-nav"></div>
|
||||
<div class="usrmobile p-5 usrmobile-toggle-nav">
|
||||
|
||||
<a href="/login" class="btn btn-success btn-success-custom btn-lg btn-block text-uppercase shadow">Sign in</a>
|
||||
<a href="/register" class="btn btn-outline-success btn-lg btn-block mb-2 text-uppercase">Sign up</a>
|
||||
|
||||
</div>
|
||||
<script src="//z1ekv717.fun/assets/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="//z1ekv717.fun/assets/js/jquery.slideandswipe.min.js"></script>
|
||||
<script src="//z1ekv717.fun/assets/js/jquery.touchSwipe.min.js"></script>
|
||||
<script src="//z1ekv717.fun/assets/js/front.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
147
src/extractor/__fixtures__/LuluStream/https:lulustream.comduthq0o0sljnx
generated
Normal file
147
src/extractor/__fixtures__/LuluStream/https:lulustream.comduthq0o0sljnx
generated
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>LuluStream</title>
|
||||
|
||||
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<!--<meta name="robots" content="noindex, nofollow, nosnippet, noarchive, noimageindex" />-->
|
||||
<meta name="theme-color" content="#FFF">
|
||||
<link rel="apple-touch-icon" href="/static/images/favicon/apple-touch-icon.png" sizes="180x180">
|
||||
<link rel="icon" href="/static/images/favicon/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" href="/static/images/favicon/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="/static/images/favicon/manifest.json">
|
||||
<link rel="icon" href="/static/images/favicon/favicon.ico">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<link href="/static/css/style.css?10" rel="stylesheet">
|
||||
|
||||
<script src="/static/js/jquery-3.2.1.min.js"></script>
|
||||
<script src="/static/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/static/js/app.js"></script>
|
||||
<script src="/static/js/xupload.js?10"></script>
|
||||
</head>
|
||||
<body class="">
|
||||
|
||||
<header class="header">
|
||||
<div class="container">
|
||||
<div class="row align-items-center flex-nowrap">
|
||||
<div class="col-auto flex-grow-1 flex-shrink-1">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-auto d-lg-none">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="14">
|
||||
<path fill-rule="evenodd" fill="currentcolor" d="M17 8H1a1 1 0 1 1 0-2h16a1 1 0 1 1 0 2Zm0-6H1a1 1 0 0 1 0-2h16a1 1 0 1 1 0 2ZM1 12h16a1 1 0 1 1 0 2H1a1 1 0 1 1 0-2Z" />
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<a href="/?op=upload" class="dropdown-item">Upload</a>
|
||||
<a href="/premium" class="dropdown-item">Premium</a>
|
||||
<a href="/make_money" class="dropdown-item">Earn Money</a>
|
||||
<a href="/api.html" class="dropdown-item">Service API</a>
|
||||
<a href="/tos" class="dropdown-item">Terms of Service</a>
|
||||
<a href="/faq" class="dropdown-item">About us</a>
|
||||
<a href="/contact" class="dropdown-item">Contacts</a>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<a href="/" class="logo">
|
||||
<img src="/static/images/logo.svg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto d-none d-lg-block">
|
||||
<nav class="nav">
|
||||
<a href="/make_money" class="nav-link">Earn Money</a>
|
||||
<a href="/premium" class="nav-link">Premium</a>
|
||||
<a href="/api.html" class="nav-link">Api Docs</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-auto d-none d-lg-block">
|
||||
<a href="/login.html" class="btn login-btn me-1">Login</a>
|
||||
<a href="/?op=registration" class="btn btn-gradient reg-btn">Register</a>
|
||||
</div>
|
||||
<div class="col-auto d-lg-none">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">
|
||||
<path fill-rule="evenodd" fill="currentcolor" d="M16.525 17.561c-.032.032-.062.063-.099.09A9.953 9.953 0 0 1 10 20a9.947 9.947 0 0 1-6.448-2.369c-.018-.014-.032-.029-.048-.043A9.976 9.976 0 0 1 0 10C0 4.486 4.486 0 10 0s10 4.486 10 10c0 3.02-1.351 5.726-3.475 7.561Zm-1.92-1.03A3.013 3.013 0 0 0 12.002 15H7.998a2.972 2.972 0 0 0-2.606 1.529 7.952 7.952 0 0 0 9.213.002ZM10 2c-4.411 0-8 3.589-8 8a7.96 7.96 0 0 0 1.889 5.151A4.962 4.962 0 0 1 7.998 13h4.005c1.657 0 3.184.84 4.103 2.157A7.962 7.962 0 0 0 18 10c0-4.411-3.589-8-8-8Zm0 10c-2.206 0-4-1.794-4-4s1.794-4 4-4 4 1.794 4 4-1.794 4-4 4Zm0-6c-1.103 0-2 .897-2 2s.897 2 2 2 2-.897 2-2-.897-2-2-2Z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<a class="dropdown-item" href="/login.html">Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/?op=registration">Register</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
<main>
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
|
||||
<div class="alert alert-danger">
|
||||
No such file=uthq0o0sljnx
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-4 d-flex flex-column justify-content-between">
|
||||
<div class="mb-3">
|
||||
|
||||
</div>
|
||||
<p class="text-muted">© 2023 LuluStream. <br> All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<div class="nav flex-column mb-2">
|
||||
<a href="/tos" class="nav-link">Terms of service</a>
|
||||
<a href="/api.html" class="nav-link">API Documentation</a>
|
||||
<a href="/contact" class="nav-link">Contact Us</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<div class="nav flex-column mb-2">
|
||||
<a href="/premium" class="nav-link">Premium</a>
|
||||
<a href="/make_money" class="nav-link">Earn money</a>
|
||||
<a href="/check_files" class="nav-link">Link Checker</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-2 align-self-end text-end">
|
||||
<div class="mb-4">
|
||||
<a href="#" class="logo">
|
||||
<img src="/static/images/logo.svg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'98a528aa0a1c9754',t:'MTc1OTc1MzcwOQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
|
||||
4
src/extractor/__fixtures__/LuluStream/https:mediaflow.test.org-a2f2340c4a16e932bc5ea0c234dda69f
generated
Normal file
4
src/extractor/__fixtures__/LuluStream/https:mediaflow.test.org-a2f2340c4a16e932bc5ea0c234dda69f
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#EXTM3U
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1498884,RESOLUTION=1280x720,FRAME-RATE=24.000,CODECS="avc1.4d401f,mp4a.40.2"
|
||||
https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fstreamhihi.com%2Fe%2Fmk9m58lz8ts6&d=https%3A%2F%2Fh1gdnnp1dr11.tnmr.org%2Fhls2%2F02%2F02416%2Fqx1ysro2ny1o_h%2Findex-v1-a1.m3u8%3Ft%3DC1RS64a-9j6bSDO9TmHU9jIZpVb59jsWah7j-KgJkRg%26s%3D1759753708%26e%3D28800%26f%3D12081096%26i%3D0.3%26sp%3D0
|
||||
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=41327,RESOLUTION=1280x720,CODECS="avc1.4d401f",URI="https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fstreamhihi.com%2Fe%2Fmk9m58lz8ts6&d=https%3A%2F%2Fh1gdnnp1dr11.tnmr.org%2Fhls2%2F02%2F02416%2Fqx1ysro2ny1o_h%2Fiframes-v1-a1.m3u8%3Ft%3DC1RS64a-9j6bSDO9TmHU9jIZpVb59jsWah7j-KgJkRg%26s%3D1759753708%26e%3D28800%26f%3D12081096%26i%3D0.3%26sp%3D0"
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"destination_url":"https://h1gdnnp1dr11.tnmr.org/hls2/02/02416/qx1ysro2ny1o_h/master.m3u8?t=C1RS64a-9j6bSDO9TmHU9jIZpVb59jsWah7j-KgJkRg&s=1759753708&e=28800&f=12081096&i=0.3&sp=0","request_headers":{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","referer":"https://streamhihi.com/e/mk9m58lz8ts6"},"mediaflow_proxy_url":"https://mediaflow.test.org/proxy/hls/manifest.m3u8","query_params":{"api_password":"test"}}
|
||||
529
src/extractor/__fixtures__/LuluStream/https:streamhihi.comdmk9m58lz8ts6
generated
Normal file
529
src/extractor/__fixtures__/LuluStream/https:streamhihi.comdmk9m58lz8ts6
generated
Normal file
|
|
@ -0,0 +1,529 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>The.Thursday.Murder.Club.2025.1080p.NF.WEB-DL.DDP5.1.Atmos.H.264-playWEB - Lulustream.mp4</title>
|
||||
|
||||
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#FFF">
|
||||
<meta name="og:image" content="https://img.lulucdn.com/mk9m58lz8ts6_xt.jpg">
|
||||
<meta name="twitter:image" content="https://img.lulucdn.com/mk9m58lz8ts6_xt.jpg">
|
||||
<link rel="dns-prefetch" href="https://img.lulucdn.com" crossorigin>
|
||||
<link rel="apple-touch-icon" href="/static/images/favicon/apple-touch-icon.png" sizes="180x180">
|
||||
<link rel="icon" href="/static/images/favicon/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" href="/static/images/favicon/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="/static/images/favicon/manifest.json">
|
||||
<link rel="icon" href="/static/images/favicon/favicon.ico">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<link href="/static/css/style.css?10" rel="stylesheet">
|
||||
<script src="/static/js/jquery-3.2.1.min.js"></script>
|
||||
<script src="/static/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/static/js/app.js"></script>
|
||||
<script src="/static/js/xupload.js?10"></script>
|
||||
</head>
|
||||
<body class="">
|
||||
|
||||
<header class="header">
|
||||
<div class="container">
|
||||
<div class="row align-items-center flex-nowrap">
|
||||
<div class="col-auto flex-grow-1 flex-shrink-1">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-auto d-lg-none">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="14">
|
||||
<path fill-rule="evenodd" fill="currentcolor" d="M17 8H1a1 1 0 1 1 0-2h16a1 1 0 1 1 0 2Zm0-6H1a1 1 0 0 1 0-2h16a1 1 0 1 1 0 2ZM1 12h16a1 1 0 1 1 0 2H1a1 1 0 1 1 0-2Z" />
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<a href="/?op=upload" class="dropdown-item">Upload</a>
|
||||
<a href="/premium" class="dropdown-item">Premium</a>
|
||||
<a href="/make_money" class="dropdown-item">Earn Money</a>
|
||||
<a href="/api.html" class="dropdown-item">Service API</a>
|
||||
<a href="/tos" class="dropdown-item">Terms of Service</a>
|
||||
<a href="/faq" class="dropdown-item">About us</a>
|
||||
<a href="/contact" class="dropdown-item">Contacts</a>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<a href="/" class="logo">
|
||||
<img src="/static/images/logo.svg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto d-none d-lg-block">
|
||||
<nav class="nav">
|
||||
<a href="/make_money" class="nav-link">Earn Money</a>
|
||||
<a href="/premium" class="nav-link">Premium</a>
|
||||
<a href="/api.html" class="nav-link">Api Docs</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-auto d-none d-lg-block">
|
||||
<a href="/login.html" class="btn login-btn me-1">Login</a>
|
||||
<a href="/?op=registration" class="btn btn-gradient reg-btn">Register</a>
|
||||
</div>
|
||||
<div class="col-auto d-lg-none">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">
|
||||
<path fill-rule="evenodd" fill="currentcolor" d="M16.525 17.561c-.032.032-.062.063-.099.09A9.953 9.953 0 0 1 10 20a9.947 9.947 0 0 1-6.448-2.369c-.018-.014-.032-.029-.048-.043A9.976 9.976 0 0 1 0 10C0 4.486 4.486 0 10 0s10 4.486 10 10c0 3.02-1.351 5.726-3.475 7.561Zm-1.92-1.03A3.013 3.013 0 0 0 12.002 15H7.998a2.972 2.972 0 0 0-2.606 1.529 7.952 7.952 0 0 0 9.213.002ZM10 2c-4.411 0-8 3.589-8 8a7.96 7.96 0 0 0 1.889 5.151A4.962 4.962 0 0 1 7.998 13h4.005c1.657 0 3.184.84 4.103 2.157A7.962 7.962 0 0 0 18 10c0-4.411-3.589-8-8-8Zm0 10c-2.206 0-4-1.794-4-4s1.794-4 4-4 4 1.794 4 4-1.794 4-4 4Zm0-6c-1.103 0-2 .897-2 2s.897 2 2 2 2-.897 2-2-.897-2-2-2Z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<a class="dropdown-item" href="/login.html">Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/?op=registration">Register</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
<main>
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="videoplayer mb-5">
|
||||
|
||||
<script src="/js/jquery.cookie.js"></script>
|
||||
<script>
|
||||
$.cookie('file_id', '12081096', { expires: 10 });
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<div class="videoplayer-embed mb-4">
|
||||
<iframe src="https://luluvid.com/e/mk9m58lz8ts6" scrolling="no" frameborder="0" width="640" height="360" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe>
|
||||
</div>
|
||||
<div class="row align-items-center flex-lg-nowrap">
|
||||
<div class="col-12 col-lg-auto flex-grow-1 flex-shrink-1 mb-4">
|
||||
<div class="row align-items-center flex-nowrap">
|
||||
<!--<div class="col-auto pe-0">
|
||||
<div class="photo">
|
||||
<img src="" alt="">
|
||||
</div>
|
||||
</div>-->
|
||||
<div class="col-auto flex-grow-1 flex-shrink-1">
|
||||
<h1 class="h5">The Thursday Murder Club 2025 1080p NF WEB-DL DDP5 1 Atmos H 264-playWEB</h1>
|
||||
<div class="xsmall text-muted">
|
||||
<span class="me-2">on Aug 28, 2025</span>
|
||||
<span class="me-2">•</span>
|
||||
<span class="me-2">1.2 GB</span>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="col-auto pe-0">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="-12, 4">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="5" height="16">
|
||||
<path fill-rule="evenodd" fill="currentColor" d="M2.37 9.846C1.297 9.846.424 9.018.424 8c0-1.018.873-1.846 1.946-1.846 1.072 0 1.946.828 1.946 1.846 0 1.018-.874 1.846-1.946 1.846Zm0-6.154c-1.073 0-1.946-.828-1.946-1.846C.424.828 1.297 0 2.37 0c1.072 0 1.946.828 1.946 1.846 0 1.018-.874 1.846-1.946 1.846Zm0 8.615c1.072 0 1.946.829 1.946 1.847S3.442 16 2.37 16c-1.073 0-1.946-.828-1.946-1.846 0-1.018.873-1.847 1.946-1.847Z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
|
||||
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modal-flag">Flag video</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="col-auto mb-4 ms-auto">
|
||||
<div class="rating">
|
||||
<button class="btn rating-plus vote_up" onclick="return jah('/?op=vote&file_code=mk9m58lz8ts6&v=up')" title="Like">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="14" class="me-2">
|
||||
<path fill-rule="evenodd" d="m15.843 5.892-.815 6.409c-.121.957-.952 1.683-1.934 1.687H1.557A1.407 1.407 0 0 1 .14 12.595V6.72c0-.768.636-1.392 1.417-1.392h2.718L6.749.461a.874.874 0 0 1 .781-.474c1.679 0 3.046 1.343 3.046 2.995v.743h3.332c1.073 0 1.948.859 1.952 1.915 0 .086-.006.169-.017.252ZM3.942 7.045H1.887v5.226h2.055V7.045Zm9.965-1.602H9.702a.866.866 0 0 1-.873-.859V2.982a1.28 1.28 0 0 0-.807-1.183l-2.334 4.59v5.882h7.402a.21.21 0 0 0 .205-.182l.816-6.41c.002-.145-.091-.236-.204-.236Z"></path>
|
||||
</svg>
|
||||
<span id="likes_num"></span></button>
|
||||
<button class="btn rating-minus vote_down" onclick="return jah('/?op=vote&file_code=mk9m58lz8ts6&v=down')" title="Don't Like">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="14" class="me-2">
|
||||
<path fill-rule="evenodd" d="M13.908 10.275h-3.332v.743c0 1.652-1.366 2.995-3.046 2.995a.874.874 0 0 1-.781-.474L4.275 8.672H1.557C.776 8.672.14 8.047.14 7.28V1.405C.14.637.776.012 1.557.012H13.094c.982.004 1.813.73 1.934 1.687l.816 6.409c.01.083.016.166.016.252-.004 1.056-.879 1.915-1.952 1.915ZM1.887 6.955h2.055V1.729H1.887v5.226Zm11.408-5.044a.21.21 0 0 0-.205-.182H5.688v5.882l2.334 4.59a1.28 1.28 0 0 0 .807-1.183V9.416c0-.474.391-.859.873-.859h4.205c.113 0 .206-.091.204-.237l-.816-6.409Z"></path>
|
||||
</svg>
|
||||
<span id="dislikes_num"></span></button>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="download text-center mb-5">
|
||||
<div class="dropdown">
|
||||
|
||||
|
||||
<button type="button" class="btn btn-gradient submit-btn py-3" data-bs-toggle="modal" data-bs-target="#modal-download">
|
||||
<svg class="me-2" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path fill-rule="evenodd" fill="currentColor" d="M10 20C4.486 20 0 15.514 0 10S4.486 0 10 0s10 4.486 10 10-4.486 10-10 10Zm0-18c-4.411 0-8 3.589-8 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8Zm0 13h-.003a.988.988 0 0 1-.704-.293l-3-3a.999.999 0 1 1 1.414-1.414L9 11.586V6a1 1 0 0 1 2 0v5.586l1.293-1.293a.999.999 0 1 1 1.414 1.414l-3 3a.993.993 0 0 1-.704.293H10Z"/></svg>
|
||||
<small>Download</small>
|
||||
</button>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div align="center">
|
||||
<!--Banner ads-->
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="block">
|
||||
<div class="nav tabs mb-3">
|
||||
<a data-bs-toggle="tab" class="nav-link active" href="#tab_down_link">Download Link</a>
|
||||
<a data-bs-toggle="tab" class="nav-link" href="#tab_code_bb">Forum Code</a>
|
||||
<a data-bs-toggle="tab" class="nav-link" href="#tab_html_info">HTML Code</a>
|
||||
|
||||
<a data-bs-toggle="tab" class="nav-link" href="#tab_code_embed">Embed Code</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade show active" id="tab_down_link">
|
||||
<textarea class="form-control" rows="5">https://luluvid.com/mk9m58lz8ts6</textarea>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab_code_bb">
|
||||
<textarea class="form-control" rows="5">[URL=https://luluvid.com/mk9m58lz8ts6][IMG]https://img.lulucdn.com/mk9m58lz8ts6_t.jpg[/IMG]
|
||||
The Thursday Murder Club 2025 1080p NF WEB-DL DDP5 1 Atmos H 264-playWEB[/URL] [1280x720, 02:00:21]</textarea>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab_html_info">
|
||||
<textarea class="form-control" rows="5"><a href="https://luluvid.com/mk9m58lz8ts6"><img src="https://img.lulucdn.com/mk9m58lz8ts6_t.jpg" border=0><br>The Thursday Murder Club 2025 1080p NF WEB-DL DDP5 1 Atmos H 264-playWEB</a><br>[1280x720, 02:00:21]</textarea>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab_code_embed">
|
||||
<div class="mb-3">Embed size: <input class="form-control form-control-sm d-inline-block py-2" style="width: 80px;" type="text" id="iew" value="640" size=3><span class="p-2">x</span><input class="form-control form-control-sm d-inline-block py-2" style="width: 80px;" type="text" id="ieh" value="360"></div>
|
||||
<textarea id="iet" class="form-control" rows="5"><iframe src="https://luluvid.com/e/mk9m58lz8ts6" scrolling="no" frameborder="0" width="640" height="360" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modal-download" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header pb-0">
|
||||
<h5 class="modal-title">
|
||||
Download video
|
||||
</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<a class="btn btn-dark w-100 mb-2" href="https://lulustream.com/d/mk9m58lz8ts6_h">
|
||||
|
||||
<svg class="me-3" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><defs><linearGradient id="a" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#4949E7"/><stop offset="100%" stop-color="#51E3C0"/></linearGradient></defs><path fill="none" d="M10 20C4.486 20 0 15.514 0 10S4.486 0 10 0s10 4.486 10 10-4.486 10-10 10Zm0-18c-4.411 0-8 3.589-8 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8Zm0 13h-.003a.988.988 0 0 1-.704-.293l-3-3a.999.999 0 1 1 1.414-1.414L9 11.586V6a1 1 0 0 1 2 0v5.586l1.293-1.293a.999.999 0 1 1 1.414 1.414l-3 3a.993.993 0 0 1-.704.293H10Z"/><path fill="url(#a)" d="M10 20C4.486 20 0 15.514 0 10S4.486 0 10 0s10 4.486 10 10-4.486 10-10 10Zm0-18c-4.411 0-8 3.589-8 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8Zm0 13h-.003a.988.988 0 0 1-.704-.293l-3-3a.999.999 0 1 1 1.414-1.414L9 11.586V6a1 1 0 0 1 2 0v5.586l1.293-1.293a.999.999 0 1 1 1.414 1.414l-3 3a.993.993 0 0 1-.704.293H10Z"/></svg>
|
||||
|
||||
<b class="text-white flex-grow-1 text-start">
|
||||
HD quality
|
||||
</b>
|
||||
<span class="small text-muted">
|
||||
1280x720, 1.2 GB
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modal-flag" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header pb-0">
|
||||
<h5 class="modal-title">
|
||||
Flag
|
||||
</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form method="POST" action="/" onsubmit="$.post('/',$(this).serialize(),function(code){ eval(code); } );return false;">
|
||||
<input type="hidden" name="op" value="report_file">
|
||||
<input type="hidden" name="file_code" value="mk9m58lz8ts6">
|
||||
<div class="form-group mb-3">
|
||||
<label class="form-label">
|
||||
Reason
|
||||
</label>
|
||||
<select name="report_type" class="form-select">
|
||||
<option>
|
||||
Broken video
|
||||
</option>
|
||||
<option>
|
||||
Wrong title/description
|
||||
</option>
|
||||
<option>
|
||||
Copyright restriction
|
||||
</option>
|
||||
<option>
|
||||
Other
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<textarea name="report_info" class="form-control" rows="2" placeholder="Details"></textarea>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<button class="btn btn-gradient submit-btn" type="submit" name="add">Send Report<i class="icon icon-send icon-size-20 ms-2"></i></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script type='text/javascript'>
|
||||
jwplayer("vplayer").setup({
|
||||
sources: [{file:"https://h1gdnnp1dr11.tnmr.org/hls2/02/02416/qx1ysro2ny1o_h/master.m3u8?t=Wzh5ciexf_W1kZKtO8sCUH6eR_aLIWOsvgO1ifx2w2I&s=1759753708&e=28800&f=12081096&i=0.3&sp=0"}],
|
||||
image: "https://img.lulucdn.com/mk9m58lz8ts6_xt.jpg",
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
skin: {
|
||||
url:"/player/jw8/jw8-theme.css",
|
||||
name: "jw8-theme"
|
||||
},
|
||||
stretching: "uniform",
|
||||
duration: "7221.57",
|
||||
//aspectratio: "16:9",
|
||||
preload: 'none',
|
||||
//displayPlaybackLabel: true,
|
||||
//horizontalVolumeSlider: true,
|
||||
//allowFullscreen: false,
|
||||
//"autoPause": { "viewability": true, "pauseAds": true },
|
||||
//skin: {controlbar: {text:"#6F6", icons:"#6F6"}, timeslider:{progress:"#6F6"}, menus:{text:"#6F6"} },
|
||||
//pipIcon: 'disabled',
|
||||
androidhls: "true"
|
||||
,tracks: [{file: "/srt/empty.srt", label: "Upload captions", kind: "captions"}]
|
||||
,captions: {
|
||||
userFontScale: 1,
|
||||
color: '#FFFFFF',
|
||||
backgroundColor: '#303030',
|
||||
fontFamily:"Tahoma",
|
||||
backgroundOpacity: 30,
|
||||
fontOpacity: '100',
|
||||
},'qualityLabels':{"1436":"HD"},abouttext:"LuluStream", aboutlink:"https://lulustream.com",logo: {file:"https://lulustream.com/player/jw8/player-logo.svg", link:"https://lulustream.com", position:"control-bar", margin:"5"}
|
||||
});
|
||||
|
||||
var vvplay,vvad;
|
||||
var vastdone1=0,vastdone2=0;
|
||||
var player = jwplayer();
|
||||
var prevt=0, tott=0, v2done=0, lastt=0;
|
||||
$.ajaxSetup({ headers: { 'Content-Cache': 'no-cache' } });
|
||||
player.on('time', function(x) {
|
||||
if(5>0 && x.position>=5 && vvad!=1){vvad=1;$('div.video_ad_fadein').fadeIn('slow');}
|
||||
|
||||
|
||||
});
|
||||
player.on('seek', function(x) { prevt=x.position; });
|
||||
player.on('play', function(x) { doPlay(x); });
|
||||
player.on('complete', function() { $('div.video_ad').show(); });
|
||||
player.on('pause', function(x) { });
|
||||
//player.on('all', function(x) { console.log(x); });
|
||||
|
||||
function doPlay(x)
|
||||
{
|
||||
$('div.video_ad').hide();
|
||||
$('#over_player_msg').hide();
|
||||
if(vvplay)return;
|
||||
vvplay=1;
|
||||
adb=0;
|
||||
if( window.cRAds === undefined ){ adb=1; }
|
||||
$.get('/dl?op=view&file_code=mk9m58lz8ts6&hash=&embed=&referer=&adb='+adb, function(data) {$('#fviews').html(data);} );
|
||||
|
||||
}
|
||||
|
||||
function set_audio_track()
|
||||
{
|
||||
var tracks=player.getAudioTracks(track_name);
|
||||
console.log(tracks);
|
||||
if(tracks.length>1){
|
||||
for(i=0;i<tracks.length;i++){ if(tracks[i].name==track_name){ console.log('!!='+i); player.setCurrentAudioTrack(i); } }
|
||||
}
|
||||
}
|
||||
|
||||
player.on('ready', function(){
|
||||
player.on('captionsChanged',function(tr){
|
||||
if( RegExp('empty').test(tr.tracks[tr.track].id) )
|
||||
{
|
||||
jwplayer().pause(true);
|
||||
jwplayer().setCurrentCaptions(0);
|
||||
openIframeOverlay('/?op=upload_srt&file_code=mk9m58lz8ts6');
|
||||
}
|
||||
} );
|
||||
|
||||
function openIframeOverlay(url)
|
||||
{
|
||||
var $dd= $("<div />").css({
|
||||
position: "absolute",
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
left: 0,
|
||||
top: 0,
|
||||
zIndex: 1000000,
|
||||
background: "rgba(10%, 10%, 10%, 0.4)",
|
||||
"text-align": "center"
|
||||
});
|
||||
$("<iframe />").css({
|
||||
width: "60%",
|
||||
height: "60%",
|
||||
zIndex: 1000001,
|
||||
"margin-top": "50px"
|
||||
}).prop({'src':url, 'frameborder':'0', 'scrolling':'no'}).appendTo($dd);
|
||||
|
||||
$dd.click(function (){ $(this).remove(); jwplayer().play(); });
|
||||
$dd.appendTo( $('#vplayer') );
|
||||
}
|
||||
jwplayer().addButton(
|
||||
'<svg xmlns="http://www.w3.org/2000/svg" class="jw-svg-icon" viewBox="0 0 320 512"><path d="M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241V96c0-17.7 14.3-32 32-32s32 14.3 32 32V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V271l-11.5 9.6-192 160z"/></svg>',
|
||||
"Forward 10 sec",
|
||||
function() {
|
||||
jwplayer().seek( jwplayer().getPosition()+10 );
|
||||
},
|
||||
"ff11"
|
||||
);
|
||||
$("div[button=ff11]").detach().insertAfter('.jw-icon-rewind');
|
||||
|
||||
jwplayer().addButton(
|
||||
'<svg xmlns="http://www.w3.org/2000/svg" class="jw-svg-icon" viewBox="0 0 320 512"><path d="M267.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160L64 241V96c0-17.7-14.3-32-32-32S0 78.3 0 96V416c0 17.7 14.3 32 32 32s32-14.3 32-32V271l11.5 9.6 192 160z"/></svg>',
|
||||
"Rewind 10 sec",
|
||||
function() {
|
||||
var tt = jwplayer().getPosition()-10;
|
||||
if(tt<0)tt=0;
|
||||
jwplayer().seek( tt );
|
||||
},
|
||||
"ff00"
|
||||
);
|
||||
$("div[button=ff00]").detach().insertAfter('.jw-icon-rewind');
|
||||
$("div.jw-icon-rewind").hide();
|
||||
$('.jw-slider-time').append($('.jw-text-countdown'));
|
||||
|
||||
});
|
||||
|
||||
player.on("audioTracks",function(event){
|
||||
var tracks=player.getAudioTracks();
|
||||
if(tracks.length<2)return;
|
||||
$('.jw-settings-topbar-buttons').mousedown(function() {
|
||||
$('#jw-settings-submenu-audioTracks').removeClass('jw-settings-submenu-active');
|
||||
$('.jw-submenu-audioTracks').attr('aria-expanded','false');
|
||||
});
|
||||
player.addButton("/images/dualy.svg","Audio Track",function(){
|
||||
$('.jw-controls').toggleClass('jw-settings-open');
|
||||
$('.jw-settings-captions, .jw-settings-playbackRates').attr('aria-checked','false');
|
||||
if( $('.jw-controls').hasClass('jw-settings-open') ){
|
||||
$('.jw-submenu-audioTracks').attr('aria-checked','true');
|
||||
$('.jw-submenu-audioTracks').attr('aria-expanded','true');
|
||||
$('.jw-settings-submenu-quality').removeClass('jw-settings-submenu-active');
|
||||
$('.jw-settings-submenu-audioTracks').addClass('jw-settings-submenu-active');
|
||||
}
|
||||
else {
|
||||
$('.jw-submenu-audioTracks').attr('aria-checked','false');
|
||||
$('.jw-submenu-audioTracks').attr('aria-expanded','false');
|
||||
$('.jw-settings-submenu-audioTracks').removeClass('jw-settings-submenu-active');
|
||||
}
|
||||
},"dualSound");
|
||||
|
||||
if( !localStorage.getItem('default_audio') ) setTimeout("audio_set('English')", 300 );
|
||||
});
|
||||
var current_audio;
|
||||
function audio_set(audio_name)
|
||||
{
|
||||
var tracks=player.getAudioTracks();
|
||||
if(tracks.length>1){
|
||||
for(i=0;i<tracks.length;i++){ if(tracks[i].name==audio_name){ if(i==current_audio){return;} current_audio=i; player.setCurrentAudioTrack(i); } }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<Script>
|
||||
$("#embed_div textarea").focus(function (){ $(this).select(); })
|
||||
var tab_cookie='tab_down';
|
||||
|
||||
$('ul.tabs').on('click', 'li:not(.current)', function() {
|
||||
$(this).addClass('current').siblings().removeClass('current')
|
||||
.parents('div.section').find('div.box').eq($(this).index()).fadeIn(150).siblings('div.box').hide();
|
||||
});
|
||||
|
||||
$("#iew,#ieh").change(function (){
|
||||
var ww = $("#iew").val();
|
||||
var hh = $("#ieh").val();
|
||||
ww = ww.replace(/\D/g,'');
|
||||
hh = hh.replace(/\D/g,'');
|
||||
if(!ww)ww=640;
|
||||
if(!hh)hh=360;
|
||||
tt = $("#iet").val();
|
||||
tt = tt.replace(/ WIDTH=\d+ HEIGHT=\d+ /,' WIDTH='+ww+' HEIGHT='+hh+' ');
|
||||
$("#iet").val(tt);
|
||||
});
|
||||
|
||||
|
||||
</Script>
|
||||
<script src="https://lulustream.com/js/tabber.js"></script>
|
||||
|
||||
|
||||
<Script>
|
||||
$(function() {
|
||||
|
||||
});
|
||||
</Script>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-4 d-flex flex-column justify-content-between">
|
||||
<div class="mb-3">
|
||||
|
||||
</div>
|
||||
<p class="text-muted">© 2023 LuluStream. <br> All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<div class="nav flex-column mb-2">
|
||||
<a href="/tos" class="nav-link">Terms of service</a>
|
||||
<a href="/api.html" class="nav-link">API Documentation</a>
|
||||
<a href="/contact" class="nav-link">Contact Us</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<div class="nav flex-column mb-2">
|
||||
<a href="/premium" class="nav-link">Premium</a>
|
||||
<a href="/make_money" class="nav-link">Earn money</a>
|
||||
<a href="/check_files" class="nav-link">Link Checker</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-2 align-self-end text-end">
|
||||
<div class="mb-4">
|
||||
<a href="#" class="logo">
|
||||
<img src="/static/images/logo.svg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
71
src/extractor/__fixtures__/Voe/https:jilliandescribecompany.comec2yxvit4f6bz
generated
Normal file
71
src/extractor/__fixtures__/Voe/https:jilliandescribecompany.comec2yxvit4f6bz
generated
Normal file
File diff suppressed because one or more lines are too long
204
src/extractor/__fixtures__/Voe/https:jilliandescribecompany.comeea21l02gcygw
generated
Normal file
204
src/extractor/__fixtures__/Voe/https:jilliandescribecompany.comeea21l02gcygw
generated
Normal file
File diff suppressed because one or more lines are too long
1
src/extractor/__fixtures__/Voe/https:mediaflow.test.org-69b2d6ce0f425db5b27748c3e67b81eb
generated
Normal file
1
src/extractor/__fixtures__/Voe/https:mediaflow.test.org-69b2d6ce0f425db5b27748c3e67b81eb
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"destination_url":"https://cdn-kuc3ehpz4wnczfyz.orbitcache.com/engine/hls2-c/01/15242/ea21l02gcygw_,n,.urlset/master.m3u8?t=3iMAKoJqij6nC4HDamYxtDB75a_-AlG_wD1demRBo0I&s=1759754183&e=14400&f=76213694&node=FPYruvgfgORaUYuYfpByMgjFbC8X/HWKW1utbUQQRyQ=&i=104.28&sp=2500&asn=13335&q=n&rq=zKNpONzQJHzTeXTzr0V2M9V4DUnzwX9C8hTNxrUW","request_headers":{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","referer":"https://jilliandescribecompany.com/e/ea21l02gcygw"},"mediaflow_proxy_url":"https://mediaflow.test.org/proxy/hls/manifest.m3u8","query_params":{"api_password":"test"}}
|
||||
4
src/extractor/__fixtures__/Voe/https:mediaflow.test.org-f60f1c6427ad36dfca849557f64c724f
generated
Normal file
4
src/extractor/__fixtures__/Voe/https:mediaflow.test.org-f60f1c6427ad36dfca849557f64c724f
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#EXTM3U
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1186371,RESOLUTION=1368x720,FRAME-RATE=24.000,CODECS="avc1.640020,mp4a.40.2",VIDEO-RANGE=PQ
|
||||
https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fjilliandescribecompany.com%2Fe%2Fea21l02gcygw&d=https%3A%2F%2Fcdn-kuc3ehpz4wnczfyz.orbitcache.com%2Fengine%2Fhls2-c%2F01%2F15242%2Fea21l02gcygw_%2Cn%2C.urlset%2Findex-v1-a1.m3u8%3Ft%3D3iMAKoJqij6nC4HDamYxtDB75a_-AlG_wD1demRBo0I%26s%3D1759754183%26e%3D14400%26f%3D76213694%26node%3DFPYruvgfgORaUYuYfpByMgjFbC8X%2FHWKW1utbUQQRyQ%3D%26i%3D104.28%26sp%3D2500%26asn%3D13335%26q%3Dn%26rq%3DzKNpONzQJHzTeXTzr0V2M9V4DUnzwX9C8hTNxrUW
|
||||
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=25403,RESOLUTION=1368x720,CODECS="avc1.640020",URI="https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fjilliandescribecompany.com%2Fe%2Fea21l02gcygw&d=https%3A%2F%2Fcdn-kuc3ehpz4wnczfyz.orbitcache.com%2Fengine%2Fhls2-c%2F01%2F15242%2Fea21l02gcygw_%2Cn%2C.urlset%2Fiframes-v1-a1.m3u8%3Ft%3D3iMAKoJqij6nC4HDamYxtDB75a_-AlG_wD1demRBo0I%26s%3D1759754183%26e%3D14400%26f%3D76213694%26node%3DFPYruvgfgORaUYuYfpByMgjFbC8X%2FHWKW1utbUQQRyQ%3D%26i%3D104.28%26sp%3D2500%26asn%3D13335%26q%3Dn%26rq%3DzKNpONzQJHzTeXTzr0V2M9V4DUnzwX9C8hTNxrUW",VIDEO-RANGE=PQ
|
||||
23
src/extractor/__fixtures__/Voe/https:voe.sxec2yxvit4f6bz
generated
Normal file
23
src/extractor/__fixtures__/Voe/https:voe.sxec2yxvit4f6bz
generated
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Redirecting...</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
if (typeof localStorage !== 'undefined') {
|
||||
const permanentToken = localStorage.getItem('permanentToken');
|
||||
if (permanentToken) {
|
||||
const currentUrl = new URL(window.location.href);
|
||||
currentUrl.searchParams.set('permanentToken', permanentToken);
|
||||
window.location.href = currentUrl.toString();
|
||||
} else {
|
||||
window.location.href = 'https://jilliandescribecompany.com/e/c2yxvit4f6bz';
|
||||
}
|
||||
} else {
|
||||
window.location.href = 'https://jilliandescribecompany.com/e/c2yxvit4f6bz';
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
20
src/extractor/__snapshots__/FileMoon.test.ts.snap
Normal file
20
src/extractor/__snapshots__/FileMoon.test.ts.snap
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||
|
||||
exports[`FileMoon page not found 1`] = `[]`;
|
||||
|
||||
exports[`FileMoon z1ekv717 d 1`] = `
|
||||
[
|
||||
{
|
||||
"format": "hls",
|
||||
"label": "FileMoon (via MediaFlow Proxy)",
|
||||
"meta": {
|
||||
"countryCodes": [],
|
||||
"height": 720,
|
||||
"title": "alien earth s01e01 1080p web h264-successfulcrab",
|
||||
},
|
||||
"sourceId": "filemoon_",
|
||||
"ttl": 900000,
|
||||
"url": "https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fz1ekv717.fun%2Fd%2Fwkhcbggdxf1d&d=https%3A%2F%2Fbe7713.rcr82.waw05.i8yz83pn.com%2Fhls2%2F01%2F09665%2Fwkhcbggdxf1d_h%2Fmaster.m3u8%3Ft%3D359izbQ_L-sOHaIjj275YKdBDyiPzUi3ETfbNoN9bzU%26s%3D1759754698%26e%3D10800%26f%3D48329866%26srv%3D1075%26asn%3D13335%26sp%3D4000%26p%3D",
|
||||
},
|
||||
]
|
||||
`;
|
||||
21
src/extractor/__snapshots__/LuluStream.test.ts.snap
Normal file
21
src/extractor/__snapshots__/LuluStream.test.ts.snap
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||
|
||||
exports[`LuluStream no such file 1`] = `[]`;
|
||||
|
||||
exports[`LuluStream streamhihi d 1`] = `
|
||||
[
|
||||
{
|
||||
"format": "hls",
|
||||
"label": "LuluStream (via MediaFlow Proxy)",
|
||||
"meta": {
|
||||
"bytes": 1288490188,
|
||||
"countryCodes": [],
|
||||
"height": 720,
|
||||
"title": "The Thursday Murder Club 2025 1080p NF WEB-DL DDP5 1 Atmos H 264-playWEB",
|
||||
},
|
||||
"sourceId": "lulustream_",
|
||||
"ttl": 900000,
|
||||
"url": "https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fstreamhihi.com%2Fe%2Fmk9m58lz8ts6&d=https%3A%2F%2Fh1gdnnp1dr11.tnmr.org%2Fhls2%2F02%2F02416%2Fqx1ysro2ny1o_h%2Fmaster.m3u8%3Ft%3DC1RS64a-9j6bSDO9TmHU9jIZpVb59jsWah7j-KgJkRg%26s%3D1759753708%26e%3D28800%26f%3D12081096%26i%3D0.3%26sp%3D0",
|
||||
},
|
||||
]
|
||||
`;
|
||||
20
src/extractor/__snapshots__/Voe.test.ts.snap
Normal file
20
src/extractor/__snapshots__/Voe.test.ts.snap
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||
|
||||
exports[`Voe encoding error 1`] = `[]`;
|
||||
|
||||
exports[`Voe jilliandescribecompany 1`] = `
|
||||
[
|
||||
{
|
||||
"format": "hls",
|
||||
"label": "VOE (via MediaFlow Proxy)",
|
||||
"meta": {
|
||||
"countryCodes": [],
|
||||
"height": 720,
|
||||
"title": "Superman.2025.2160p.WEB-DL.DV.HDR10Plus.X265.DDP5.1.Atmos-YIN.mp4",
|
||||
},
|
||||
"sourceId": "voe_",
|
||||
"ttl": 900000,
|
||||
"url": "https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fjilliandescribecompany.com%2Fe%2Fea21l02gcygw&d=https%3A%2F%2Fcdn-kuc3ehpz4wnczfyz.orbitcache.com%2Fengine%2Fhls2-c%2F01%2F15242%2Fea21l02gcygw_%2Cn%2C.urlset%2Fmaster.m3u8%3Ft%3D3iMAKoJqij6nC4HDamYxtDB75a_-AlG_wD1demRBo0I%26s%3D1759754183%26e%3D14400%26f%3D76213694%26node%3DFPYruvgfgORaUYuYfpByMgjFbC8X%2FHWKW1utbUQQRyQ%3D%26i%3D104.28%26sp%3D2500%26asn%3D13335%26q%3Dn%26rq%3DzKNpONzQJHzTeXTzr0V2M9V4DUnzwX9C8hTNxrUW",
|
||||
},
|
||||
]
|
||||
`;
|
||||
|
|
@ -5,8 +5,10 @@ import { ExternalUrl } from './ExternalUrl';
|
|||
import { Extractor } from './Extractor';
|
||||
import { Fastream } from './Fastream';
|
||||
import { FileLions } from './FileLions';
|
||||
import { FileMoon } from './FileMoon';
|
||||
import { HubCloud } from './HubCloud';
|
||||
import { KinoGer } from './KinoGer';
|
||||
import { LuluStream } from './LuluStream';
|
||||
import { Mixdrop } from './Mixdrop';
|
||||
import { SaveFiles } from './SaveFiles';
|
||||
import { Soaper } from './Soaper';
|
||||
|
|
@ -16,6 +18,7 @@ import { SuperVideo } from './SuperVideo';
|
|||
import { Uqload } from './Uqload';
|
||||
import { VidSrc } from './VidSrc';
|
||||
import { VixSrc } from './VixSrc';
|
||||
import { Voe } from './Voe';
|
||||
import { YouTube } from './YouTube';
|
||||
|
||||
export * from './Extractor';
|
||||
|
|
@ -29,8 +32,10 @@ export const createExtractors = (fetcher: Fetcher): Extractor[] => {
|
|||
new Dropload(fetcher),
|
||||
new Fastream(fetcher),
|
||||
new FileLions(fetcher),
|
||||
new FileMoon(fetcher),
|
||||
new HubCloud(fetcher),
|
||||
new KinoGer(fetcher),
|
||||
new LuluStream(fetcher),
|
||||
new Mixdrop(fetcher),
|
||||
new SaveFiles(fetcher),
|
||||
new Soaper(fetcher),
|
||||
|
|
@ -52,6 +57,7 @@ export const createExtractors = (fetcher: Fetcher): Extractor[] => {
|
|||
'xyz',
|
||||
]),
|
||||
new VixSrc(fetcher),
|
||||
new Voe(fetcher),
|
||||
new YouTube(fetcher),
|
||||
new ExternalUrl(fetcher), // fallback extractor which must come last
|
||||
].filter(extractor => !disabledExtractors.includes(extractor.id));
|
||||
|
|
|
|||
Loading…
Reference in a new issue