This commit is contained in:
parent
a8f025e1b5
commit
c11708281e
1 changed files with 16 additions and 13 deletions
29
src/index.ts
29
src/index.ts
|
|
@ -1,5 +1,5 @@
|
|||
import { log } from './logger';
|
||||
import { normalizeReferer } from './utils/uri';
|
||||
import { normalizeReferer, resolveUri } from './utils/uri';
|
||||
import { interceptXHR } from './detection/xhr-intercept';
|
||||
import { interceptFetch } from './detection/fetch-intercept';
|
||||
import { monitorDOM } from './detection/dom-monitor';
|
||||
|
|
@ -252,13 +252,16 @@ async function downloadVttStream(url: string, entry: { url: string; type: 'vtt';
|
|||
}
|
||||
|
||||
function onStreamDetected(url: string, headers?: Record<string, string>): void {
|
||||
if (detectedStreams.has(url)) return;
|
||||
const base = headers?.Referer || location.href;
|
||||
const resolvedUrl = resolveUri(base, url);
|
||||
|
||||
const type = isVttUrl(url) ? 'vtt' : 'm3u8';
|
||||
log.info(`onStreamDetected: ${url} type=${type} headers=${JSON.stringify(headers)}`);
|
||||
detectedStreams.set(url, { url, type, headers });
|
||||
if (detectedStreams.has(resolvedUrl)) return;
|
||||
|
||||
notifyTopFrame(url, headers);
|
||||
const type = isVttUrl(resolvedUrl) ? 'vtt' : 'm3u8';
|
||||
log.info(`onStreamDetected: ${resolvedUrl} type=${type} headers=${JSON.stringify(headers)}`);
|
||||
detectedStreams.set(resolvedUrl, { url: resolvedUrl, type, headers });
|
||||
|
||||
notifyTopFrame(resolvedUrl, headers);
|
||||
|
||||
if (isTopFrame() && !panel && type === 'm3u8') {
|
||||
panel = createPanel();
|
||||
|
|
@ -275,20 +278,20 @@ function onStreamDetected(url: string, headers?: Record<string, string>): void {
|
|||
}
|
||||
|
||||
if (isTopFrame() && panel) {
|
||||
addStreamToUI(url);
|
||||
addStreamToUI(resolvedUrl);
|
||||
}
|
||||
|
||||
if (isTopFrame() && type === 'm3u8' && !detectedStreams.get(url)?.parsed) {
|
||||
parseM3U8(url, headers?.Referer, headers?.Origin, false).then(parsed => {
|
||||
detectedStreams.get(url)!.parsed = parsed;
|
||||
if (isTopFrame() && type === 'm3u8' && !detectedStreams.get(resolvedUrl)?.parsed) {
|
||||
parseM3U8(resolvedUrl, headers?.Referer, headers?.Origin, false).then(parsed => {
|
||||
detectedStreams.get(resolvedUrl)!.parsed = parsed;
|
||||
if (panel) {
|
||||
addStreamToUI(url, parsed);
|
||||
addStreamToUI(resolvedUrl, parsed);
|
||||
}
|
||||
}).catch(e => {
|
||||
log.error(`onStreamDetected: pre-parse failed for ${url}: ${e}`);
|
||||
log.error(`onStreamDetected: pre-parse failed for ${resolvedUrl}: ${e}`);
|
||||
});
|
||||
} else if (!isTopFrame() && type === 'm3u8') {
|
||||
log.info(`onStreamDetected: iframe detected ${url}, skipping parse (top frame will handle)`);
|
||||
log.info(`onStreamDetected: iframe detected ${resolvedUrl}, skipping parse (top frame will handle)`);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue