From 012b1648e1da1d8bf22a45d1787b0ca760f5260c Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Tue, 30 Sep 2025 20:13:12 +0000 Subject: [PATCH] chore(extractor): make VixSrc work without MediaFlow proxy --- src/extractor/VixSrc.test.ts | 4 +-- src/extractor/VixSrc.ts | 34 ++++++++++++------- ...roxy.test-cb6d823acd1376f3e6f8fea1ce447e7e | 11 ------ ...roxy.test-da9e1c658d0c7c544a31018ec7cdcb02 | 17 ---------- ...rcent2Fvixsrc.topercent2Fmoviepercent2F600 | 1 - ...cent2Ftvpercent2F42009percent2F4percent2F2 | 1 - ...cent2Ftvpercent2F42009percent2F4percent2F2 | 1 - .../VixSrc/https:vixsrc.tomovie600 | 14 +++++--- ...2eece595e2d7c5ed6andexpires1764445261andh1 | 11 ++++++ ...66c5261902e02d3b4andexpires1764445261andh1 | 17 ++++++++++ .../VixSrc/https:vixsrc.totv4200942 | 14 +++++--- .../__snapshots__/VixSrc.test.ts.snap | 31 +++++++++++++---- src/utils/config.ts | 2 -- src/utils/media-flow-proxy.ts | 2 +- 14 files changed, 94 insertions(+), 66 deletions(-) delete mode 100644 src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.test-cb6d823acd1376f3e6f8fea1ce447e7e delete mode 100644 src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.test-da9e1c658d0c7c544a31018ec7cdcb02 delete mode 100644 src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Fmoviepercent2F600 delete mode 100644 src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Ftvpercent2F42009percent2F4percent2F2 delete mode 100644 src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy2.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Ftvpercent2F42009percent2F4percent2F2 create mode 100644 src/extractor/__fixtures__/VixSrc/https:vixsrc.toplaylist219736.m3u8token436a7a6bc6256b32eece595e2d7c5ed6andexpires1764445261andh1 create mode 100644 src/extractor/__fixtures__/VixSrc/https:vixsrc.toplaylist307316.m3u8token5e3c2b315b1eee966c5261902e02d3b4andexpires1764445261andh1 diff --git a/src/extractor/VixSrc.test.ts b/src/extractor/VixSrc.test.ts index 3f01d0e..d833bdd 100644 --- a/src/extractor/VixSrc.test.ts +++ b/src/extractor/VixSrc.test.ts @@ -7,7 +7,7 @@ import { VixSrc } from './VixSrc'; const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] }); const extractorRegistry = new ExtractorRegistry(logger, [new VixSrc(new FetcherMock(`${__dirname}/__fixtures__/VixSrc`))]); -const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow-proxy.test', mediaFlowProxyPassword: 'asdfg', de: 'on', en: 'on', it: 'on' }); +const ctx = createTestContext({ de: 'on', en: 'on', it: 'on' }); describe('VixSrc', () => { test('Full Metal Jacket', async () => { @@ -19,7 +19,7 @@ describe('VixSrc', () => { }); test('Black Mirror is excluded if no matching language was found', async () => { - const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow-proxy2.test', mediaFlowProxyPassword: 'asdfg', de: 'on' }); + const ctx = createTestContext({ de: 'on' }); expect(await extractorRegistry.handle(ctx, new URL('https://vixsrc.to/tv/42009/4/2'))).toMatchSnapshot(); }); diff --git a/src/extractor/VixSrc.ts b/src/extractor/VixSrc.ts index d192867..0a52578 100644 --- a/src/extractor/VixSrc.ts +++ b/src/extractor/VixSrc.ts @@ -1,30 +1,38 @@ import { Context, CountryCode, Format, Meta, UrlResult } from '../types'; import { - buildMediaFlowProxyExtractorStreamUrl, CustomRequestInit, guessHeightFromPlaylist, - hasMultiEnabled, + CustomRequestInit, + guessHeightFromPlaylist, iso639FromCountryCode, - supportsMediaFlowProxy, } from '../utils'; import { Extractor } from './Extractor'; export class VixSrc extends Extractor { public readonly id = 'vixsrc'; - public readonly label = 'VixSrc (via MediaFlow Proxy)'; + public readonly label = 'VixSrc'; - public override viaMediaFlowProxy = true; + public override readonly ttl: number = 21600000; // 6h - public supports(ctx: Context, url: URL): boolean { - return null !== url.host.match(/vixsrc/) && supportsMediaFlowProxy(ctx); + public supports(_ctx: Context, url: URL): boolean { + return null !== url.host.match(/vixsrc/); } protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise { - const playlistUrl = await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'VixCloud', url); - const countryCodes = await this.determineCountryCodesFromPlaylist(ctx, playlistUrl, { headers: { Referer: url.href }, queueLimit: 4 }); + const headers = { Referer: url.href }; - if (!hasMultiEnabled(ctx.config) && !countryCodes.some(countryCode => countryCode in ctx.config)) { - return []; - } + const html = await this.fetcher.text(ctx, url); + + const tokenMatch = html.match(/['"]token['"]: ?['"](.*?)['"]/) as string[]; + const expiresMatch = html.match(/['"]expires['"]: ?['"](.*?)['"]/) as string[]; + const urlMatch = html.match(/url: ?['"](.*?)['"]/) as string[]; + + const baseUrl = new URL(`${urlMatch[1]}`); + const playlistUrl = new URL(`${baseUrl.origin}${baseUrl.pathname}.m3u8?${baseUrl.searchParams}`); + playlistUrl.searchParams.append('token', tokenMatch[1] as string); + playlistUrl.searchParams.append('expires', expiresMatch[1] as string); + playlistUrl.searchParams.append('h', '1'); + + const countryCodes = await this.determineCountryCodesFromPlaylist(ctx, playlistUrl, { headers }); return [ { @@ -35,7 +43,7 @@ export class VixSrc extends Extractor { ttl: this.ttl, meta: { countryCodes, - height: await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { headers: { Referer: url.href }, queueLimit: 4 }), + height: await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { headers }), }, }, ]; diff --git a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.test-cb6d823acd1376f3e6f8fea1ce447e7e b/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.test-cb6d823acd1376f3e6f8fea1ce447e7e deleted file mode 100644 index 7de051a..0000000 --- a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.test-cb6d823acd1376f3e6f8fea1ce447e7e +++ /dev/null @@ -1,11 +0,0 @@ -#EXTM3U -#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Italian",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="ita",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Fmovie%2F600&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F219736%3Ftype%3Daudio%26rendition%3Dita%26token%3Dgi4-3epkYBCfogktY8L9Tw%26expires%3D1756061649%26edge%3Dsc-u13-01" -#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="eng",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Fmovie%2F600&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F219736%3Ftype%3Daudio%26rendition%3Deng%26token%3Dgi4-3epkYBCfogktY8L9Tw%26expires%3D1756061649%26edge%3Dsc-u13-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Italian",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="ita",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Fmovie%2F600&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F219736%3Ftype%3Dsubtitle%26rendition%3D3-ita%26token%3Dgi4-3epkYBCfogktY8L9Tw%26expires%3D1756061649%26edge%3Dsc-u13-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="eng",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Fmovie%2F600&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F219736%3Ftype%3Dsubtitle%26rendition%3D4-eng%26token%3Dgi4-3epkYBCfogktY8L9Tw%26expires%3D1756061649%26edge%3Dsc-u13-01" -#EXT-X-STREAM-INF:BANDWIDTH=1200000,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=854x480,AUDIO="audio",SUBTITLES="subs" -https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Fmovie%2F600&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F219736%3Ftype%3Dvideo%26rendition%3D480p%26token%3D7v6ck17PxObPaqCCgb3UfQ%26expires%3D1756061649%26edge%3Dsc-u13-01 -#EXT-X-STREAM-INF:BANDWIDTH=2150000,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1280x720,AUDIO="audio",SUBTITLES="subs" -https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Fmovie%2F600&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F219736%3Ftype%3Dvideo%26rendition%3D720p%26token%3Da9W71KeqCbV67VX1xceReQ%26expires%3D1756061649%26edge%3Dsc-u13-01 -#EXT-X-STREAM-INF:BANDWIDTH=4500000,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,AUDIO="audio",SUBTITLES="subs" -https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Fmovie%2F600&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F219736%3Ftype%3Dvideo%26rendition%3D1080p%26token%3DOOVfUQ_3veZMjPBb3FPkxg%26expires%3D1756061649%26edge%3Dsc-u13-01 diff --git a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.test-da9e1c658d0c7c544a31018ec7cdcb02 b/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.test-da9e1c658d0c7c544a31018ec7cdcb02 deleted file mode 100644 index 96d6d7a..0000000 --- a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.test-da9e1c658d0c7c544a31018ec7cdcb02 +++ /dev/null @@ -1,17 +0,0 @@ -#EXTM3U -#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Italian",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="ita",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Daudio%26rendition%3Dita%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="eng",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Daudio%26rendition%3Deng%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English [CC]",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="eng",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dsubtitle%26rendition%3D3-eng%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="German",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="ger",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dsubtitle%26rendition%3D4-ger%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French [CC]",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="fre",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dsubtitle%26rendition%3D5-fre%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="fre",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dsubtitle%26rendition%3D6-fre%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Italian [Forced]",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="forced-ita",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dsubtitle%26rendition%3D7-forced-ita%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Italian",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="ita",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dsubtitle%26rendition%3D8-ita%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Japanese",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="jpn",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dsubtitle%26rendition%3D9-jpn%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Ukrainian",DEFAULT=NO,AUTOSELECT=NO,FORCED=NO,LANGUAGE="ukr",URI="https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dsubtitle%26rendition%3D10-ukr%26token%3D9Xuf0k_DgmDiASPFeByoWg%26expires%3D1756061649%26edge%3Dsc-u2-01" -#EXT-X-STREAM-INF:BANDWIDTH=1200000,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=854x480,AUDIO="audio",SUBTITLES="subs" -https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dvideo%26rendition%3D480p%26token%3DgsQVLhHScXTJAxmwkTD2tQ%26expires%3D1756061649%26edge%3Dsc-u2-01 -#EXT-X-STREAM-INF:BANDWIDTH=2150000,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1280x720,AUDIO="audio",SUBTITLES="subs" -https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dvideo%26rendition%3D720p%26token%3Dxqxvb6W5pFM0RE_zkKgMAA%26expires%3D1756061649%26edge%3Dsc-u2-01 -#EXT-X-STREAM-INF:BANDWIDTH=4500000,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,AUDIO="audio",SUBTITLES="subs" -https://mediaflow-proxy.test/proxy/hls/manifest.m3u8?api_password=asdfg&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%2Fvixsrc.to%2Ftv%2F42009%2F4%2F2&d=https%3A%2F%2Fvixsrc.to%2Fplaylist%2F307316%3Ftype%3Dvideo%26rendition%3D1080p%26token%3Dg7Q1oAxS7C07i_q_8_chaA%26expires%3D1756061649%26edge%3Dsc-u2-01 diff --git a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Fmoviepercent2F600 b/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Fmoviepercent2F600 deleted file mode 100644 index 37f2578..0000000 --- a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Fmoviepercent2F600 +++ /dev/null @@ -1 +0,0 @@ -{"destination_url":"https://vixsrc.to/playlist/219736?token=689cf5587c2fec67fd83503a2a7dfd64&expires=1755949827&h=1","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://vixsrc.to/movie/600"},"mediaflow_proxy_url":"https://mediaflow-proxy.test/proxy/hls/manifest.m3u8","query_params":{"api_password":"asdfg"}} diff --git a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Ftvpercent2F42009percent2F4percent2F2 b/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Ftvpercent2F42009percent2F4percent2F2 deleted file mode 100644 index 7fe5c64..0000000 --- a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Ftvpercent2F42009percent2F4percent2F2 +++ /dev/null @@ -1 +0,0 @@ -{"destination_url":"https://vixsrc.to/playlist/307316?token=2f5004a3b15f4ccdb3446f2b132a0957&expires=1755949828&h=1","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://vixsrc.to/tv/42009/4/2"},"mediaflow_proxy_url":"https://mediaflow-proxy.test/proxy/hls/manifest.m3u8","query_params":{"api_password":"asdfg"}} diff --git a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy2.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Ftvpercent2F42009percent2F4percent2F2 b/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy2.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Ftvpercent2F42009percent2F4percent2F2 deleted file mode 100644 index 7fe5c64..0000000 --- a/src/extractor/__fixtures__/VixSrc/https:mediaflow-proxy2.testextractorvideohostVixCloudandapi_passwordasdfganddhttpspercent3Apercent2Fpercent2Fvixsrc.topercent2Ftvpercent2F42009percent2F4percent2F2 +++ /dev/null @@ -1 +0,0 @@ -{"destination_url":"https://vixsrc.to/playlist/307316?token=2f5004a3b15f4ccdb3446f2b132a0957&expires=1755949828&h=1","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://vixsrc.to/tv/42009/4/2"},"mediaflow_proxy_url":"https://mediaflow-proxy.test/proxy/hls/manifest.m3u8","query_params":{"api_password":"asdfg"}} diff --git a/src/extractor/__fixtures__/VixSrc/https:vixsrc.tomovie600 b/src/extractor/__fixtures__/VixSrc/https:vixsrc.tomovie600 index 1336582..a867dbc 100644 --- a/src/extractor/__fixtures__/VixSrc/https:vixsrc.tomovie600 +++ b/src/extractor/__fixtures__/VixSrc/https:vixsrc.tomovie600 @@ -10,7 +10,7 @@ - + @@ -29,24 +29,28 @@ - + - + @@ -29,24 +29,28 @@ - +