prismcast 1.13.0 → 1.14.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 +88 -6
- package/dist/app.js +287 -154
- package/dist/app.js.map +1 -1
- package/dist/browser/cdp.d.ts +6 -17
- package/dist/browser/cdp.js +6 -57
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/index.d.ts +106 -23
- package/dist/browser/index.js +292 -225
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/precaching.d.ts +25 -11
- package/dist/browser/precaching.js +245 -97
- package/dist/browser/precaching.js.map +1 -1
- package/dist/browser/tabCapture.js +3 -10
- package/dist/browser/tabCapture.js.map +1 -1
- package/dist/browser/tuning/comcastPolymer.js +13 -14
- package/dist/browser/tuning/comcastPolymer.js.map +1 -1
- package/dist/browser/tuning/hbo.js +34 -17
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/video.d.ts +1 -1
- package/dist/browser/video.js +3 -3
- package/dist/channels/index.js +5 -5
- package/dist/channels/index.js.map +1 -1
- package/dist/cliHelp.d.ts +11 -0
- package/dist/cliHelp.js +148 -0
- package/dist/cliHelp.js.map +1 -0
- package/dist/config/channelForm.js +5 -4
- package/dist/config/channelForm.js.map +1 -1
- package/dist/config/consistencyProbe.d.ts +2 -4
- package/dist/config/consistencyProbe.js +8 -51
- package/dist/config/consistencyProbe.js.map +1 -1
- package/dist/config/index.d.ts +107 -55
- package/dist/config/index.js +499 -267
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts +13 -8
- package/dist/config/paths.js +21 -25
- package/dist/config/paths.js.map +1 -1
- package/dist/config/persistence.d.ts +57 -11
- package/dist/config/persistence.js +127 -44
- package/dist/config/persistence.js.map +1 -1
- package/dist/config/reactivity.d.ts +60 -36
- package/dist/config/reactivity.js +89 -116
- package/dist/config/reactivity.js.map +1 -1
- package/dist/config/services.d.ts +61 -26
- package/dist/config/services.js +137 -68
- package/dist/config/services.js.map +1 -1
- package/dist/config/streamSettings.d.ts +24 -0
- package/dist/config/streamSettings.js +17 -0
- package/dist/config/streamSettings.js.map +1 -0
- package/dist/config/userChannels.d.ts +60 -52
- package/dist/config/userChannels.js +138 -188
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +224 -61
- package/dist/config/userConfig.js +351 -134
- package/dist/config/userConfig.js.map +1 -1
- package/dist/hdhr/discover.d.ts +7 -1
- package/dist/hdhr/discover.js +12 -6
- package/dist/hdhr/discover.js.map +1 -1
- package/dist/hdhr/index.d.ts +51 -10
- package/dist/hdhr/index.js +108 -112
- package/dist/hdhr/index.js.map +1 -1
- package/dist/hdhr/udp.d.ts +11 -4
- package/dist/hdhr/udp.js +25 -20
- package/dist/hdhr/udp.js.map +1 -1
- package/dist/index.js +16 -143
- package/dist/index.js.map +1 -1
- package/dist/native/index.d.ts +1 -1
- package/dist/native/index.js +4 -3
- package/dist/native/index.js.map +1 -1
- package/dist/native/proxy.d.ts +1 -1
- package/dist/native/proxy.js +36 -28
- package/dist/native/proxy.js.map +1 -1
- package/dist/routes/cdp.d.ts +7 -6
- package/dist/routes/cdp.js +9 -8
- package/dist/routes/cdp.js.map +1 -1
- package/dist/routes/components.d.ts +23 -5
- package/dist/routes/components.js +21 -4
- package/dist/routes/components.js.map +1 -1
- package/dist/routes/config/channels/endpoints/browse.js +39 -29
- package/dist/routes/config/channels/endpoints/browse.js.map +1 -1
- package/dist/routes/config/channels/endpoints/bulk.js +2 -6
- package/dist/routes/config/channels/endpoints/bulk.js.map +1 -1
- package/dist/routes/config/channels/endpoints/predefined.js +5 -15
- package/dist/routes/config/channels/endpoints/predefined.js.map +1 -1
- package/dist/routes/config/channels/endpoints/prefs.js +7 -6
- package/dist/routes/config/channels/endpoints/prefs.js.map +1 -1
- package/dist/routes/config/channels/endpoints/service.js +6 -5
- package/dist/routes/config/channels/endpoints/service.js.map +1 -1
- package/dist/routes/config/channels/endpoints/tags.js +4 -16
- package/dist/routes/config/channels/endpoints/tags.js.map +1 -1
- package/dist/routes/config/channels/table.d.ts +2 -1
- package/dist/routes/config/channels/table.js +11 -13
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/http/envelope.d.ts +6 -3
- package/dist/routes/config/http/envelope.js +18 -5
- package/dist/routes/config/http/envelope.js.map +1 -1
- package/dist/routes/config/index.d.ts +21 -13
- package/dist/routes/config/index.js +47 -34
- package/dist/routes/config/index.js.map +1 -1
- package/dist/routes/config/settings.d.ts +43 -6
- package/dist/routes/config/settings.js +225 -125
- package/dist/routes/config/settings.js.map +1 -1
- package/dist/routes/config/vocabulary.d.ts +24 -0
- package/dist/routes/config/vocabulary.js +33 -0
- package/dist/routes/config/vocabulary.js.map +1 -0
- package/dist/routes/debug.js +28 -13
- package/dist/routes/debug.js.map +1 -1
- package/dist/routes/root/content.js +33 -26
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/scripts/channels.js +23 -11
- package/dist/routes/root/scripts/channels.js.map +1 -1
- package/dist/routes/root/scripts/config.d.ts +1 -1
- package/dist/routes/root/scripts/config.js +127 -79
- package/dist/routes/root/scripts/config.js.map +1 -1
- package/dist/routes/root/scripts/shared.js +34 -23
- package/dist/routes/root/scripts/shared.js.map +1 -1
- package/dist/routes/root/scripts/status.handlers.d.ts +8 -13
- package/dist/routes/root/scripts/status.handlers.js +35 -21
- package/dist/routes/root/scripts/status.handlers.js.map +1 -1
- package/dist/routes/root/styles.js +13 -16
- package/dist/routes/root/styles.js.map +1 -1
- package/dist/routes/services.js +12 -16
- package/dist/routes/services.js.map +1 -1
- package/dist/routes/theme.js +12 -12
- package/dist/routes/theme.js.map +1 -1
- package/dist/routes/ui.d.ts +4 -3
- package/dist/routes/ui.js +17 -13
- package/dist/routes/ui.js.map +1 -1
- package/dist/service/generators.js +12 -9
- package/dist/service/generators.js.map +1 -1
- package/dist/streaming/captureSession.d.ts +4 -4
- package/dist/streaming/captureSession.js +6 -7
- package/dist/streaming/captureSession.js.map +1 -1
- package/dist/streaming/codec.d.ts +12 -2
- package/dist/streaming/codec.js +40 -28
- package/dist/streaming/codec.js.map +1 -1
- package/dist/streaming/fmp4Segmenter.d.ts +14 -4
- package/dist/streaming/fmp4Segmenter.js +99 -79
- package/dist/streaming/fmp4Segmenter.js.map +1 -1
- package/dist/streaming/hls.d.ts +21 -14
- package/dist/streaming/hls.js +148 -122
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.d.ts +36 -13
- package/dist/streaming/hlsResume.js +68 -37
- package/dist/streaming/hlsResume.js.map +1 -1
- package/dist/streaming/monitor.d.ts +5 -3
- package/dist/streaming/monitor.js +47 -37
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/mp4Parser.d.ts +29 -4
- package/dist/streaming/mp4Parser.js +49 -7
- package/dist/streaming/mp4Parser.js.map +1 -1
- package/dist/streaming/playlistBuilder.d.ts +1 -2
- package/dist/streaming/playlistBuilder.js +2 -3
- package/dist/streaming/playlistBuilder.js.map +1 -1
- package/dist/streaming/preroll.d.ts +43 -16
- package/dist/streaming/preroll.js +112 -62
- package/dist/streaming/preroll.js.map +1 -1
- package/dist/streaming/pretune.d.ts +2 -2
- package/dist/streaming/pretune.js +11 -7
- package/dist/streaming/pretune.js.map +1 -1
- package/dist/streaming/recovery.d.ts +29 -2
- package/dist/streaming/recovery.js +43 -4
- package/dist/streaming/recovery.js.map +1 -1
- package/dist/streaming/registry.d.ts +13 -10
- package/dist/streaming/registry.js +6 -5
- package/dist/streaming/registry.js.map +1 -1
- package/dist/streaming/setup.d.ts +29 -20
- package/dist/streaming/setup.js +181 -170
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/showInfo.d.ts +24 -12
- package/dist/streaming/showInfo.js +120 -113
- package/dist/streaming/showInfo.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +15 -10
- package/dist/streaming/statusEmitter.js +24 -20
- package/dist/streaming/statusEmitter.js.map +1 -1
- package/dist/types/config.d.ts +24 -13
- package/dist/types/config.js +5 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.js +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +2 -2
- package/dist/types/selection.d.ts +12 -10
- package/dist/types/streaming.d.ts +12 -5
- package/dist/types/streaming.js +12 -5
- package/dist/types/streaming.js.map +1 -1
- package/dist/utils/debugFilter.d.ts +3 -2
- package/dist/utils/debugFilter.js +7 -5
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/{hdhr → utils}/deviceId.d.ts +1 -1
- package/dist/{hdhr → utils}/deviceId.js +11 -29
- package/dist/utils/deviceId.js.map +1 -0
- package/dist/utils/errors.d.ts +7 -0
- package/dist/utils/errors.js +12 -3
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/fileLogger.d.ts +23 -12
- package/dist/utils/fileLogger.js +73 -41
- package/dist/utils/fileLogger.js.map +1 -1
- package/dist/utils/httpErrors.d.ts +13 -0
- package/dist/utils/httpErrors.js +22 -0
- package/dist/utils/httpErrors.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +9 -8
- package/dist/utils/logger.js +64 -20
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/markup.js +8 -3
- package/dist/utils/markup.js.map +1 -1
- package/dist/utils/plainObject.d.ts +6 -0
- package/dist/utils/plainObject.js +18 -0
- package/dist/utils/plainObject.js.map +1 -0
- package/dist/utils/runtimeIdentity.context.js +1 -29
- package/dist/utils/runtimeIdentity.context.js.map +1 -1
- package/dist/utils/runtimeIdentity.d.ts +17 -6
- package/dist/utils/runtimeIdentity.js +50 -17
- package/dist/utils/runtimeIdentity.js.map +1 -1
- package/package.json +5 -5
- package/dist/hdhr/deviceId.js.map +0 -1
|
@@ -2,30 +2,31 @@
|
|
|
2
2
|
*
|
|
3
3
|
* fmp4Segmenter.ts: fMP4 HLS segmentation for PrismCast.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { LOG, toError } from "../utils/index.js";
|
|
6
|
+
import { buildPrerollEntries, buildPrerollInitUri, computePrerollWindow, getPrerollTotalDurationSec } from "./preroll.js";
|
|
7
|
+
import { computeTimelinePosition, createMP4BoxParser, detectMoofKeyframe, offsetMoofTimestamps, parseMoovCodecConfig, parseMoovTrackInfo } from "./mp4Parser.js";
|
|
7
8
|
import { getSegmentCount, storeInitSegment, storeSegment, updatePlaylist } from "./hlsSegments.js";
|
|
9
|
+
import { CAPTURE_BASELINE_CODEC } from "../types/index.js";
|
|
8
10
|
import { CONFIG } from "../config/index.js";
|
|
9
|
-
import { LOG } from "../utils/index.js";
|
|
10
11
|
import { buildPlaylist } from "./playlistBuilder.js";
|
|
11
12
|
import { getStream } from "./registry.js";
|
|
12
13
|
import { systemClock } from "homebridge-plugin-utils";
|
|
13
|
-
/* This module transforms
|
|
14
|
-
* capture codec, H.264 or HEVC per codec.ts, paired with AAC audio
|
|
15
|
-
* +
|
|
16
|
-
* (3) store init segment and accumulate media fragments into segments, and (4) generate and update the m3u8 playlist.
|
|
14
|
+
/* This module transforms FFmpeg's fMP4 remux of the puppeteer-stream capture into HLS fMP4 segments. The overall flow is: (1) receive fMP4 data from FFmpeg's stdout (the
|
|
15
|
+
* configured capture codec, H.264 or HEVC per codec.ts, paired with AAC audio), (2) parse MP4 box structure to identify ftyp + moov (initialization segment) and
|
|
16
|
+
* moof + mdat pairs (media fragments), (3) store init segment and accumulate media fragments into segments, and (4) generate and update the m3u8 playlist.
|
|
17
17
|
*
|
|
18
18
|
* Keyframe detection is available for diagnostics by setting KEYFRAME_DEBUG to true. When enabled, each moof's traf/trun sample flags are parsed (ISO 14496-12) to
|
|
19
19
|
* determine whether fragments start with sync samples (keyframes). Statistics are logged at stream termination and per-segment warnings are emitted for segments that
|
|
20
|
-
* don't start with a keyframe. When disabled, the
|
|
20
|
+
* don't start with a keyframe. When disabled, the keyframe sample-flag parse is skipped; the moof is still read for its per-track durations and its tfdt rewritten
|
|
21
|
+
* by the timestamp offset pass.
|
|
21
22
|
*/
|
|
22
23
|
// Set to true to enable keyframe detection and statistics. This parses traf/trun sample flags in each moof to track keyframe frequency and log per-segment warnings.
|
|
23
24
|
// Useful for diagnosing frozen screen issues in downstream HLS consumers.
|
|
24
25
|
const KEYFRAME_DEBUG = false;
|
|
25
26
|
// Keyframe Stats Formatting.
|
|
26
27
|
/**
|
|
27
|
-
* Formats keyframe statistics into a human-readable summary for the termination log. Returns an empty string if no moof boxes were processed. The format mirrors
|
|
28
|
-
* recovery
|
|
28
|
+
* Formats keyframe statistics into a human-readable summary for the termination log. Returns an empty string if no moof boxes were processed. The format mirrors
|
|
29
|
+
* formatRecoveryMetricsSummary() in recovery.ts, which the termination log in lifecycle.ts composes alongside it.
|
|
29
30
|
*
|
|
30
31
|
* Example output:
|
|
31
32
|
* - "Keyframes: 2490 of 2490 moofs (100.0%), interval 1.9-2.1s avg 2.0s."
|
|
@@ -145,16 +146,17 @@ export function computeDiscontinuitySequence(options) {
|
|
|
145
146
|
// Segmenter Implementation.
|
|
146
147
|
/**
|
|
147
148
|
* Creates an fMP4 segmenter that transforms MP4 input into HLS segments. The segmenter parses MP4 boxes, extracts the init segment, optionally detects keyframes
|
|
148
|
-
* in each moof fragment when KEYFRAME_DEBUG is enabled, and accumulates media fragments into segments based on the
|
|
149
|
+
* in each moof fragment when KEYFRAME_DEBUG is enabled, and accumulates media fragments into segments based on the segment duration it is given.
|
|
149
150
|
* @param options - Segmenter options including stream ID and callbacks.
|
|
150
151
|
* @returns The segmenter interface with pipe, stop, and keyframe stats methods.
|
|
151
152
|
*/
|
|
152
153
|
export function createFMP4Segmenter(options) {
|
|
153
|
-
const { clock = systemClock, continuity, onError, onStop, pendingDiscontinuity, prerollBaseUrl, prerollCodec, prerollSegmentCount, streamId } = options;
|
|
154
|
-
const { initialTrackTimestamps, previousInitSegment, priorSessionStats, startingInitVersion, startingSegmentIndex } = continuity ?? {};
|
|
155
|
-
// Initialize state.
|
|
154
|
+
const { clock = systemClock, continuity, onError, onStop, pendingDiscontinuity, prerollBaseUrl, prerollCodec, prerollSegmentCount, segmentDuration, streamId } = options;
|
|
155
|
+
const { initialTrackTimestamps, previousInitSegment, priorSegmentHistory, priorSessionStats, startingInitVersion, startingSegmentIndex } = continuity ?? {};
|
|
156
|
+
// Initialize state. A continued sequence seeds the collections its playlist and its prune read from the history it carries, so an earlier segment is listed,
|
|
157
|
+
// dated, marked, pruned and counted exactly as one this segmenter produced.
|
|
156
158
|
const state = {
|
|
157
|
-
discontinuityIndices: new Set(),
|
|
159
|
+
discontinuityIndices: new Set(priorSegmentHistory?.discontinuityIndices),
|
|
158
160
|
firstSegmentEmitted: false,
|
|
159
161
|
fragmentBuffer: [],
|
|
160
162
|
hasInit: false,
|
|
@@ -172,24 +174,27 @@ export function createFMP4Segmenter(options) {
|
|
|
172
174
|
normalizedReferencePositionSec: null,
|
|
173
175
|
pendingDiscontinuity: pendingDiscontinuity ?? false,
|
|
174
176
|
prerollBaseUrl: prerollBaseUrl ?? null,
|
|
175
|
-
|
|
177
|
+
// The codec is read only while a preroll is active, and every caller that activates one passes its codec, so the baseline stands in only for a segmenter that
|
|
178
|
+
// never reads it.
|
|
179
|
+
prerollCodec: prerollCodec ?? CAPTURE_BASELINE_CODEC,
|
|
176
180
|
prerollSegmentCount: prerollSegmentCount ?? 0,
|
|
177
|
-
prunedDiscontinuityCount: 0,
|
|
178
|
-
segmentDurations: new Map(),
|
|
181
|
+
prunedDiscontinuityCount: priorSegmentHistory?.prunedDiscontinuityCount ?? 0,
|
|
182
|
+
segmentDurations: new Map(priorSegmentHistory?.segmentDurations),
|
|
179
183
|
segmentFirstMoofChecked: false,
|
|
180
184
|
segmentIndex: startingSegmentIndex ?? 0,
|
|
181
185
|
segmentStartTime: clock.now(),
|
|
182
|
-
segmentTimestamps: new Map(),
|
|
186
|
+
segmentTimestamps: new Map(priorSegmentHistory?.segmentTimestamps),
|
|
183
187
|
segmentTrackDurations: new Map(),
|
|
184
188
|
segmentsWithoutLeadingKeyframe: 0,
|
|
185
189
|
sessionStats: priorSessionStats ? { ...priorSessionStats, tabReplacementCount: priorSessionStats.tabReplacementCount + 1 } :
|
|
186
190
|
{ malformedMoofCount: 0, syncSpreadCount: 0, syncSpreadMaxMs: 0, syncSpreadMinMs: Infinity, syncSpreadSumMs: 0, tabReplacementCount: 0 },
|
|
191
|
+
startingSegmentIndex: startingSegmentIndex ?? 0,
|
|
187
192
|
stopped: false,
|
|
188
193
|
totalKeyframeIntervalMs: 0,
|
|
189
194
|
trackOffsets: new Map(),
|
|
190
195
|
trackOffsetsInitialized: new Set(),
|
|
191
196
|
trackTimescales: new Map(),
|
|
192
|
-
trackTimestamps:
|
|
197
|
+
trackTimestamps: new Map(initialTrackTimestamps),
|
|
193
198
|
videoTrackId: null,
|
|
194
199
|
videoTrafsInCurrentSegment: null
|
|
195
200
|
};
|
|
@@ -199,7 +204,8 @@ export function createFMP4Segmenter(options) {
|
|
|
199
204
|
* Generates the m3u8 playlist content. When preroll metadata is present (prerollSegmentCount > 0), the playlist includes both preroll entries (served from global
|
|
200
205
|
* /preroll/ routes with absolute URLs) and real entries (served from the stream's /hls/:name/ routes with relative URLs) in a single sliding window. The preroll
|
|
201
206
|
* entries use a separate #EXT-X-MAP for the preroll init segment, and a #EXT-X-DISCONTINUITY tag marks the boundary between preroll and real content. As real
|
|
202
|
-
* segments accumulate, preroll entries fall off the window naturally and the playlist becomes purely real content with zero overhead.
|
|
207
|
+
* segments accumulate, preroll entries fall off the window naturally and the playlist becomes purely real content with zero overhead. A resumed stream's preroll
|
|
208
|
+
* entry carries the marker its preroll playlist gave it, at the preroll's first index.
|
|
203
209
|
*
|
|
204
210
|
* Delegates all m3u8 formatting to the shared buildPlaylist() function. Preroll windowing and entry construction are handled by the compositor functions in
|
|
205
211
|
* preroll.ts. This function is responsible for constructing real segment entries from the segmenter's state and computing the discontinuity sequence from the
|
|
@@ -207,45 +213,59 @@ export function createFMP4Segmenter(options) {
|
|
|
207
213
|
*/
|
|
208
214
|
function generatePlaylist() {
|
|
209
215
|
const realInitMapUri = "init.mp4?v=" + String(state.initVersion);
|
|
210
|
-
// Check whether the preroll timer has fired and the client is actually watching preroll. The segment index offset (starting
|
|
211
|
-
// applied structurally, but preroll entries are only included in the playlist when the deferred timer has fired - indicated by
|
|
212
|
-
// stream's HLS state. This is the same dynamic check the native proxy uses in its generatePlaylist(). Without this, fast
|
|
213
|
-
// preroll delay elapses) would include unnecessary preroll entries in their first playlists.
|
|
216
|
+
// Check whether the preroll timer has fired and the client is actually watching preroll. The segment index offset (real segments starting past the preroll's
|
|
217
|
+
// indices) is always applied structurally, but preroll entries are only included in the playlist when the deferred timer has fired - indicated by
|
|
218
|
+
// prerollStartTime being set on the stream's HLS state. This is the same dynamic check the native proxy uses in its generatePlaylist(). Without this, fast
|
|
219
|
+
// capture streams (tuning before the preroll delay elapses) would include unnecessary preroll entries in their first playlists.
|
|
214
220
|
const stream = getStream(streamId);
|
|
215
221
|
const prerollActive = (state.prerollSegmentCount > 0) && (stream?.hls.prerollStartTime !== null) && (stream?.hls.prerollStartTime !== undefined);
|
|
216
222
|
// Compute the sliding window start index. When preroll is active, the compositor handles the three-way max (floor, sliding window, preroll cap). Without
|
|
217
223
|
// preroll (or when the timer hasn't fired), the standard sliding window rule applies.
|
|
218
224
|
const realSegmentCount = getSegmentCount(streamId);
|
|
225
|
+
// The preroll occupies the preroll count's indices directly below the starting index: from 0 on a fresh stream, and from the persisted index on a resumed one,
|
|
226
|
+
// so the window places the preroll at the media sequence its preroll playlist served.
|
|
227
|
+
const prerollStartIndex = state.startingSegmentIndex - state.prerollSegmentCount;
|
|
219
228
|
let startIndex;
|
|
220
229
|
if (prerollActive) {
|
|
221
230
|
startIndex = computePrerollWindow({
|
|
222
231
|
currentSegmentIndex: state.segmentIndex,
|
|
223
232
|
maxSegments: CONFIG.hls.maxSegments,
|
|
224
233
|
prerollSegmentCount: state.prerollSegmentCount,
|
|
234
|
+
prerollStartIndex,
|
|
225
235
|
realSegmentCount
|
|
226
236
|
});
|
|
227
237
|
}
|
|
228
238
|
else {
|
|
229
239
|
startIndex = Math.max(0, state.segmentIndex - Math.min(realSegmentCount, CONFIG.hls.maxSegments));
|
|
230
240
|
}
|
|
231
|
-
// Build preroll entries for preroll indices still in the window. Only included when the deferred preroll timer
|
|
241
|
+
// Build preroll entries for preroll indices still in the window, from the window start's offset into the preroll. Only included when the deferred preroll timer
|
|
242
|
+
// has fired and the client is watching preroll.
|
|
232
243
|
let prerollEntries = [];
|
|
233
|
-
if (prerollActive && state.prerollBaseUrl && (startIndex < state.
|
|
234
|
-
prerollEntries = buildPrerollEntries({ baseUrl: state.prerollBaseUrl, codec: state.prerollCodec,
|
|
235
|
-
startIndex });
|
|
244
|
+
if (prerollActive && state.prerollBaseUrl && (startIndex < state.startingSegmentIndex)) {
|
|
245
|
+
prerollEntries = buildPrerollEntries({ baseUrl: state.prerollBaseUrl, codec: state.prerollCodec, prerollSegmentCount: state.prerollSegmentCount,
|
|
246
|
+
startIndex: startIndex - prerollStartIndex });
|
|
247
|
+
// A preroll entry carries a marker by its index, as a real entry does, its index being the window start plus its position. The only marker a preroll range
|
|
248
|
+
// holds sits at the preroll's first index, which is the window's first entry whenever the window lists it, under the preroll init the playlist's initial map
|
|
249
|
+
// already names, so the entry re-emits no map.
|
|
250
|
+
for (const [offset, entry] of prerollEntries.entries()) {
|
|
251
|
+
if (state.discontinuityIndices.has(startIndex + offset)) {
|
|
252
|
+
entry.discontinuity = true;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
236
255
|
}
|
|
237
256
|
// Build real segment entries from the segmenter's state. Each entry carries its duration, optional discontinuity marker with init re-emission, and wall-clock
|
|
238
|
-
// timestamp for PROGRAM-DATE-TIME. The
|
|
239
|
-
// the earlier
|
|
257
|
+
// timestamp for PROGRAM-DATE-TIME. The starting index floors the real range only while the preroll is listed, because the preroll entries cover the indices
|
|
258
|
+
// below it then; a segmenter with no preroll listed, a tab replacement's successor among them, lists the earlier segments its history carries below its
|
|
259
|
+
// starting index.
|
|
240
260
|
const realEntries = [];
|
|
241
|
-
const realStartIndex = Math.max(startIndex, state.
|
|
261
|
+
const realStartIndex = prerollActive ? Math.max(startIndex, state.startingSegmentIndex) : startIndex;
|
|
242
262
|
for (let i = realStartIndex; i < state.segmentIndex; i++) {
|
|
243
263
|
const entry = {
|
|
244
|
-
duration: state.segmentDurations.get(i) ??
|
|
264
|
+
duration: state.segmentDurations.get(i) ?? segmentDuration,
|
|
245
265
|
url: "segment" + String(i) + ".m4s"
|
|
246
266
|
};
|
|
247
|
-
// Add discontinuity marker and re-emit the init segment reference at preroll-to-real boundaries and recovery events. The preroll-to-real boundary is
|
|
248
|
-
//
|
|
267
|
+
// Add discontinuity marker and re-emit the init segment reference at preroll-to-real boundaries and recovery events. The preroll-to-real boundary is marked
|
|
268
|
+
// through pendingDiscontinuity - outputSegment() marks the starting segment index, the first real segment's, when it outputs that segment.
|
|
249
269
|
if (state.discontinuityIndices.has(i)) {
|
|
250
270
|
entry.discontinuity = true;
|
|
251
271
|
entry.mapUri = realInitMapUri;
|
|
@@ -268,14 +288,13 @@ export function createFMP4Segmenter(options) {
|
|
|
268
288
|
});
|
|
269
289
|
// Determine the initial MAP URI. When the window starts with preroll entries, use the preroll init segment. Otherwise, use the real init segment. The
|
|
270
290
|
// prerollBaseUrl is guaranteed non-null when prerollEntries is non-empty (guarded by the conditional above).
|
|
271
|
-
const initialMapUri = ((prerollEntries.length > 0) && state.prerollBaseUrl) ?
|
|
272
|
-
(state.prerollBaseUrl + "/preroll/" + state.prerollCodec + "/init.mp4") : realInitMapUri;
|
|
291
|
+
const initialMapUri = ((prerollEntries.length > 0) && state.prerollBaseUrl) ? buildPrerollInitUri(state.prerollBaseUrl, state.prerollCodec) : realInitMapUri;
|
|
273
292
|
const entries = [...prerollEntries, ...realEntries];
|
|
274
293
|
return buildPlaylist({
|
|
275
294
|
discontinuitySequence,
|
|
276
295
|
initialMapUri,
|
|
277
296
|
mediaSequence: startIndex,
|
|
278
|
-
targetDuration:
|
|
297
|
+
targetDuration: segmentDuration,
|
|
279
298
|
version: 7
|
|
280
299
|
}, entries);
|
|
281
300
|
}
|
|
@@ -298,7 +317,8 @@ export function createFMP4Segmenter(options) {
|
|
|
298
317
|
if (state.fragmentBuffer.length === 0) {
|
|
299
318
|
return;
|
|
300
319
|
}
|
|
301
|
-
// If
|
|
320
|
+
// If a marker is pending (a continuation, a preroll boundary, or a recovery event through markDiscontinuity), record this segment's index for discontinuity
|
|
321
|
+
// marking.
|
|
302
322
|
if (state.pendingDiscontinuity) {
|
|
303
323
|
state.discontinuityIndices.add(state.segmentIndex);
|
|
304
324
|
state.pendingDiscontinuity = false;
|
|
@@ -425,7 +445,7 @@ export function createFMP4Segmenter(options) {
|
|
|
425
445
|
if (!state.hasInit) {
|
|
426
446
|
if ((box.type === "ftyp") || (box.type === "moov")) {
|
|
427
447
|
state.initBoxes.push(box.data);
|
|
428
|
-
//
|
|
448
|
+
// The moov completes the init segment (the ftyp, when present, precedes it in initBoxes).
|
|
429
449
|
if (box.type === "moov") {
|
|
430
450
|
// Output the init segment.
|
|
431
451
|
const initData = Buffer.concat(state.initBoxes);
|
|
@@ -443,7 +463,7 @@ export function createFMP4Segmenter(options) {
|
|
|
443
463
|
LOG.info("Capture parameters changed: the new initialization segment differs from the one this capture continues from.");
|
|
444
464
|
}
|
|
445
465
|
// Version the init URI for HLS cache busting. Incrementing the version makes the #EXT-X-MAP URI different from the previous playlist, forcing clients
|
|
446
|
-
// to re-fetch the init segment. This prevents timescale mismatches when
|
|
466
|
+
// to re-fetch the init segment. This prevents timescale mismatches when the FFmpeg remux's track timescales differ between capture sessions.
|
|
447
467
|
if (initChanged) {
|
|
448
468
|
state.initVersion++;
|
|
449
469
|
}
|
|
@@ -490,29 +510,19 @@ export function createFMP4Segmenter(options) {
|
|
|
490
510
|
catch {
|
|
491
511
|
LOG.debug("streaming:segmenter", "Failed to parse codec configuration from moov.");
|
|
492
512
|
}
|
|
493
|
-
// Compute the normalized reference position
|
|
494
|
-
// to seconds via the new moov's timescales (which
|
|
513
|
+
// Compute the normalized reference position the per-track offsets derive from when this segmenter continues earlier counters. computeTimelinePosition,
|
|
514
|
+
// the timeline conversion in the parser module, converts the counters to seconds via the new moov's timescales (which the remux keeps consistent across
|
|
515
|
+
// captures), then averages across tracks to produce a single shared position - the same position the resume line reports from persisted counters.
|
|
495
516
|
// Deriving all per-track offsets from this shared reference eliminates the inter-track bias that per-track independent offsets would freeze from the old
|
|
496
|
-
// segmenter's A-V jitter at the moment of replacement.
|
|
497
|
-
if (initialTrackTimestamps
|
|
498
|
-
|
|
499
|
-
let count = 0;
|
|
500
|
-
for (const [trackId, timestamp] of initialTrackTimestamps) {
|
|
501
|
-
const timescale = state.trackTimescales.get(trackId);
|
|
502
|
-
if (timescale) {
|
|
503
|
-
totalSec += Number(timestamp) / timescale;
|
|
504
|
-
count++;
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
if (count > 0) {
|
|
508
|
-
state.normalizedReferencePositionSec = totalSec / count;
|
|
509
|
-
}
|
|
517
|
+
// segmenter's A-V jitter at the moment of replacement. A null result, when no track carries both a counter and a timescale, leaves the reference unset.
|
|
518
|
+
if (initialTrackTimestamps) {
|
|
519
|
+
state.normalizedReferencePositionSec = computeTimelinePosition({ timescales: state.trackTimescales, trackTimestamps: initialTrackTimestamps });
|
|
510
520
|
}
|
|
511
|
-
// When preroll is active, override the normalized reference position with the total preroll duration in seconds. This makes
|
|
512
|
-
// continue from where the preroll ended, eliminating the PTS discontinuity at the preroll-to-live boundary. Without this,
|
|
513
|
-
// PTS 0, causing CDVR's remuxer to detect a PTS reset and apply a sentinel pts_offset (1152921504606840.75) that breaks the Apple TV's timeline
|
|
514
|
-
// With continuous PTS, the remuxer sees smooth progression and computes a normal offset. This overrides any resume-based reference because the
|
|
515
|
-
// preroll PTS timeline takes precedence over the old session's timestamps.
|
|
521
|
+
// When preroll is active, override the normalized reference position with the total preroll duration in seconds. This makes the remuxed capture's real
|
|
522
|
+
// content PTS continue from where the preroll ended, eliminating the PTS discontinuity at the preroll-to-live boundary. Without this, the remuxed capture
|
|
523
|
+
// starts at PTS 0, causing CDVR's remuxer to detect a PTS reset and apply a sentinel pts_offset (1152921504606840.75) that breaks the Apple TV's timeline
|
|
524
|
+
// display. With continuous PTS, the remuxer sees smooth progression and computes a normal offset. This overrides any resume-based reference because the
|
|
525
|
+
// new session's preroll PTS timeline takes precedence over the old session's timestamps.
|
|
516
526
|
if (state.prerollSegmentCount > 0) {
|
|
517
527
|
state.normalizedReferencePositionSec = getPrerollTotalDurationSec(state.prerollCodec);
|
|
518
528
|
}
|
|
@@ -534,21 +544,23 @@ export function createFMP4Segmenter(options) {
|
|
|
534
544
|
}
|
|
535
545
|
else {
|
|
536
546
|
const elapsedMs = clock.now() - state.segmentStartTime;
|
|
537
|
-
const targetMs =
|
|
547
|
+
const targetMs = segmentDuration * 1000;
|
|
538
548
|
if (elapsedMs >= targetMs) {
|
|
539
549
|
outputSegment();
|
|
540
550
|
}
|
|
541
551
|
}
|
|
542
552
|
}
|
|
543
|
-
// Rewrite tfdt.baseMediaDecodeTime in each traf by adding a constant per-track offset to
|
|
544
|
-
// inter-track sync rather than regenerating timestamps from trun durations (which accumulates drift). The offset is 0
|
|
545
|
-
//
|
|
546
|
-
//
|
|
547
|
-
//
|
|
553
|
+
// Rewrite tfdt.baseMediaDecodeTime in each traf by adding a constant per-track offset to the remux's original values. This preserves the remux's
|
|
554
|
+
// wall-clock-based inter-track sync rather than regenerating timestamps from trun durations (which accumulates drift). The offset is 0 when the segmenter
|
|
555
|
+
// continues no counters and has no preroll (pure pass-through). When it continues earlier counters (a tab replacement or a resume) or follows a preroll,
|
|
556
|
+
// offsets are derived from a normalized reference position (the shared position in seconds every track anchors to) to eliminate inter-track bias - see
|
|
557
|
+
// normalizedReferencePositionSec.
|
|
558
|
+
// Wrapped in try/catch so a malformed moof never crashes the segmenter - the segment passes through with the remux's original timestamps, which is better
|
|
559
|
+
// than dropping it entirely.
|
|
548
560
|
try {
|
|
549
561
|
const trackResults = offsetMoofTimestamps(box.data, state.trackOffsets);
|
|
550
562
|
// Two-pass offset handling. The first call above applied every already-known track's stored offset in place, leaving any track first seen in this moof at
|
|
551
|
-
//
|
|
563
|
+
// the remux's original tfdt (an absent trackId is a 0n no-op write). This loop computes and stores each newly seen track's offset and records it in newOffsets -
|
|
552
564
|
// the offsets finalized this moof, and only those. The corrective call below applies exactly newOffsets, so a track the first call already offset stays
|
|
553
565
|
// untouched (absent from newOffsets, a 0n no-op) while a track initialized here is offset exactly once. No track's offset can be applied twice regardless of
|
|
554
566
|
// how tracks stagger their first trafs across moofs.
|
|
@@ -559,8 +571,8 @@ export function createFMP4Segmenter(options) {
|
|
|
559
571
|
const initialValue = initialTrackTimestamps?.get(trackId);
|
|
560
572
|
const timescale = state.trackTimescales.get(trackId);
|
|
561
573
|
let offset = 0n;
|
|
562
|
-
// Compute the per-track offset. When a normalized reference position is available (
|
|
563
|
-
// the shared reference to eliminate inter-track bias. Otherwise fall back to
|
|
574
|
+
// Compute the per-track offset. When a normalized reference position is available (continued counters or a preroll, with valid timescales), derive
|
|
575
|
+
// the offset from the shared reference to eliminate inter-track bias. Otherwise fall back to the track's own continued counter, or to 0 when it has none.
|
|
564
576
|
if ((state.normalizedReferencePositionSec !== null) && timescale) {
|
|
565
577
|
offset = BigInt(Math.round(state.normalizedReferencePositionSec * timescale)) - result.originalTfdt;
|
|
566
578
|
}
|
|
@@ -573,11 +585,11 @@ export function createFMP4Segmenter(options) {
|
|
|
573
585
|
if (offset !== 0n) {
|
|
574
586
|
needsRewrite = true;
|
|
575
587
|
}
|
|
576
|
-
LOG.debug("streaming:segmenter", "Initialized offset for track %d: %s (initial=%s,
|
|
588
|
+
LOG.debug("streaming:segmenter", "Initialized offset for track %d: %s (initial=%s, remux=%s).", trackId, String(offset), String(initialValue ?? 0n), String(result.originalTfdt));
|
|
577
589
|
}
|
|
578
590
|
}
|
|
579
|
-
// Corrective rewrite, scoped to the tracks initialized this moof. Those tracks still hold
|
|
580
|
-
// single re-call with newOffsets applies each of their offsets exactly once. Already-known tracks are absent from newOffsets and pass through as 0n no-op
|
|
591
|
+
// Corrective rewrite, scoped to the tracks initialized this moof. Those tracks still hold the remux's original tfdt (the first call left them at 0n), so
|
|
592
|
+
// this single re-call with newOffsets applies each of their offsets exactly once. Already-known tracks are absent from newOffsets and pass through as 0n no-op
|
|
581
593
|
// writes, so they cannot be offset a second time. Skipped entirely when no newly initialized track carries a nonzero offset.
|
|
582
594
|
if (needsRewrite) {
|
|
583
595
|
offsetMoofTimestamps(box.data, newOffsets);
|
|
@@ -587,11 +599,11 @@ export function createFMP4Segmenter(options) {
|
|
|
587
599
|
if ((state.videoTrackId !== null) && trackResults.has(state.videoTrackId)) {
|
|
588
600
|
state.videoTrafsInCurrentSegment = true;
|
|
589
601
|
}
|
|
590
|
-
// Track "next expected" for
|
|
602
|
+
// Track "next expected" for the continuity snapshot a successor reads and the resume state getTrackTimestamps() persists, and accumulate durations for EXTINF.
|
|
591
603
|
for (const [trackId, result] of trackResults) {
|
|
592
604
|
const trackOffset = state.trackOffsets.get(trackId) ?? 0n;
|
|
593
605
|
state.trackTimestamps.set(trackId, result.originalTfdt + trackOffset + result.duration);
|
|
594
|
-
// Accumulate duration for media-time EXTINF computation. No sanity check needed -
|
|
606
|
+
// Accumulate duration for media-time EXTINF computation. No sanity check needed - the remux's trun durations are trusted.
|
|
595
607
|
if (result.duration > 0n) {
|
|
596
608
|
const prev = state.segmentTrackDurations.get(trackId) ?? 0n;
|
|
597
609
|
state.segmentTrackDurations.set(trackId, prev + result.duration);
|
|
@@ -641,7 +653,7 @@ export function createFMP4Segmenter(options) {
|
|
|
641
653
|
parser.push(chunk);
|
|
642
654
|
}
|
|
643
655
|
catch (error) {
|
|
644
|
-
onError(
|
|
656
|
+
onError(toError(error));
|
|
645
657
|
}
|
|
646
658
|
}
|
|
647
659
|
/**
|
|
@@ -670,9 +682,15 @@ export function createFMP4Segmenter(options) {
|
|
|
670
682
|
parser.flush();
|
|
671
683
|
onError(error);
|
|
672
684
|
}
|
|
673
|
-
// The
|
|
674
|
-
//
|
|
685
|
+
// The live continuity reads, named once so the individual getters and the snapshot below are the same reads rather than two sets that could drift. Each copies
|
|
686
|
+
// what it returns, so a caller holding a snapshot is unaffected by the segments this segmenter goes on to produce.
|
|
675
687
|
const readInitVersion = () => state.initVersion;
|
|
688
|
+
const readSegmentHistory = () => ({
|
|
689
|
+
discontinuityIndices: new Set(state.discontinuityIndices),
|
|
690
|
+
prunedDiscontinuityCount: state.prunedDiscontinuityCount,
|
|
691
|
+
segmentDurations: new Map(state.segmentDurations),
|
|
692
|
+
segmentTimestamps: new Map(state.segmentTimestamps)
|
|
693
|
+
});
|
|
676
694
|
const readSegmentIndex = () => state.segmentIndex;
|
|
677
695
|
const readSessionStats = () => ({ ...state.sessionStats });
|
|
678
696
|
const readTrackTimestamps = () => new Map(state.trackTimestamps);
|
|
@@ -680,10 +698,12 @@ export function createFMP4Segmenter(options) {
|
|
|
680
698
|
getContinuitySnapshot: () => ({
|
|
681
699
|
initialTrackTimestamps: readTrackTimestamps(),
|
|
682
700
|
previousInitSegment: state.initSegment,
|
|
701
|
+
priorSegmentHistory: readSegmentHistory(),
|
|
683
702
|
priorSessionStats: readSessionStats(),
|
|
684
703
|
startingInitVersion: readInitVersion(),
|
|
685
704
|
startingSegmentIndex: readSegmentIndex()
|
|
686
705
|
}),
|
|
706
|
+
getDiscontinuityCount: () => state.prunedDiscontinuityCount + state.discontinuityIndices.size,
|
|
687
707
|
getInitSegment: () => state.initSegment,
|
|
688
708
|
getInitVersion: readInitVersion,
|
|
689
709
|
getKeyframeStats: () => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fmp4Segmenter.js","sourceRoot":"","sources":["../../src/streaming/fmp4Segmenter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fmp4Segmenter.js","sourceRoot":"","sources":["../../src/streaming/fmp4Segmenter.ts"],"names":[],"mappings":"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"}
|
package/dist/streaming/hls.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { SetupFailureStatus } from "./registry.ts";
|
|
2
2
|
import type { Nullable, ResolvedChannel, ResolvedSiteProfile } from "../types/index.ts";
|
|
3
3
|
import type { Request, Response } from "express";
|
|
4
|
+
import type { ResumeData, ResumePosition } from "./hlsResume.ts";
|
|
4
5
|
import { createPageWithCapture } from "./setup.ts";
|
|
5
6
|
import { unregisterManagedPage } from "../browser/index.ts";
|
|
6
|
-
import type { ResumeData } from "./hlsResume.ts";
|
|
7
7
|
import type { SegmenterContinuity } from "./fmp4Segmenter.ts";
|
|
8
8
|
import type { TabReplacementResult } from "./recovery.ts";
|
|
9
9
|
/**
|
|
@@ -97,7 +97,8 @@ export declare function ensureChannelStream(channelName: string, req: Request, r
|
|
|
97
97
|
export declare function handleHLSPlaylist(req: Request, res: Response): Promise<void>;
|
|
98
98
|
/**
|
|
99
99
|
* Handles HLS segment requests. Returns the requested segment from memory. Supports the fMP4 initialization segment (init.mp4), capture-mode media segments
|
|
100
|
-
* (.m4s), native-mode
|
|
100
|
+
* (.m4s), native-mode media segments (.ts for an MPEG-TS source, .m4s for an fMP4 one) and the named initialization segments an fMP4 relay serves, and audio
|
|
101
|
+
* segments for streams with separate audio renditions.
|
|
101
102
|
*
|
|
102
103
|
* Route: GET /hls/:name/:segment
|
|
103
104
|
*
|
|
@@ -151,16 +152,16 @@ export interface TabReplacementDeps {
|
|
|
151
152
|
*
|
|
152
153
|
* @param numericStreamId - The stream's numeric ID for registry lookups.
|
|
153
154
|
* @param streamId - The stream's string ID for logging.
|
|
154
|
-
* @param channelName - The channel name (or synthetic ad-hoc key like "play-a1b2c3d4") used as the store key for error callbacks and termination.
|
|
155
155
|
* @param url - The URL to navigate to.
|
|
156
156
|
* @param profile - The site profile for video handling.
|
|
157
157
|
* @param metadataComment - Optional comment to embed in FFmpeg output metadata.
|
|
158
|
-
* @param onCircuitBreak -
|
|
158
|
+
* @param onCircuitBreak - The stream's circuit-breaker callback, which the replacement pipeline's FFmpeg error handler reaches only after the swap has committed.
|
|
159
159
|
* @param deps - The injected establishment collaborators; defaults to defaultTabReplacementDeps. Threaded so a test drives the real handler - its phase tracking,
|
|
160
160
|
* its discard path, and the swap itself - against a substituted establishment rather than a live Chrome.
|
|
161
|
-
* @returns A handler
|
|
161
|
+
* @returns A handler that performs the replacement and resolves to the new page and context, or to null when the stream is gone or the attempt was abandoned
|
|
162
|
+
* before the swap.
|
|
162
163
|
*/
|
|
163
|
-
export declare function createTabReplacementHandler(numericStreamId: number, streamId: string,
|
|
164
|
+
export declare function createTabReplacementHandler(numericStreamId: number, streamId: string, url: string, profile: ResolvedSiteProfile, metadataComment: string | undefined, onCircuitBreak: () => void, deps?: TabReplacementDeps): () => Promise<Nullable<TabReplacementResult>>;
|
|
164
165
|
/**
|
|
165
166
|
* Options for initializing a stream.
|
|
166
167
|
*/
|
|
@@ -177,7 +178,7 @@ interface InitializeStreamOptions {
|
|
|
177
178
|
url: string;
|
|
178
179
|
}
|
|
179
180
|
/**
|
|
180
|
-
* Initializes a new HLS stream. This is the blocking wrapper used by callers that
|
|
181
|
+
* Initializes a new HLS stream. This is the blocking wrapper used by callers that must wait for setup to finish.
|
|
181
182
|
* Registers a pending stream entry with the channel-to-stream mapping, then awaits the full async setup.
|
|
182
183
|
*
|
|
183
184
|
* For the non-blocking path used by HLS playlist requests, see registerPendingStream() + completeStreamSetup() called from ensureChannelStream().
|
|
@@ -204,21 +205,27 @@ export declare function handleSetupFailure(numericStreamId: number, channelName:
|
|
|
204
205
|
* What a resuming segmenter is told to continue from.
|
|
205
206
|
*/
|
|
206
207
|
export interface BuildResumeContinuityOptions {
|
|
207
|
-
readonly baseSegmentIndex: number;
|
|
208
208
|
readonly prerollSegmentCount: number;
|
|
209
|
+
readonly registeredPosition: Nullable<ResumePosition>;
|
|
209
210
|
readonly resumeData: Nullable<ResumeData>;
|
|
210
211
|
}
|
|
211
212
|
/**
|
|
212
|
-
* Derives what a segmenter continues from, which on a fresh stream is nothing at all.
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
213
|
+
* Derives what a segmenter continues from, which on a fresh stream is nothing at all. The position it continues from is the registration's when a preroll
|
|
214
|
+
* precedes it, because the preroll playlist served from that position, and the creation's own peek otherwise, there being no preroll playlist to agree with. A
|
|
215
|
+
* resume carries the prior session's timestamps and init version, and its init segment only when no preroll window precedes it - the preroll init differs from
|
|
216
|
+
* the real one, so a byte match there would suppress a discontinuity the boundary genuinely needs. Session statistics are deliberately absent: a resume from disk
|
|
217
|
+
* has none, and inventing an empty set would tell the segmenter a live prior session is continuing and count a tab replacement that never happened. The
|
|
218
|
+
* starting index accounts for both the resume position and the preroll segment range whenever either contributes one.
|
|
219
|
+
*
|
|
220
|
+
* A resume also carries a segment history that lists no segment and holds the persisted discontinuity count as pruned, because every earlier marker is already
|
|
221
|
+
* off the front of a window that starts empty. Behind a preroll the history also holds the marker the preroll playlist put on the preroll's first index, which is
|
|
222
|
+
* the persisted index, because the preroll opens a new timeline there whether or not its playlist was served. A resume with neither a preroll nor a count above
|
|
223
|
+
* zero carries no history.
|
|
217
224
|
*
|
|
218
225
|
* Each member is present only when this resume genuinely carries it, because the segmenter reads presence rather than value: an absent member and a member set
|
|
219
226
|
* to an empty or zero stand-in mean different things to it.
|
|
220
227
|
*
|
|
221
|
-
* @param options - The resume record and the preroll accounting to derive from.
|
|
228
|
+
* @param options - The resume record, the registered position, and the preroll accounting to derive from.
|
|
222
229
|
* @returns The continuity the segmenter is constructed with.
|
|
223
230
|
*/
|
|
224
231
|
export declare function buildResumeContinuity(options: BuildResumeContinuityOptions): SegmenterContinuity;
|