prismcast 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts +1 -1
- package/dist/app.js +27 -9
- package/dist/app.js.map +1 -1
- package/dist/browser/cdp.js +7 -7
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/channelSelection.d.ts +41 -11
- package/dist/browser/channelSelection.js +75 -24
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/display.d.ts +1 -1
- package/dist/browser/index.d.ts +8 -8
- package/dist/browser/index.js +42 -43
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/login.d.ts +2 -2
- package/dist/browser/login.js +1 -1
- package/dist/browser/manifestInterceptor.d.ts +77 -0
- package/dist/browser/manifestInterceptor.js +323 -0
- package/dist/browser/manifestInterceptor.js.map +1 -0
- package/dist/browser/precaching.js +4 -4
- package/dist/browser/tuning/comcastPolymer.d.ts +1 -1
- package/dist/browser/tuning/cox.d.ts +1 -1
- package/dist/browser/tuning/directv.d.ts +1 -1
- package/dist/browser/tuning/directv.js +61 -62
- package/dist/browser/tuning/directv.js.map +1 -1
- package/dist/browser/tuning/fox.d.ts +1 -1
- package/dist/browser/tuning/fox.js +171 -14
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/hbo.d.ts +1 -1
- package/dist/browser/tuning/hbo.js +6 -6
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.d.ts +1 -1
- package/dist/browser/tuning/hulu.js +117 -110
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/shared.d.ts +3 -3
- package/dist/browser/tuning/shared.js +5 -5
- package/dist/browser/tuning/sling.d.ts +1 -1
- package/dist/browser/tuning/sling.js +28 -28
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/spectrum.d.ts +1 -1
- package/dist/browser/tuning/spectrum.js +21 -22
- package/dist/browser/tuning/spectrum.js.map +1 -1
- package/dist/browser/tuning/thumbnailRow.d.ts +1 -1
- package/dist/browser/tuning/thumbnailRow.js +1 -1
- package/dist/browser/tuning/tileClick.d.ts +1 -1
- package/dist/browser/tuning/tileClick.js +5 -5
- package/dist/browser/tuning/xfinity.d.ts +1 -1
- package/dist/browser/tuning/youtubeTv.d.ts +1 -1
- package/dist/browser/tuning/youtubeTv.js +17 -18
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +20 -6
- package/dist/browser/video.js +30 -38
- package/dist/browser/video.js.map +1 -1
- package/dist/channels/index.d.ts +1 -2
- package/dist/channels/index.js +73 -40
- package/dist/channels/index.js.map +1 -1
- package/dist/config/channelForm.d.ts +58 -0
- package/dist/config/channelForm.js +129 -0
- package/dist/config/channelForm.js.map +1 -0
- package/dist/config/consistencyProbe.d.ts +7 -0
- package/dist/config/consistencyProbe.js +143 -0
- package/dist/config/consistencyProbe.js.map +1 -0
- package/dist/config/health.d.ts +4 -3
- package/dist/config/health.js +75 -62
- package/dist/config/health.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +19 -12
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts +9 -3
- package/dist/config/paths.js +12 -4
- package/dist/config/paths.js.map +1 -1
- package/dist/config/persistence.context.d.ts +8 -0
- package/dist/config/persistence.context.js +30 -0
- package/dist/config/persistence.context.js.map +1 -0
- package/dist/config/persistence.d.ts +110 -12
- package/dist/config/persistence.js +351 -32
- package/dist/config/persistence.js.map +1 -1
- package/dist/config/presets.d.ts +14 -4
- package/dist/config/presets.js +84 -75
- package/dist/config/presets.js.map +1 -1
- package/dist/config/profiles.d.ts +2 -2
- package/dist/config/profiles.js +7 -9
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/servicePacks.d.ts +2 -2
- package/dist/config/servicePacks.js +28 -28
- package/dist/config/servicePacks.js.map +1 -1
- package/dist/config/services.d.ts +62 -36
- package/dist/config/services.js +150 -136
- package/dist/config/services.js.map +1 -1
- package/dist/config/sites.d.ts +3 -3
- package/dist/config/sites.js +16 -16
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +500 -41
- package/dist/config/userChannels.js +1201 -312
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +103 -10
- package/dist/config/userConfig.js +277 -117
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +4 -2
- package/dist/config/userProfiles.js +72 -26
- package/dist/config/userProfiles.js.map +1 -1
- package/dist/hdhr/channelMap.js +8 -11
- package/dist/hdhr/channelMap.js.map +1 -1
- package/dist/hdhr/deviceId.js +10 -9
- package/dist/hdhr/deviceId.js.map +1 -1
- package/dist/hdhr/discover.js +4 -5
- package/dist/hdhr/discover.js.map +1 -1
- package/dist/hdhr/index.js +6 -10
- package/dist/hdhr/index.js.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/native/codecInference.d.ts +44 -0
- package/dist/native/codecInference.js +327 -0
- package/dist/native/codecInference.js.map +1 -0
- package/dist/native/decrypt.d.ts +1 -1
- package/dist/native/index.d.ts +5 -5
- package/dist/native/index.js +42 -64
- package/dist/native/index.js.map +1 -1
- package/dist/native/probe.d.ts +27 -9
- package/dist/native/probe.js +158 -67
- package/dist/native/probe.js.map +1 -1
- package/dist/native/proxy.d.ts +4 -2
- package/dist/native/proxy.js +52 -49
- package/dist/native/proxy.js.map +1 -1
- package/dist/native/tokenExpiry.d.ts +22 -0
- package/dist/native/tokenExpiry.js +153 -0
- package/dist/native/tokenExpiry.js.map +1 -0
- package/dist/routes/auth.js +6 -10
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/components.js +2 -2
- package/dist/routes/components.js.map +1 -1
- package/dist/routes/config/channels/endpoints/browse.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/browse.js +195 -0
- package/dist/routes/config/channels/endpoints/browse.js.map +1 -0
- package/dist/routes/config/channels/endpoints/bulk.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/bulk.js +128 -0
- package/dist/routes/config/channels/endpoints/bulk.js.map +1 -0
- package/dist/routes/config/channels/endpoints/crud.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/crud.js +504 -0
- package/dist/routes/config/channels/endpoints/crud.js.map +1 -0
- package/dist/routes/config/channels/endpoints/importExport.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/importExport.js +131 -0
- package/dist/routes/config/channels/endpoints/importExport.js.map +1 -0
- package/dist/routes/config/channels/endpoints/predefined.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/predefined.js +78 -0
- package/dist/routes/config/channels/endpoints/predefined.js.map +1 -0
- package/dist/routes/config/channels/endpoints/prefs.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/prefs.js +58 -0
- package/dist/routes/config/channels/endpoints/prefs.js.map +1 -0
- package/dist/routes/config/channels/endpoints/service.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/service.js +149 -0
- package/dist/routes/config/channels/endpoints/service.js.map +1 -0
- package/dist/routes/config/channels/endpoints/tags.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/tags.js +185 -0
- package/dist/routes/config/channels/endpoints/tags.js.map +1 -0
- package/dist/routes/config/channels/http/handler.d.ts +10 -0
- package/dist/routes/config/channels/http/handler.js +20 -0
- package/dist/routes/config/channels/http/handler.js.map +1 -0
- package/dist/routes/config/channels/http/playlistHint.d.ts +25 -0
- package/dist/routes/config/channels/http/playlistHint.js +40 -0
- package/dist/routes/config/channels/http/playlistHint.js.map +1 -0
- package/dist/routes/config/channels/http/serviceWarning.d.ts +10 -0
- package/dist/routes/config/channels/http/serviceWarning.js +28 -0
- package/dist/routes/config/channels/http/serviceWarning.js.map +1 -0
- package/dist/routes/config/channels/index.d.ts +3 -3
- package/dist/routes/config/channels/index.js +1 -1
- package/dist/routes/config/channels/index.js.map +1 -1
- package/dist/routes/config/channels/{routes.d.ts → setup.d.ts} +1 -1
- package/dist/routes/config/channels/setup.js +23 -0
- package/dist/routes/config/channels/setup.js.map +1 -0
- package/dist/routes/config/channels/table.d.ts +9 -9
- package/dist/routes/config/channels/table.js +124 -76
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/http/envelope.d.ts +111 -0
- package/dist/routes/config/http/envelope.js +103 -0
- package/dist/routes/config/http/envelope.js.map +1 -0
- package/dist/routes/config/index.d.ts +9 -9
- package/dist/routes/config/index.js +2 -2
- package/dist/routes/config/index.js.map +1 -1
- package/dist/routes/config/services.js +69 -68
- package/dist/routes/config/services.js.map +1 -1
- package/dist/routes/config/settings.d.ts +1 -1
- package/dist/routes/config/settings.js +45 -38
- package/dist/routes/config/settings.js.map +1 -1
- package/dist/routes/debug.js +12 -11
- package/dist/routes/debug.js.map +1 -1
- package/dist/routes/icons.js +2 -2
- package/dist/routes/icons.js.map +1 -1
- package/dist/routes/logs.js +19 -30
- package/dist/routes/logs.js.map +1 -1
- package/dist/routes/mpegts.js +1 -1
- package/dist/routes/playlist.d.ts +1 -1
- package/dist/routes/playlist.js +37 -26
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/root/content.js +27 -6
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/index.js +2 -5
- package/dist/routes/root/index.js.map +1 -1
- package/dist/routes/root/scripts/channels.js +16 -16
- package/dist/routes/root/scripts/channels.js.map +1 -1
- package/dist/routes/root/scripts/config.js +59 -59
- package/dist/routes/root/scripts/config.js.map +1 -1
- package/dist/routes/root/scripts/index.d.ts +4 -4
- package/dist/routes/root/scripts/shared.js +24 -10
- package/dist/routes/root/scripts/shared.js.map +1 -1
- package/dist/routes/root/scripts/status.d.ts +4 -0
- package/dist/routes/root/scripts/status.handlers.d.ts +182 -0
- package/dist/routes/root/scripts/status.handlers.js +713 -0
- package/dist/routes/root/scripts/status.handlers.js.map +1 -0
- package/dist/routes/root/scripts/status.js +86 -488
- package/dist/routes/root/scripts/status.js.map +1 -1
- package/dist/routes/root/styles.js +5 -5
- package/dist/routes/services.js +18 -15
- package/dist/routes/services.js.map +1 -1
- package/dist/routes/sse.d.ts +16 -0
- package/dist/routes/sse.js +29 -0
- package/dist/routes/sse.js.map +1 -0
- package/dist/routes/streams.js +10 -23
- package/dist/routes/streams.js.map +1 -1
- package/dist/routes/ui.d.ts +2 -2
- package/dist/routes/upgrade.js +6 -7
- package/dist/routes/upgrade.js.map +1 -1
- package/dist/service/commands.context.d.ts +6 -0
- package/dist/service/commands.context.js +47 -0
- package/dist/service/commands.context.js.map +1 -0
- package/dist/service/commands.d.ts +53 -8
- package/dist/service/commands.js +171 -188
- package/dist/service/commands.js.map +1 -1
- package/dist/service/generators.context.d.ts +6 -0
- package/dist/service/generators.context.js +45 -0
- package/dist/service/generators.context.js.map +1 -0
- package/dist/service/generators.d.ts +56 -16
- package/dist/service/generators.js +499 -383
- package/dist/service/generators.js.map +1 -1
- package/dist/service/index.d.ts +2 -2
- package/dist/streaming/clients.d.ts +2 -2
- package/dist/streaming/clients.js +2 -2
- package/dist/streaming/codec.d.ts +2 -2
- package/dist/streaming/codec.js +0 -1
- package/dist/streaming/codec.js.map +1 -1
- package/dist/streaming/fmp4Segmenter.d.ts +2 -2
- package/dist/streaming/fmp4Segmenter.js +12 -12
- package/dist/streaming/hls.d.ts +3 -3
- package/dist/streaming/hls.js +81 -70
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.d.ts +3 -3
- package/dist/streaming/hlsResume.js +5 -5
- package/dist/streaming/hlsSegments.d.ts +5 -2
- package/dist/streaming/hlsSegments.js +14 -9
- package/dist/streaming/hlsSegments.js.map +1 -1
- package/dist/streaming/monitor.d.ts +12 -12
- package/dist/streaming/monitor.js +80 -54
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/mp4Parser.d.ts +34 -4
- package/dist/streaming/mp4Parser.js +111 -29
- package/dist/streaming/mp4Parser.js.map +1 -1
- package/dist/streaming/mpegts.d.ts +1 -1
- package/dist/streaming/mpegts.js +13 -10
- package/dist/streaming/mpegts.js.map +1 -1
- package/dist/streaming/playlistBuilder.d.ts +1 -1
- package/dist/streaming/playlistBuilder.js +2 -2
- package/dist/streaming/preroll.d.ts +9 -9
- package/dist/streaming/preroll.js +39 -41
- package/dist/streaming/preroll.js.map +1 -1
- package/dist/streaming/pretune.js +4 -4
- package/dist/streaming/pretune.js.map +1 -1
- package/dist/streaming/recovery.d.ts +3 -3
- package/dist/streaming/recovery.js +4 -4
- package/dist/streaming/registry.d.ts +6 -6
- package/dist/streaming/setup.d.ts +9 -8
- package/dist/streaming/setup.js +97 -49
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/showInfo.d.ts +9 -3
- package/dist/streaming/showInfo.js +26 -18
- package/dist/streaming/showInfo.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +4 -4
- package/dist/streaming/statusEmitter.js +2 -2
- package/dist/types/channels.d.ts +133 -34
- package/dist/types/channels.js +39 -1
- package/dist/types/channels.js.map +1 -1
- package/dist/types/config.d.ts +20 -1
- package/dist/types/index.d.ts +9 -8
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +5 -4
- package/dist/types/selection.d.ts +48 -4
- package/dist/types/streaming.d.ts +1 -1
- package/dist/upgrade/commands.context.d.ts +6 -0
- package/dist/upgrade/commands.context.js +29 -0
- package/dist/upgrade/commands.context.js.map +1 -0
- package/dist/upgrade/commands.d.ts +29 -2
- package/dist/upgrade/commands.js +87 -134
- package/dist/upgrade/commands.js.map +1 -1
- package/dist/upgrade/detection.context.d.ts +6 -0
- package/dist/upgrade/detection.context.js +24 -0
- package/dist/upgrade/detection.context.js.map +1 -0
- package/dist/upgrade/detection.d.ts +140 -10
- package/dist/upgrade/detection.js +153 -66
- package/dist/upgrade/detection.js.map +1 -1
- package/dist/upgrade/index.d.ts +2 -2
- package/dist/utils/chromeFetch.d.ts +1 -1
- package/dist/utils/chromeFetch.js +1 -1
- package/dist/utils/clock.d.ts +14 -0
- package/dist/utils/clock.js +28 -0
- package/dist/utils/clock.js.map +1 -0
- package/dist/utils/debugFilter.d.ts +1 -1
- package/dist/utils/debugFilter.js +6 -4
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/delay.d.ts +2 -3
- package/dist/utils/delay.js +10 -16
- package/dist/utils/delay.js.map +1 -1
- package/dist/utils/evaluate.js +12 -14
- package/dist/utils/evaluate.js.map +1 -1
- package/dist/utils/ffmpeg.context.d.ts +6 -0
- package/dist/utils/ffmpeg.context.js +31 -0
- package/dist/utils/ffmpeg.context.js.map +1 -0
- package/dist/utils/ffmpeg.d.ts +85 -29
- package/dist/utils/ffmpeg.js +126 -129
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/fileLogger.d.ts +18 -2
- package/dist/utils/fileLogger.js +58 -30
- package/dist/utils/fileLogger.js.map +1 -1
- package/dist/utils/format.d.ts +1 -1
- package/dist/utils/format.js +2 -2
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/html.js +1 -3
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/index.d.ts +21 -20
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js +16 -20
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/m3u.d.ts +18 -3
- package/dist/utils/m3u.js +28 -14
- package/dist/utils/m3u.js.map +1 -1
- package/dist/utils/memo.d.ts +19 -0
- package/dist/utils/memo.js +53 -0
- package/dist/utils/memo.js.map +1 -0
- package/dist/utils/morganStream.js +2 -2
- package/dist/utils/morganStream.js.map +1 -1
- package/dist/utils/pid.d.ts +2 -2
- package/dist/utils/pid.js +2 -2
- package/dist/utils/platform.d.ts +1 -1
- package/dist/utils/platform.js +3 -3
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/retry.d.ts +2 -0
- package/dist/utils/retry.js +9 -7
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/sanitize.d.ts +2 -2
- package/dist/utils/sanitize.js +4 -4
- package/dist/utils/timing.d.ts +6 -3
- package/dist/utils/timing.js +10 -6
- package/dist/utils/timing.js.map +1 -1
- package/dist/utils/version.d.ts +3 -2
- package/dist/utils/version.js +14 -27
- package/dist/utils/version.js.map +1 -1
- package/package.json +13 -7
- package/dist/native/intercept.d.ts +0 -35
- package/dist/native/intercept.js +0 -181
- package/dist/native/intercept.js.map +0 -1
- package/dist/routes/config/channels/routes.js +0 -1505
- package/dist/routes/config/channels/routes.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Nullable } from "../types/index.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Options for inferring codec metadata from a media playlist.
|
|
4
|
+
*/
|
|
5
|
+
export interface InferMediaCodecOptions {
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
playlistBody: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Inferred codec metadata from a media playlist's first segment.
|
|
11
|
+
*/
|
|
12
|
+
export interface InferredCodec {
|
|
13
|
+
codec: Nullable<string>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Locates the first segment URL in a media playlist body. Walks the playlist line by line and returns the first non-tag, non-empty line that follows an
|
|
17
|
+
* #EXTINF tag - this is the segment's URI. The URI is resolved against the playlist's base URL so callers always get an absolute URL.
|
|
18
|
+
*
|
|
19
|
+
* Exported for unit testing - the I/O orchestrator below uses it through the public inferMediaCodec() entry point.
|
|
20
|
+
*
|
|
21
|
+
* @param playlistBody - The raw media playlist body.
|
|
22
|
+
* @param baseUrl - The base URL for resolving a relative segment URI.
|
|
23
|
+
* @returns The absolute URL of the first segment, or null when the playlist contains no segments.
|
|
24
|
+
*/
|
|
25
|
+
export declare function findFirstSegmentUrl(playlistBody: string, baseUrl: string): Nullable<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Parses a TS-formatted byte buffer and returns the recognized video codec label, or null when no recognized video stream is present. The buffer is expected to
|
|
28
|
+
* contain the start of a TS segment - the first PAT and PMT packets must be reachable within it. Pure synchronous function with no I/O.
|
|
29
|
+
*
|
|
30
|
+
* Exported for unit testing - the I/O orchestrator below uses it through the public inferMediaCodec() entry point.
|
|
31
|
+
*
|
|
32
|
+
* @param buffer - A buffer containing the start of a TS segment.
|
|
33
|
+
* @returns The codec label (e.g., "H264", "HEVC"), or null when no recognized video stream is found.
|
|
34
|
+
*/
|
|
35
|
+
export declare function inferCodecFromTsBuffer(buffer: Buffer): Nullable<string>;
|
|
36
|
+
/**
|
|
37
|
+
* Infers codec metadata from a media playlist by fetching the prefix of the first segment and parsing it. Returns an InferredCodec with codec=null when the
|
|
38
|
+
* playlist has no segments, the segment cannot be fetched, or the segment format is unrecognized. Currently supports MPEG-TS segments via PAT/PMT walk; fMP4
|
|
39
|
+
* segment inference (via #EXT-X-MAP and parseMoovCodecConfig) is a future extension.
|
|
40
|
+
*
|
|
41
|
+
* @param options - The playlist body and base URL.
|
|
42
|
+
* @returns The inferred codec metadata.
|
|
43
|
+
*/
|
|
44
|
+
export declare function inferMediaCodec(options: InferMediaCodecOptions): Promise<InferredCodec>;
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* codecInference.ts: Inference of the video codec carried by an HLS media playlist by parsing the first segment.
|
|
4
|
+
*/
|
|
5
|
+
import { LOG, chromeFetch } from "../utils/index.js";
|
|
6
|
+
import { resolveUrl } from "./probe.js";
|
|
7
|
+
/* Media-only HLS playlists do not declare codec information - that lives in the master playlist's #EXT-X-STREAM-INF CODECS attribute, which the master-playlist
|
|
8
|
+
* resolver consumes today. For media-only feeds (no master playlist exists), the codec must be inferred from the segments themselves so the MediaFeed surfaces
|
|
9
|
+
* the same codec/resolution metadata regardless of which playlist kind arrived. This module provides the inference seam.
|
|
10
|
+
*
|
|
11
|
+
* The inference path supported in this module is the MPEG-TS Program Map Table (PMT). HLS streams using TS segments expose the elementary stream's stream_type
|
|
12
|
+
* directly in the PMT, which is small enough to reach within the first ~2 KB of every segment. PMT-based inference is bounded, deterministic, and avoids the
|
|
13
|
+
* complexity of full codec-config parsing (SPS NALU walking) because the stream_type byte alone is sufficient to label the codec for status display.
|
|
14
|
+
*
|
|
15
|
+
* fMP4 segments declare codec information in the moov box of an init segment referenced by #EXT-X-MAP. That path is intentionally out of scope for this module
|
|
16
|
+
* and lives behind a clean extension seam: future work can dispatch on the segment's file extension or content type and call parseMoovCodecConfig() from
|
|
17
|
+
* src/streaming/mp4Parser.ts. Resolution is not inferred from TS segments because TS PMT does not carry resolution; recovering it would require parsing the SPS
|
|
18
|
+
* NALU inside a video access unit, which is significantly heavier than the PMT-only walk this module performs.
|
|
19
|
+
*
|
|
20
|
+
* On any failure (segment fetch error, malformed TS, unrecognized stream_type) the inference returns null. Codec is informational metadata for the status
|
|
21
|
+
* display - the streaming pipeline functions correctly without it - so the inference is best-effort and never blocks the probe.
|
|
22
|
+
*/
|
|
23
|
+
// MPEG-TS uses a fixed 188-byte packet size. Every packet starts with the sync byte 0x47 at offset 0.
|
|
24
|
+
const TS_PACKET_SIZE = 188;
|
|
25
|
+
const TS_SYNC_BYTE = 0x47;
|
|
26
|
+
// PID 0 is reserved for the Program Association Table (PAT). Every TS multiplex has exactly one PAT, repeated periodically across packets.
|
|
27
|
+
const PAT_PID = 0;
|
|
28
|
+
/* Maximum bytes to retrieve from a TS segment for codec inference. PAT and PMT are small (well under 1 KB combined) and always appear within the first few
|
|
29
|
+
* packets of a live segment. 32 KB is a comfortable upper bound that covers hundreds of packets while remaining tiny relative to typical 6-second TS segments
|
|
30
|
+
* (which run from ~500 KB to several MB). The Range header asks the CDN for only this prefix; CDNs that ignore Range fall through to a full-segment fetch,
|
|
31
|
+
* which still works - we only ever read the first MAX_SEGMENT_PROBE_BYTES worth.
|
|
32
|
+
*/
|
|
33
|
+
const MAX_SEGMENT_PROBE_BYTES = 32 * 1024;
|
|
34
|
+
// Timeout for the segment-prefix fetch. The first segment is the only HTTP I/O this module performs and we want to fail fast on slow CDNs - the inference is
|
|
35
|
+
// best-effort and the streaming pipeline continues without a codec label if this times out.
|
|
36
|
+
const SEGMENT_PROBE_TIMEOUT_MS = 5000;
|
|
37
|
+
/* Maps MPEG-TS stream_type values (assigned by ISO/IEC 13818-1 and the H.222.0 amendments) to the human-readable codec labels surfaced by the master-playlist
|
|
38
|
+
* branch of the probe. Keeping the same label vocabulary across both branches lets downstream consumers (the status display) treat MediaFeed.codec uniformly.
|
|
39
|
+
*/
|
|
40
|
+
const TS_STREAM_TYPE_TO_CODEC = {
|
|
41
|
+
// 0x1B is the H.264 elementary stream type assigned by ISO/IEC 13818-1 Amendment 3.
|
|
42
|
+
0x1B: "H264",
|
|
43
|
+
// 0x24 is the HEVC (H.265) elementary stream type assigned by ISO/IEC 13818-1 Amendment 3:2013.
|
|
44
|
+
0x24: "HEVC"
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Locates the first segment URL in a media playlist body. Walks the playlist line by line and returns the first non-tag, non-empty line that follows an
|
|
48
|
+
* #EXTINF tag - this is the segment's URI. The URI is resolved against the playlist's base URL so callers always get an absolute URL.
|
|
49
|
+
*
|
|
50
|
+
* Exported for unit testing - the I/O orchestrator below uses it through the public inferMediaCodec() entry point.
|
|
51
|
+
*
|
|
52
|
+
* @param playlistBody - The raw media playlist body.
|
|
53
|
+
* @param baseUrl - The base URL for resolving a relative segment URI.
|
|
54
|
+
* @returns The absolute URL of the first segment, or null when the playlist contains no segments.
|
|
55
|
+
*/
|
|
56
|
+
export function findFirstSegmentUrl(playlistBody, baseUrl) {
|
|
57
|
+
let pendingExtinf = false;
|
|
58
|
+
for (const rawLine of playlistBody.split("\n")) {
|
|
59
|
+
const line = rawLine.trim();
|
|
60
|
+
if (line.startsWith("#EXTINF")) {
|
|
61
|
+
pendingExtinf = true;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (!line || line.startsWith("#")) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (pendingExtinf) {
|
|
68
|
+
return resolveUrl(line, baseUrl);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Locates the first TS packet in a buffer that carries the given PID. TS packets are 188 bytes each, aligned to a sync byte (0x47) at offset 0 of the packet.
|
|
75
|
+
* The PID is encoded in the second and third header bytes: 13 bits split as the low 5 bits of byte 1 and all 8 bits of byte 2.
|
|
76
|
+
*
|
|
77
|
+
* @param buffer - The TS-formatted byte buffer.
|
|
78
|
+
* @param targetPid - The PID to locate.
|
|
79
|
+
* @returns The offset of the matching packet within the buffer, or null when no such packet is found.
|
|
80
|
+
*/
|
|
81
|
+
function findPacketOffset(buffer, targetPid) {
|
|
82
|
+
for (let offset = 0; (offset + TS_PACKET_SIZE) <= buffer.length; offset += TS_PACKET_SIZE) {
|
|
83
|
+
if (buffer[offset] !== TS_SYNC_BYTE) {
|
|
84
|
+
// Lost sync. The buffer is not a clean TS stream from this offset; abandon.
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
const byte1 = buffer[offset + 1] ?? 0;
|
|
88
|
+
const byte2 = buffer[offset + 2] ?? 0;
|
|
89
|
+
const pid = ((byte1 & 0x1F) << 8) | byte2;
|
|
90
|
+
if (pid === targetPid) {
|
|
91
|
+
return offset;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns the offset of the payload within a TS packet, after the 4-byte header and any optional adaptation field. Returns null when the packet declares no
|
|
98
|
+
* payload (adaptation_field_control values 0 or 2).
|
|
99
|
+
*
|
|
100
|
+
* @param buffer - The TS-formatted byte buffer.
|
|
101
|
+
* @param packetOffset - The offset of the TS packet within the buffer.
|
|
102
|
+
* @returns The offset where the packet's payload begins, or null when the packet has no payload.
|
|
103
|
+
*/
|
|
104
|
+
function payloadOffsetForPacket(buffer, packetOffset) {
|
|
105
|
+
// Bits 4-5 of byte 3 are adaptation_field_control. Values: 0=reserved, 1=payload only, 2=adaptation only (no payload), 3=adaptation followed by payload.
|
|
106
|
+
const adaptationControl = ((buffer[packetOffset + 3] ?? 0) >> 4) & 0x03;
|
|
107
|
+
if ((adaptationControl === 0) || (adaptationControl === 2)) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
// No adaptation field; payload starts immediately after the 4-byte header.
|
|
111
|
+
if (adaptationControl === 1) {
|
|
112
|
+
return packetOffset + 4;
|
|
113
|
+
}
|
|
114
|
+
// Adaptation field present and non-empty. Byte 4 is adaptation_field_length: count of bytes following itself in the adaptation field. Skip past the length
|
|
115
|
+
// byte plus the field's payload to land on the actual TS payload.
|
|
116
|
+
const adaptationLength = buffer[packetOffset + 4] ?? 0;
|
|
117
|
+
return packetOffset + 5 + adaptationLength;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Parses a TS packet's payload as a PSI (Program-Specific Information) section by stripping the pointer_field. Per ISO/IEC 13818-1, when the packet's
|
|
121
|
+
* payload_unit_start_indicator is set, the first byte of the payload is a pointer_field whose value is the count of stuffing bytes between itself and the
|
|
122
|
+
* actual table_id byte. Returns the offset of the table_id within the buffer, or null when bookkeeping rules out a usable section.
|
|
123
|
+
*
|
|
124
|
+
* @param buffer - The TS-formatted byte buffer.
|
|
125
|
+
* @param packetOffset - The offset of the TS packet within the buffer.
|
|
126
|
+
* @param payloadOffset - The offset where the packet's payload begins (per payloadOffsetForPacket).
|
|
127
|
+
* @returns The offset of the table_id, or null when the section cannot be located.
|
|
128
|
+
*/
|
|
129
|
+
function sectionOffsetForPacket(buffer, packetOffset, payloadOffset) {
|
|
130
|
+
// Bit 6 of byte 1 is payload_unit_start_indicator (PUSI). PSI sections only begin in packets where PUSI is set; non-start packets carry continuation data we
|
|
131
|
+
// cannot use without reassembling the section across packets.
|
|
132
|
+
const pusi = ((buffer[packetOffset + 1] ?? 0) >> 6) & 0x01;
|
|
133
|
+
if (pusi !== 1) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
const pointerField = buffer[payloadOffset] ?? 0;
|
|
137
|
+
// The pointer_field skips that many bytes of stuffing before the table_id.
|
|
138
|
+
return payloadOffset + 1 + pointerField;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Parses a Program Association Table (PAT) and returns the first non-network program's PMT PID. The PAT is structured as:
|
|
142
|
+
* table_id(8) | section_syntax_indicator(1) | reserved(3) | section_length(12) | transport_stream_id(16) | reserved(2) | version(5) | current_next(1)
|
|
143
|
+
* | section_number(8) | last_section_number(8) | { program_number(16) | reserved(3) | (program_map_PID|network_PID)(13) }* | CRC(32)
|
|
144
|
+
*
|
|
145
|
+
* Programs with program_number == 0 carry the network PID rather than a PMT; we skip those.
|
|
146
|
+
*
|
|
147
|
+
* @param buffer - The TS-formatted byte buffer.
|
|
148
|
+
* @param sectionOffset - The offset of the table_id byte for the PAT section.
|
|
149
|
+
* @returns The first program's PMT PID, or null when the PAT cannot be parsed.
|
|
150
|
+
*/
|
|
151
|
+
function parsePatForPmtPid(buffer, sectionOffset) {
|
|
152
|
+
// table_id is 0x00 for PAT.
|
|
153
|
+
if (buffer[sectionOffset] !== 0x00) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const sectionLengthHigh = (buffer[sectionOffset + 1] ?? 0) & 0x0F;
|
|
157
|
+
const sectionLengthLow = buffer[sectionOffset + 2] ?? 0;
|
|
158
|
+
const sectionLength = (sectionLengthHigh << 8) | sectionLengthLow;
|
|
159
|
+
const sectionEnd = sectionOffset + 3 + sectionLength;
|
|
160
|
+
if (sectionEnd > buffer.length) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
// Skip header (3 bytes) + transport_stream_id (2) + reserved/version (1) + section_number (1) + last_section_number (1) = 8 bytes total. Then walk the
|
|
164
|
+
// 4-byte program records up to (sectionEnd - 4) to leave room for the CRC.
|
|
165
|
+
let cursor = sectionOffset + 8;
|
|
166
|
+
const programsEnd = sectionEnd - 4;
|
|
167
|
+
while ((cursor + 4) <= programsEnd) {
|
|
168
|
+
const programNumber = ((buffer[cursor] ?? 0) << 8) | (buffer[cursor + 1] ?? 0);
|
|
169
|
+
const pmtPidHigh = (buffer[cursor + 2] ?? 0) & 0x1F;
|
|
170
|
+
const pmtPidLow = buffer[cursor + 3] ?? 0;
|
|
171
|
+
const pid = (pmtPidHigh << 8) | pmtPidLow;
|
|
172
|
+
if (programNumber !== 0) {
|
|
173
|
+
return pid;
|
|
174
|
+
}
|
|
175
|
+
cursor += 4;
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Parses a Program Map Table (PMT) and returns the stream_type of the first elementary stream that maps to a recognized video codec. The PMT is structured as:
|
|
181
|
+
* table_id(8) | section_syntax_indicator(1) | reserved(3) | section_length(12) | program_number(16) | reserved(2) | version(5) | current_next(1)
|
|
182
|
+
* | section_number(8) | last_section_number(8) | reserved(3) | PCR_PID(13) | reserved(4) | program_info_length(12) | descriptors[program_info_length]
|
|
183
|
+
* | { stream_type(8) | reserved(3) | elementary_PID(13) | reserved(4) | ES_info_length(12) | descriptors[ES_info_length] }* | CRC(32)
|
|
184
|
+
*
|
|
185
|
+
* @param buffer - The TS-formatted byte buffer.
|
|
186
|
+
* @param sectionOffset - The offset of the table_id byte for the PMT section.
|
|
187
|
+
* @returns The video stream_type, or null when no recognized video stream is found.
|
|
188
|
+
*/
|
|
189
|
+
function parsePmtForVideoStreamType(buffer, sectionOffset) {
|
|
190
|
+
// table_id is 0x02 for PMT.
|
|
191
|
+
if (buffer[sectionOffset] !== 0x02) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
const sectionLengthHigh = (buffer[sectionOffset + 1] ?? 0) & 0x0F;
|
|
195
|
+
const sectionLengthLow = buffer[sectionOffset + 2] ?? 0;
|
|
196
|
+
const sectionLength = (sectionLengthHigh << 8) | sectionLengthLow;
|
|
197
|
+
const sectionEnd = sectionOffset + 3 + sectionLength;
|
|
198
|
+
if (sectionEnd > buffer.length) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
// Skip the fixed header to reach program_info_length: 3 (header) + 2 (program_number) + 1 (version/current_next) + 2 (section_number/last_section) + 2
|
|
202
|
+
// (reserved + PCR_PID) = 10 bytes, then 2 bytes for reserved + program_info_length itself.
|
|
203
|
+
const programInfoLengthHigh = (buffer[sectionOffset + 10] ?? 0) & 0x0F;
|
|
204
|
+
const programInfoLengthLow = buffer[sectionOffset + 11] ?? 0;
|
|
205
|
+
const programInfoLength = (programInfoLengthHigh << 8) | programInfoLengthLow;
|
|
206
|
+
// Walk the elementary stream loop, skipping past program_info_length descriptor bytes.
|
|
207
|
+
let cursor = sectionOffset + 12 + programInfoLength;
|
|
208
|
+
const streamsEnd = sectionEnd - 4;
|
|
209
|
+
while ((cursor + 5) <= streamsEnd) {
|
|
210
|
+
const streamType = buffer[cursor] ?? 0;
|
|
211
|
+
const esInfoLengthHigh = (buffer[cursor + 3] ?? 0) & 0x0F;
|
|
212
|
+
const esInfoLengthLow = buffer[cursor + 4] ?? 0;
|
|
213
|
+
const esInfoLength = (esInfoLengthHigh << 8) | esInfoLengthLow;
|
|
214
|
+
if (TS_STREAM_TYPE_TO_CODEC[streamType] !== undefined) {
|
|
215
|
+
return streamType;
|
|
216
|
+
}
|
|
217
|
+
cursor += 5 + esInfoLength;
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Parses a TS-formatted byte buffer and returns the recognized video codec label, or null when no recognized video stream is present. The buffer is expected to
|
|
223
|
+
* contain the start of a TS segment - the first PAT and PMT packets must be reachable within it. Pure synchronous function with no I/O.
|
|
224
|
+
*
|
|
225
|
+
* Exported for unit testing - the I/O orchestrator below uses it through the public inferMediaCodec() entry point.
|
|
226
|
+
*
|
|
227
|
+
* @param buffer - A buffer containing the start of a TS segment.
|
|
228
|
+
* @returns The codec label (e.g., "H264", "HEVC"), or null when no recognized video stream is found.
|
|
229
|
+
*/
|
|
230
|
+
export function inferCodecFromTsBuffer(buffer) {
|
|
231
|
+
// Locate the PAT.
|
|
232
|
+
const patOffset = findPacketOffset(buffer, PAT_PID);
|
|
233
|
+
if (patOffset === null) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
const patPayload = payloadOffsetForPacket(buffer, patOffset);
|
|
237
|
+
if (patPayload === null) {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
const patSection = sectionOffsetForPacket(buffer, patOffset, patPayload);
|
|
241
|
+
if (patSection === null) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
const pmtPid = parsePatForPmtPid(buffer, patSection);
|
|
245
|
+
if (pmtPid === null) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
// Locate the PMT for the program declared by the PAT.
|
|
249
|
+
const pmtOffset = findPacketOffset(buffer, pmtPid);
|
|
250
|
+
if (pmtOffset === null) {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
const pmtPayload = payloadOffsetForPacket(buffer, pmtOffset);
|
|
254
|
+
if (pmtPayload === null) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
const pmtSection = sectionOffsetForPacket(buffer, pmtOffset, pmtPayload);
|
|
258
|
+
if (pmtSection === null) {
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
const streamType = parsePmtForVideoStreamType(buffer, pmtSection);
|
|
262
|
+
if (streamType === null) {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
return TS_STREAM_TYPE_TO_CODEC[streamType] ?? null;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Fetches the prefix of a TS segment so the caller can parse its PAT/PMT. Sends a Range header asking the CDN for the first MAX_SEGMENT_PROBE_BYTES; CDNs that
|
|
269
|
+
* ignore Range fall through to returning the full segment, which still works because the parser only reads the prefix. Returns null on any HTTP or fetch error
|
|
270
|
+
* so the inference can fail gracefully back to a null codec label.
|
|
271
|
+
*
|
|
272
|
+
* @param url - The absolute segment URL.
|
|
273
|
+
* @returns The fetched prefix, or null on failure.
|
|
274
|
+
*/
|
|
275
|
+
async function fetchSegmentPrefix(url) {
|
|
276
|
+
try {
|
|
277
|
+
const response = await chromeFetch(url, {
|
|
278
|
+
headers: { Range: "bytes=0-" + String(MAX_SEGMENT_PROBE_BYTES - 1) },
|
|
279
|
+
signal: AbortSignal.timeout(SEGMENT_PROBE_TIMEOUT_MS)
|
|
280
|
+
});
|
|
281
|
+
// Accept both 206 Partial Content (Range honored) and 200 OK (Range ignored or unsupported); both deliver bytes the parser can use.
|
|
282
|
+
if (!response.ok && (response.status !== 206)) {
|
|
283
|
+
LOG.debug("native:codec", "Segment prefix fetch returned HTTP %s.", response.status);
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
return Buffer.from(await response.arrayBuffer());
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
LOG.debug("native:codec", "Segment prefix fetch error: %s.", String(error));
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Infers codec metadata from a media playlist by fetching the prefix of the first segment and parsing it. Returns an InferredCodec with codec=null when the
|
|
295
|
+
* playlist has no segments, the segment cannot be fetched, or the segment format is unrecognized. Currently supports MPEG-TS segments via PAT/PMT walk; fMP4
|
|
296
|
+
* segment inference (via #EXT-X-MAP and parseMoovCodecConfig) is a future extension.
|
|
297
|
+
*
|
|
298
|
+
* @param options - The playlist body and base URL.
|
|
299
|
+
* @returns The inferred codec metadata.
|
|
300
|
+
*/
|
|
301
|
+
export async function inferMediaCodec(options) {
|
|
302
|
+
const { baseUrl, playlistBody } = options;
|
|
303
|
+
const segUrl = findFirstSegmentUrl(playlistBody, baseUrl);
|
|
304
|
+
if (!segUrl) {
|
|
305
|
+
return { codec: null };
|
|
306
|
+
}
|
|
307
|
+
// Strip query parameters before checking the file extension. HLS segment URIs commonly carry signed-token query strings that would otherwise mask the path.
|
|
308
|
+
const segPath = segUrl.split("?")[0] ?? "";
|
|
309
|
+
// MPEG-TS segments end in .ts (and historically .aac for audio-only, which we ignore for video codec inference).
|
|
310
|
+
if (!segPath.endsWith(".ts")) {
|
|
311
|
+
LOG.debug("native:codec", "Skipping codec inference for non-TS segment: %s.", segPath.slice(0, 120));
|
|
312
|
+
return { codec: null };
|
|
313
|
+
}
|
|
314
|
+
const buffer = await fetchSegmentPrefix(segUrl);
|
|
315
|
+
if (!buffer) {
|
|
316
|
+
return { codec: null };
|
|
317
|
+
}
|
|
318
|
+
const codec = inferCodecFromTsBuffer(buffer);
|
|
319
|
+
if (codec) {
|
|
320
|
+
LOG.debug("native:codec", "Inferred codec %s from first TS segment.", codec);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
LOG.debug("native:codec", "TS segment did not yield a recognized video codec.");
|
|
324
|
+
}
|
|
325
|
+
return { codec };
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=codecInference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codecInference.js","sourceRoot":"","sources":["../../src/native/codecInference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;;;;;;GAeG;AAEH,sGAAsG;AACtG,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,2IAA2I;AAC3I,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C,6JAA6J;AAC7J,4FAA4F;AAC5F,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC;;GAEG;AACH,MAAM,uBAAuB,GAAqC;IAEhE,oFAAoF;IACpF,IAAI,EAAE,MAAM;IACZ,gGAAgG;IAChG,IAAI,EAAE,MAAM;CACb,CAAC;AAuBF;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,OAAe;IAEvE,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,KAAI,MAAM,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAE9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAE9B,aAAa,GAAG,IAAI,CAAC;YAErB,SAAS;QACX,CAAC;QAED,IAAG,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAEjC,SAAS;QACX,CAAC;QAED,IAAG,aAAa,EAAE,CAAC;YAEjB,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,MAAc,EAAE,SAAiB;IAEzD,KAAI,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,cAAc,EAAE,CAAC;QAEzF,IAAG,MAAM,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,CAAC;YAEnC,4EAA4E;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;QAE1C,IAAG,GAAG,KAAK,SAAS,EAAE,CAAC;YAErB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,MAAc,EAAE,YAAoB;IAElE,yJAAyJ;IACzJ,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAExE,IAAG,CAAC,iBAAiB,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,CAAC,EAAE,CAAC;QAE1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,IAAG,iBAAiB,KAAK,CAAC,EAAE,CAAC;QAE3B,OAAO,YAAY,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,2JAA2J;IAC3J,kEAAkE;IAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvD,OAAO,YAAY,GAAG,CAAC,GAAG,gBAAgB,CAAC;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,sBAAsB,CAAC,MAAc,EAAE,YAAoB,EAAE,aAAqB;IAEzF,6JAA6J;IAC7J,8DAA8D;IAC9D,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAE3D,IAAG,IAAI,KAAK,CAAC,EAAE,CAAC;QAEd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAEhD,2EAA2E;IAC3E,OAAO,aAAa,GAAG,CAAC,GAAG,YAAY,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,MAAc,EAAE,aAAqB;IAE9D,4BAA4B;IAC5B,IAAG,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;QAElC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC;IAClE,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC;IAErD,IAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uJAAuJ;IACvJ,2EAA2E;IAC3E,IAAI,MAAM,GAAG,aAAa,GAAG,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;IAEnC,OAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;QAElC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;QAE1C,IAAG,aAAa,KAAK,CAAC,EAAE,CAAC;YAEvB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,0BAA0B,CAAC,MAAc,EAAE,aAAqB;IAEvE,4BAA4B;IAC5B,IAAG,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;QAElC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC;IAClE,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC;IAErD,IAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uJAAuJ;IACvJ,2FAA2F;IAC3F,MAAM,qBAAqB,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvE,MAAM,oBAAoB,GAAG,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC;IAE9E,uFAAuF;IACvF,IAAI,MAAM,GAAG,aAAa,GAAG,EAAE,GAAG,iBAAiB,CAAC;IACpD,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;IAElC,OAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;QAEjC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1D,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,eAAe,CAAC;QAE/D,IAAG,uBAAuB,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YAErD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,IAAI,CAAC,GAAG,YAAY,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IAEnD,kBAAkB;IAClB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpD,IAAG,SAAS,KAAK,IAAI,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEzE,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAErD,IAAG,MAAM,KAAK,IAAI,EAAE,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sDAAsD;IACtD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAG,SAAS,KAAK,IAAI,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEzE,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAElE,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,uBAAuB,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AACrD,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAE3C,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;YAEtC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAAC,uBAAuB,GAAG,CAAC,CAAC,EAAE;YACpE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC;SACtD,CAAC,CAAC;QAEH,oIAAoI;QACpI,IAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC;YAE7C,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,wCAAwC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAErF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAM,KAAK,EAAE,CAAC;QAEd,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,iCAAiC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA+B;IAEnE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAE1C,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAG,CAAC,MAAM,EAAE,CAAC;QAEX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,4JAA4J;IAC5J,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3C,iHAAiH;IACjH,IAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAE5B,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,kDAAkD,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAErG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAG,CAAC,MAAM,EAAE,CAAC;QAEX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAG,KAAK,EAAE,CAAC;QAET,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,0CAA0C,EAAE,KAAK,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QAEN,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,oDAAoD,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
|
package/dist/native/decrypt.d.ts
CHANGED
package/dist/native/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { CaptureCodec } from "../streaming/codec.
|
|
2
|
-
import type { ManifestInterceptionResult } from "
|
|
3
|
-
import type { NativeProxy } from "./proxy.
|
|
4
|
-
import type { Nullable } from "../types/index.
|
|
1
|
+
import type { CaptureCodec } from "../streaming/codec.ts";
|
|
2
|
+
import type { ManifestInterceptionResult } from "../browser/manifestInterceptor.ts";
|
|
3
|
+
import type { NativeProxy } from "./proxy.ts";
|
|
4
|
+
import type { Nullable } from "../types/index.ts";
|
|
5
5
|
import type { Page } from "puppeteer-core";
|
|
6
6
|
/**
|
|
7
7
|
* Options for attempting native streaming.
|
|
@@ -48,7 +48,7 @@ export declare function attemptNativeStreaming(options: AttemptNativeStreamingOp
|
|
|
48
48
|
*
|
|
49
49
|
* L2 recovery (failure-triggered) from the monitor omits masterUrl, going straight to page reload since the stream is already failing and needs a full refresh.
|
|
50
50
|
*
|
|
51
|
-
* @param options - Refresh options. masterUrl is optional
|
|
51
|
+
* @param options - Refresh options. masterUrl is optional - when provided, direct fetch is attempted first.
|
|
52
52
|
* @returns True if the refresh succeeded (proxy updated with new manifest), false otherwise.
|
|
53
53
|
*/
|
|
54
54
|
export declare function refreshNativeManifest(options: {
|