prismcast 1.5.2 → 1.6.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/README.md +44 -28
- package/dist/app.d.ts +5 -0
- package/dist/app.js +63 -5
- package/dist/app.js.map +1 -1
- package/dist/browser/channelSelection.js +14 -2
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/index.d.ts +23 -9
- package/dist/browser/index.js +205 -88
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/precaching.js +3 -3
- package/dist/browser/precaching.js.map +1 -1
- package/dist/browser/tuning/directv.js +13 -0
- package/dist/browser/tuning/directv.js.map +1 -1
- package/dist/browser/tuning/fox.js +12 -0
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/hbo.js +11 -0
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.js +23 -0
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/sling.js +34 -4
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/spectrum.js +12 -0
- package/dist/browser/tuning/spectrum.js.map +1 -1
- package/dist/browser/tuning/xfinity.d.ts +2 -0
- package/dist/browser/tuning/xfinity.js +607 -0
- package/dist/browser/tuning/xfinity.js.map +1 -0
- package/dist/browser/tuning/youtubeTv.js +14 -0
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +2 -0
- package/dist/browser/video.js +99 -17
- package/dist/browser/video.js.map +1 -1
- package/dist/channels/index.js +173 -56
- package/dist/channels/index.js.map +1 -1
- package/dist/config/health.d.ts +28 -28
- package/dist/config/health.js +52 -52
- package/dist/config/health.js.map +1 -1
- package/dist/config/paths.d.ts +12 -0
- package/dist/config/paths.js +16 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/profiles.d.ts +3 -2
- package/dist/config/profiles.js +45 -34
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/providers.d.ts +7 -0
- package/dist/config/providers.js +14 -0
- package/dist/config/providers.js.map +1 -1
- package/dist/config/sites.d.ts +28 -0
- package/dist/config/sites.js +93 -122
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +3 -0
- package/dist/config/userChannels.js +10 -3
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +1 -0
- package/dist/config/userConfig.js +4 -0
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +0 -1
- package/dist/config/userProfiles.js +18 -10
- package/dist/config/userProfiles.js.map +1 -1
- package/dist/index.js +16 -7
- package/dist/index.js.map +1 -1
- package/dist/native/decrypt.d.ts +32 -0
- package/dist/native/decrypt.js +85 -0
- package/dist/native/decrypt.js.map +1 -0
- package/dist/native/index.d.ts +58 -0
- package/dist/native/index.js +341 -0
- package/dist/native/index.js.map +1 -0
- package/dist/native/intercept.d.ts +35 -0
- package/dist/native/intercept.js +184 -0
- package/dist/native/intercept.js.map +1 -0
- package/dist/native/probe.d.ts +48 -0
- package/dist/native/probe.js +270 -0
- package/dist/native/probe.js.map +1 -0
- package/dist/native/proxy.d.ts +52 -0
- package/dist/native/proxy.js +904 -0
- package/dist/native/proxy.js.map +1 -0
- package/dist/routes/config/channels/table.js +19 -25
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/providers.js +4 -4
- package/dist/routes/config/providers.js.map +1 -1
- package/dist/routes/debug.js +5 -5
- package/dist/routes/debug.js.map +1 -1
- package/dist/routes/hls.js +12 -2
- package/dist/routes/hls.js.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.js +3 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/root/content.js +80 -20
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/scripts/status.js +14 -13
- package/dist/routes/root/scripts/status.js.map +1 -1
- package/dist/routes/root/styles.js +4 -2
- package/dist/routes/root/styles.js.map +1 -1
- package/dist/streaming/fmp4Segmenter.d.ts +3 -0
- package/dist/streaming/fmp4Segmenter.js +143 -42
- package/dist/streaming/fmp4Segmenter.js.map +1 -1
- package/dist/streaming/hls.d.ts +24 -19
- package/dist/streaming/hls.js +486 -261
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.d.ts +7 -0
- package/dist/streaming/hlsResume.js +22 -2
- package/dist/streaming/hlsResume.js.map +1 -1
- package/dist/streaming/hlsSegments.d.ts +42 -2
- package/dist/streaming/hlsSegments.js +109 -8
- package/dist/streaming/hlsSegments.js.map +1 -1
- package/dist/streaming/lifecycle.js +20 -2
- package/dist/streaming/lifecycle.js.map +1 -1
- package/dist/streaming/monitor.d.ts +1 -0
- package/dist/streaming/monitor.js +369 -21
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/mp4Parser.d.ts +52 -6
- package/dist/streaming/mp4Parser.js +156 -30
- package/dist/streaming/mp4Parser.js.map +1 -1
- package/dist/streaming/mpegts.d.ts +2 -2
- package/dist/streaming/mpegts.js +156 -109
- package/dist/streaming/mpegts.js.map +1 -1
- package/dist/streaming/playlistBuilder.d.ts +38 -0
- package/dist/streaming/playlistBuilder.js +66 -0
- package/dist/streaming/playlistBuilder.js.map +1 -0
- package/dist/streaming/preroll.d.ts +106 -0
- package/dist/streaming/preroll.js +373 -0
- package/dist/streaming/preroll.js.map +1 -0
- package/dist/streaming/pretune.d.ts +8 -0
- package/dist/streaming/pretune.js +226 -0
- package/dist/streaming/pretune.js.map +1 -0
- package/dist/streaming/registry.d.ts +24 -3
- package/dist/streaming/registry.js +23 -1
- package/dist/streaming/registry.js.map +1 -1
- package/dist/streaming/setup.d.ts +7 -0
- package/dist/streaming/setup.js +27 -6
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/showInfo.d.ts +24 -0
- package/dist/streaming/showInfo.js +55 -3
- package/dist/streaming/showInfo.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +6 -4
- package/dist/streaming/statusEmitter.js +9 -3
- package/dist/streaming/statusEmitter.js.map +1 -1
- package/dist/types/channels.d.ts +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/profiles.d.ts +8 -1
- package/dist/types/selection.d.ts +4 -1
- package/dist/types/streaming.d.ts +7 -0
- package/dist/utils/chromeFetch.d.ts +20 -0
- package/dist/utils/chromeFetch.js +43 -0
- package/dist/utils/chromeFetch.js.map +1 -0
- package/dist/utils/debugFilter.js +15 -0
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/delay.d.ts +16 -0
- package/dist/utils/delay.js +15 -1
- package/dist/utils/delay.js.map +1 -1
- package/dist/utils/ffmpeg.d.ts +1 -7
- package/dist/utils/ffmpeg.js +86 -127
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/pid.d.ts +40 -0
- package/dist/utils/pid.js +83 -0
- package/dist/utils/pid.js.map +1 -0
- package/package.json +5 -5
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
*
|
|
3
3
|
* fmp4Segmenter.ts: fMP4 HLS segmentation for PrismCast.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { buildPrerollEntries, computePrerollWindow, getPrerollTotalDurationSec } from "./preroll.js";
|
|
6
|
+
import { createMP4BoxParser, detectMoofKeyframe, offsetMoofTimestamps, parseMoovCodecConfig, parseMoovTrackInfo } from "./mp4Parser.js";
|
|
6
7
|
import { getSegmentCount, storeInitSegment, storeSegment, updatePlaylist } from "./hlsSegments.js";
|
|
7
8
|
import { CONFIG } from "../config/index.js";
|
|
8
9
|
import { LOG } from "../utils/index.js";
|
|
10
|
+
import { buildPlaylist } from "./playlistBuilder.js";
|
|
11
|
+
import { getStream } from "./registry.js";
|
|
9
12
|
/* This module transforms a puppeteer-stream MP4 capture into HLS fMP4 segments. The overall flow is: (1) receive MP4 data from puppeteer-stream (H.264 + AAC from
|
|
10
13
|
* either native capture or FFmpeg transcoding), (2) parse MP4 box structure to identify ftyp + moov (initialization segment) and moof + mdat pairs (media fragments),
|
|
11
14
|
* (3) store init segment and accumulate media fragments into segments, and (4) generate and update the m3u8 playlist.
|
|
@@ -98,7 +101,7 @@ export function formatSessionStatsSummary(stats, segmentCount) {
|
|
|
98
101
|
* @returns The segmenter interface with pipe, stop, and keyframe stats methods.
|
|
99
102
|
*/
|
|
100
103
|
export function createFMP4Segmenter(options) {
|
|
101
|
-
const { initialTrackTimestamps, onError, onStop, pendingDiscontinuity, previousInitSegment, priorSessionStats, startingInitVersion, startingSegmentIndex, streamId } = options;
|
|
104
|
+
const { initialTrackTimestamps, onError, onStop, pendingDiscontinuity, prerollBaseUrl, prerollSegmentCount, previousInitSegment, priorSessionStats, startingInitVersion, startingSegmentIndex, streamId } = options;
|
|
102
105
|
// Initialize state.
|
|
103
106
|
const state = {
|
|
104
107
|
discontinuityIndices: new Set(),
|
|
@@ -111,16 +114,20 @@ export function createFMP4Segmenter(options) {
|
|
|
111
114
|
initVersion: startingInitVersion ?? 0,
|
|
112
115
|
keyframeCount: 0,
|
|
113
116
|
lastKeyframeTime: null,
|
|
117
|
+
lastSegmentHasVideo: null,
|
|
114
118
|
lastSegmentSize: 0,
|
|
115
119
|
maxKeyframeIntervalMs: 0,
|
|
116
120
|
minKeyframeIntervalMs: Infinity,
|
|
117
121
|
nonKeyframeCount: 0,
|
|
118
122
|
normalizedReferencePositionSec: null,
|
|
119
123
|
pendingDiscontinuity: pendingDiscontinuity ?? false,
|
|
124
|
+
prerollBaseUrl: prerollBaseUrl ?? null,
|
|
125
|
+
prerollSegmentCount: prerollSegmentCount ?? 0,
|
|
120
126
|
segmentDurations: new Map(),
|
|
121
127
|
segmentFirstMoofChecked: false,
|
|
122
128
|
segmentIndex: startingSegmentIndex ?? 0,
|
|
123
129
|
segmentStartTime: Date.now(),
|
|
130
|
+
segmentTimestamps: new Map(),
|
|
124
131
|
segmentTrackDurations: new Map(),
|
|
125
132
|
segmentsWithoutLeadingKeyframe: 0,
|
|
126
133
|
sessionStats: priorSessionStats ? { ...priorSessionStats, tabReplacementCount: priorSessionStats.tabReplacementCount + 1 } :
|
|
@@ -130,56 +137,108 @@ export function createFMP4Segmenter(options) {
|
|
|
130
137
|
trackOffsets: new Map(),
|
|
131
138
|
trackOffsetsInitialized: new Set(),
|
|
132
139
|
trackTimescales: new Map(),
|
|
133
|
-
trackTimestamps: initialTrackTimestamps ? new Map(initialTrackTimestamps) : new Map()
|
|
140
|
+
trackTimestamps: initialTrackTimestamps ? new Map(initialTrackTimestamps) : new Map(),
|
|
141
|
+
videoTrackId: null,
|
|
142
|
+
videoTrafsInCurrentSegment: null
|
|
134
143
|
};
|
|
135
144
|
// Reference to the input stream for cleanup.
|
|
136
145
|
let inputStream = null;
|
|
137
146
|
/**
|
|
138
|
-
* Generates the m3u8 playlist content.
|
|
147
|
+
* Generates the m3u8 playlist content. When preroll metadata is present (prerollSegmentCount > 0), the playlist includes both preroll entries (served from global
|
|
148
|
+
* /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
|
|
149
|
+
* 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
|
|
150
|
+
* segments accumulate, preroll entries fall off the window naturally and the playlist becomes purely real content with zero overhead.
|
|
151
|
+
*
|
|
152
|
+
* Delegates all m3u8 formatting to the shared buildPlaylist() function. Preroll windowing and entry construction are handled by the compositor functions in
|
|
153
|
+
* preroll.ts. This function is responsible for constructing real segment entries from the segmenter's state and computing the discontinuity sequence from the
|
|
154
|
+
* segmenter's discontinuity history.
|
|
139
155
|
*/
|
|
140
156
|
function generatePlaylist() {
|
|
141
|
-
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
157
|
+
const realInitMapUri = "init.mp4?v=" + String(state.initVersion);
|
|
158
|
+
// Check whether the preroll timer has fired and the client is actually watching preroll. The segment index offset (starting at prerollSegmentCount) is always
|
|
159
|
+
// applied structurally, but preroll entries are only included in the playlist when the deferred timer has fired — indicated by prerollStartTime being set on the
|
|
160
|
+
// stream's HLS state. This is the same dynamic check the native proxy uses in its generatePlaylist(). Without this, fast capture streams (tuning before the
|
|
161
|
+
// preroll delay elapses) would include unnecessary preroll entries in their first playlists.
|
|
162
|
+
const stream = getStream(streamId);
|
|
163
|
+
const prerollActive = (state.prerollSegmentCount > 0) && (stream?.hls.prerollStartTime !== null) && (stream?.hls.prerollStartTime !== undefined);
|
|
164
|
+
// Compute the sliding window start index. When preroll is active, the compositor handles the three-way max (floor, sliding window, preroll cap). Without
|
|
165
|
+
// preroll (or when the timer hasn't fired), the standard sliding window rule applies.
|
|
166
|
+
const realSegmentCount = getSegmentCount(streamId);
|
|
167
|
+
let startIndex;
|
|
168
|
+
if (prerollActive) {
|
|
169
|
+
startIndex = computePrerollWindow({
|
|
170
|
+
currentSegmentIndex: state.segmentIndex,
|
|
171
|
+
maxSegments: CONFIG.hls.maxSegments,
|
|
172
|
+
prerollSegmentCount: state.prerollSegmentCount,
|
|
173
|
+
realSegmentCount
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
startIndex = Math.max(0, state.segmentIndex - Math.min(realSegmentCount, CONFIG.hls.maxSegments));
|
|
150
178
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
//
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
179
|
+
// Build preroll entries for preroll indices still in the window. Only included when the deferred preroll timer has fired and the client is watching preroll.
|
|
180
|
+
let prerollEntries = [];
|
|
181
|
+
if (prerollActive && state.prerollBaseUrl && (startIndex < state.prerollSegmentCount)) {
|
|
182
|
+
prerollEntries = buildPrerollEntries({ baseUrl: state.prerollBaseUrl, extension: ".m4s", prerollSegmentCount: state.prerollSegmentCount, startIndex });
|
|
183
|
+
}
|
|
184
|
+
// Build real segment entries from the segmenter's state. Each entry carries its duration, optional discontinuity marker with init re-emission, and wall-clock
|
|
185
|
+
// timestamp for PROGRAM-DATE-TIME. The real range starts at either the window start (when no preroll) or the preroll segment count (when preroll entries cover
|
|
186
|
+
// the earlier indices).
|
|
187
|
+
const realEntries = [];
|
|
188
|
+
const realStartIndex = Math.max(startIndex, state.prerollSegmentCount);
|
|
189
|
+
for (let i = realStartIndex; i < state.segmentIndex; i++) {
|
|
190
|
+
const entry = {
|
|
191
|
+
duration: state.segmentDurations.get(i) ?? CONFIG.hls.segmentDuration,
|
|
192
|
+
url: "segment" + String(i) + ".m4s"
|
|
193
|
+
};
|
|
194
|
+
// Add discontinuity marker and re-emit the init segment reference at preroll-to-real boundaries and recovery events. The preroll-to-real boundary is handled
|
|
195
|
+
// via the existing pendingDiscontinuity mechanism — outputSegment() adds prerollSegmentCount to discontinuityIndices when the first real segment is output.
|
|
162
196
|
if (state.discontinuityIndices.has(i)) {
|
|
163
|
-
|
|
164
|
-
|
|
197
|
+
entry.discontinuity = true;
|
|
198
|
+
entry.mapUri = realInitMapUri;
|
|
199
|
+
}
|
|
200
|
+
// Emit PROGRAM-DATE-TIME for real segments using the recorded wall-clock timestamp. Intentionally omitted from preroll segments — preroll is synthetic
|
|
201
|
+
// placeholder content and assigning it wall-clock timestamps would create a backward time jump at the preroll-to-live boundary.
|
|
202
|
+
const timestamp = state.segmentTimestamps.get(i);
|
|
203
|
+
if (timestamp) {
|
|
204
|
+
entry.programDateTime = timestamp.toISOString();
|
|
165
205
|
}
|
|
166
|
-
|
|
167
|
-
// a hot restart with continuation).
|
|
168
|
-
const duration = state.segmentDurations.get(i) ?? CONFIG.hls.segmentDuration;
|
|
169
|
-
lines.push(["#EXTINF:", duration.toFixed(3), ","].join(""));
|
|
170
|
-
lines.push(["segment", String(i), ".m4s"].join(""));
|
|
206
|
+
realEntries.push(entry);
|
|
171
207
|
}
|
|
172
|
-
|
|
173
|
-
|
|
208
|
+
// Compute DISCONTINUITY-SEQUENCE: the count of discontinuities that have scrolled off the beginning of the playlist window. Only provided when discontinuities
|
|
209
|
+
// exist in the stream's history — when undefined, the builder omits the tag entirely.
|
|
210
|
+
let discontinuitySequence;
|
|
211
|
+
if (state.discontinuityIndices.size > 0) {
|
|
212
|
+
let discSeq = 0;
|
|
213
|
+
for (const idx of state.discontinuityIndices) {
|
|
214
|
+
if (idx < startIndex) {
|
|
215
|
+
discSeq++;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
discontinuitySequence = discSeq;
|
|
219
|
+
}
|
|
220
|
+
// Determine the initial MAP URI. When the window starts with preroll entries, use the preroll init segment. Otherwise, use the real init segment. The
|
|
221
|
+
// prerollBaseUrl is guaranteed non-null when prerollEntries is non-empty (guarded by the conditional above).
|
|
222
|
+
const initialMapUri = ((prerollEntries.length > 0) && state.prerollBaseUrl) ? (state.prerollBaseUrl + "/preroll/init.mp4") : realInitMapUri;
|
|
223
|
+
const entries = [...prerollEntries, ...realEntries];
|
|
224
|
+
return buildPlaylist({
|
|
225
|
+
discontinuitySequence,
|
|
226
|
+
initialMapUri,
|
|
227
|
+
mediaSequence: startIndex,
|
|
228
|
+
targetDuration: CONFIG.hls.segmentDuration,
|
|
229
|
+
version: 7
|
|
230
|
+
}, entries);
|
|
174
231
|
}
|
|
175
232
|
/**
|
|
176
|
-
* Resets per-segment tracking state. Called after outputting a segment. Extracted to avoid duplication of the same
|
|
233
|
+
* Resets per-segment tracking state. Called after outputting a segment. Extracted to avoid duplication of the same five assignments.
|
|
177
234
|
*/
|
|
178
235
|
function resetSegmentTracking() {
|
|
179
236
|
state.fragmentBuffer = [];
|
|
180
237
|
state.segmentFirstMoofChecked = false;
|
|
181
238
|
state.segmentStartTime = Date.now();
|
|
182
239
|
state.segmentTrackDurations = new Map();
|
|
240
|
+
// Reset video traf tracking for the next segment. Stays null if the video trackId is unknown; otherwise starts false until a video traf is seen.
|
|
241
|
+
state.videoTrafsInCurrentSegment = (state.videoTrackId !== null) ? false : null;
|
|
183
242
|
}
|
|
184
243
|
/**
|
|
185
244
|
* Outputs the current fragment buffer as a segment.
|
|
@@ -209,6 +268,7 @@ export function createFMP4Segmenter(options) {
|
|
|
209
268
|
}
|
|
210
269
|
const actualDuration = Math.max(0.1, (mediaDuration > 0) ? mediaDuration : ((Date.now() - state.segmentStartTime) / 1000));
|
|
211
270
|
state.segmentDurations.set(state.segmentIndex, actualDuration);
|
|
271
|
+
state.segmentTimestamps.set(state.segmentIndex, new Date());
|
|
212
272
|
// Compute inter-track sync spread for session statistics. This measures the timing difference between audio and video tracks at each segment boundary. Only
|
|
213
273
|
// computed when both tracks have known timescales and active timestamp counters.
|
|
214
274
|
if (state.trackTimescales.size >= 2) {
|
|
@@ -243,17 +303,19 @@ export function createFMP4Segmenter(options) {
|
|
|
243
303
|
// Combine all fragment data into a single segment.
|
|
244
304
|
const segmentData = Buffer.concat(state.fragmentBuffer);
|
|
245
305
|
const segmentName = ["segment", String(state.segmentIndex), ".m4s"].join("");
|
|
246
|
-
// Store the segment and update size for health monitoring.
|
|
306
|
+
// Store the segment and update size and track composition for health monitoring.
|
|
247
307
|
storeSegment(streamId, segmentName, segmentData);
|
|
308
|
+
state.lastSegmentHasVideo = state.videoTrafsInCurrentSegment;
|
|
248
309
|
state.lastSegmentSize = segmentData.length;
|
|
249
310
|
// Increment segment index and mark the first segment as emitted.
|
|
250
311
|
state.segmentIndex++;
|
|
251
312
|
state.firstSegmentEmitted = true;
|
|
252
|
-
// Prune duration entries outside the playlist sliding window to prevent unbounded growth.
|
|
313
|
+
// Prune duration and timestamp entries outside the playlist sliding window to prevent unbounded growth.
|
|
253
314
|
const pruneThreshold = Math.max(0, state.segmentIndex - CONFIG.hls.maxSegments);
|
|
254
315
|
for (const idx of state.segmentDurations.keys()) {
|
|
255
316
|
if (idx < pruneThreshold) {
|
|
256
317
|
state.segmentDurations.delete(idx);
|
|
318
|
+
state.segmentTimestamps.delete(idx);
|
|
257
319
|
}
|
|
258
320
|
}
|
|
259
321
|
// Clear the fragment buffer and reset segment-level tracking for the next segment.
|
|
@@ -323,23 +385,48 @@ export function createFMP4Segmenter(options) {
|
|
|
323
385
|
if (initChanged) {
|
|
324
386
|
state.initVersion++;
|
|
325
387
|
}
|
|
326
|
-
// Extract per-track
|
|
327
|
-
//
|
|
388
|
+
// Extract per-track metadata from the moov box in a single pass: timescales (for media-time EXTINF values) and handler types (for identifying the video
|
|
389
|
+
// track). The video trackId enables track-aware segment health monitoring — the monitor can distinguish dead capture pipelines (audio-only segments, no video
|
|
390
|
+
// trafs) from legitimate small segments produced by static content. Wrapped in try/catch so a malformed moov never prevents stream startup — EXTINF falls
|
|
391
|
+
// back to wall-clock time if parsing fails, and video traf tracking degrades gracefully to null.
|
|
328
392
|
try {
|
|
329
|
-
|
|
393
|
+
const trackInfo = parseMoovTrackInfo(box.data);
|
|
394
|
+
for (const [trackId, info] of trackInfo) {
|
|
395
|
+
state.trackTimescales.set(trackId, info.timescale);
|
|
396
|
+
if (info.handlerType === "vide") {
|
|
397
|
+
state.videoTrackId = trackId;
|
|
398
|
+
state.videoTrafsInCurrentSegment = false;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
330
401
|
if (state.trackTimescales.size === 0) {
|
|
331
|
-
LOG.debug("streaming:segmenter", "No track
|
|
402
|
+
LOG.debug("streaming:segmenter", "No track info found in moov. EXTINF will use wall-clock fallback.");
|
|
332
403
|
}
|
|
333
404
|
}
|
|
334
405
|
catch {
|
|
335
|
-
LOG.debug("streaming:segmenter", "Failed to parse moov
|
|
406
|
+
LOG.debug("streaming:segmenter", "Failed to parse moov track info. EXTINF will use wall-clock fallback.");
|
|
336
407
|
}
|
|
337
408
|
// Log init segment details for debugging timescale or codec issues.
|
|
338
409
|
const timescaleEntries = [];
|
|
339
410
|
for (const [trackId, timescale] of state.trackTimescales) {
|
|
340
411
|
timescaleEntries.push("track " + String(trackId) + "=" + String(timescale));
|
|
341
412
|
}
|
|
342
|
-
LOG.debug("streaming:segmenter", "Init segment received: %d bytes, version=%d, timescales=[%s].", initData.length, state.initVersion, timescaleEntries.join(", "));
|
|
413
|
+
LOG.debug("streaming:segmenter", "Init segment received: %d bytes, version=%d, timescales=[%s], videoTrackId=%s.", initData.length, state.initVersion, timescaleEntries.join(", "), String(state.videoTrackId ?? "unknown"));
|
|
414
|
+
// Extract and log codec configuration from the moov for diagnostics. These parameters are needed to match preroll encoding with Chrome's output so
|
|
415
|
+
// CDVR's transcoder sees consistent codec parameters across the preroll-to-real DISCONTINUITY boundary.
|
|
416
|
+
try {
|
|
417
|
+
const codecConfig = parseMoovCodecConfig(box.data);
|
|
418
|
+
if (codecConfig.video) {
|
|
419
|
+
LOG.debug("streaming:segmenter", "Video codec: profile=%d, profileCompatibility=0x%s, level=%d.", codecConfig.video.profile, codecConfig.video.profileCompatibility.toString(16).padStart(2, "0"), codecConfig.video.level);
|
|
420
|
+
}
|
|
421
|
+
if (codecConfig.audio) {
|
|
422
|
+
const sampleRates = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];
|
|
423
|
+
const sampleRate = sampleRates[codecConfig.audio.sampleRateIndex] ?? 0;
|
|
424
|
+
LOG.debug("streaming:segmenter", "Audio codec: objectType=%d (AAC-LC=%d), sampleRate=%dHz (index=%d).", codecConfig.audio.objectType, codecConfig.audio.objectType === 2 ? 1 : 0, sampleRate, codecConfig.audio.sampleRateIndex);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
catch {
|
|
428
|
+
LOG.debug("streaming:segmenter", "Failed to parse codec configuration from moov.");
|
|
429
|
+
}
|
|
343
430
|
// Compute the normalized reference position for tab replacement offset initialization. This converts the old segmenter's per-track timestamp counters
|
|
344
431
|
// to seconds via the new moov's timescales (which Chrome keeps consistent across captures), then averages across tracks to produce a single shared position.
|
|
345
432
|
// Deriving all per-track offsets from this shared reference eliminates the inter-track bias that per-track independent offsets would freeze from the old
|
|
@@ -358,6 +445,14 @@ export function createFMP4Segmenter(options) {
|
|
|
358
445
|
state.normalizedReferencePositionSec = totalSec / count;
|
|
359
446
|
}
|
|
360
447
|
}
|
|
448
|
+
// When preroll is active, override the normalized reference position with the total preroll duration in seconds. This makes Chrome's real content PTS
|
|
449
|
+
// continue from where the preroll ended, eliminating the PTS discontinuity at the preroll-to-live boundary. Without this, Chrome's MediaRecorder starts at
|
|
450
|
+
// 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 display.
|
|
451
|
+
// With continuous PTS, the remuxer sees smooth progression and computes a normal offset. This overrides any resume-based reference because the new session's
|
|
452
|
+
// preroll PTS timeline takes precedence over the old session's timestamps.
|
|
453
|
+
if (state.prerollSegmentCount > 0) {
|
|
454
|
+
state.normalizedReferencePositionSec = getPrerollTotalDurationSec();
|
|
455
|
+
}
|
|
361
456
|
// Suppress the discontinuity marker when codec parameters are unchanged (byte-identical init). This avoids an unnecessary decoder flush on the client.
|
|
362
457
|
if (!initChanged && state.pendingDiscontinuity) {
|
|
363
458
|
state.pendingDiscontinuity = false;
|
|
@@ -422,6 +517,11 @@ export function createFMP4Segmenter(options) {
|
|
|
422
517
|
if (needsRewrite) {
|
|
423
518
|
offsetMoofTimestamps(box.data, state.trackOffsets);
|
|
424
519
|
}
|
|
520
|
+
// Check whether this moof contains a traf for the video track. The trackResults map contains an entry for every traf in the moof, keyed by trackId.
|
|
521
|
+
// If the video trackId is present, we know the capture pipeline is producing video data (even if the frame content is static/low-motion).
|
|
522
|
+
if ((state.videoTrackId !== null) && trackResults.has(state.videoTrackId)) {
|
|
523
|
+
state.videoTrafsInCurrentSegment = true;
|
|
524
|
+
}
|
|
425
525
|
// Track "next expected" for future tab replacement handoff and accumulate durations for EXTINF.
|
|
426
526
|
for (const [trackId, result] of trackResults) {
|
|
427
527
|
const trackOffset = state.trackOffsets.get(trackId) ?? 0n;
|
|
@@ -517,6 +617,7 @@ export function createFMP4Segmenter(options) {
|
|
|
517
617
|
nonKeyframeCount: state.nonKeyframeCount,
|
|
518
618
|
segmentsWithoutLeadingKeyframe: state.segmentsWithoutLeadingKeyframe
|
|
519
619
|
}),
|
|
620
|
+
getLastSegmentHasVideo: () => state.lastSegmentHasVideo,
|
|
520
621
|
getLastSegmentSize: () => state.lastSegmentSize,
|
|
521
622
|
getSegmentIndex: () => state.segmentIndex,
|
|
522
623
|
getSessionStats: () => ({ ...state.sessionStats }),
|
|
@@ -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
|
@@ -33,8 +33,8 @@ export declare function sendValidationError(validation: {
|
|
|
33
33
|
statusCode: number;
|
|
34
34
|
}, res: Response): void;
|
|
35
35
|
/**
|
|
36
|
-
* Ensures a stream is running for a channel. If no stream exists,
|
|
37
|
-
*
|
|
36
|
+
* Ensures a stream is running for a channel. If no stream exists, registers a pending stream with a preroll playlist (when available) and launches async setup. If a
|
|
37
|
+
* stream already exists (either fully set up or pending), returns its ID immediately.
|
|
38
38
|
*
|
|
39
39
|
* The existing-stream check runs first so that ad-hoc streams (registered under synthetic keys like "play-a1b2c3d4") can be served without failing the
|
|
40
40
|
* "Channel not found" check.
|
|
@@ -45,11 +45,13 @@ export declare function sendValidationError(validation: {
|
|
|
45
45
|
* @param channelName - The channel key (or synthetic ad-hoc key) to stream.
|
|
46
46
|
* @param req - Express request object (for profile override and client IP).
|
|
47
47
|
* @param res - Express response object (for error responses).
|
|
48
|
-
* @returns The stream ID if a stream is running, or null if an error occurred.
|
|
48
|
+
* @returns The stream ID if a stream is running or pending, or null if an error occurred.
|
|
49
49
|
*/
|
|
50
50
|
export declare function ensureChannelStream(channelName: string, req: Request, res: Response): Promise<Nullable<number>>;
|
|
51
51
|
/**
|
|
52
|
-
* Handles HLS playlist requests.
|
|
52
|
+
* Handles HLS playlist requests. If a stream exists (fully set up or pending with preroll), returns the playlist immediately. If no stream exists and the preroll is
|
|
53
|
+
* available, registers a pending stream with a preroll playlist and returns it immediately while setup runs asynchronously. Falls back to blocking initialization when
|
|
54
|
+
* the preroll is not available.
|
|
53
55
|
*
|
|
54
56
|
* Route: GET /hls/:name/stream.m3u8
|
|
55
57
|
*
|
|
@@ -58,7 +60,8 @@ export declare function ensureChannelStream(channelName: string, req: Request, r
|
|
|
58
60
|
*/
|
|
59
61
|
export declare function handleHLSPlaylist(req: Request, res: Response): Promise<void>;
|
|
60
62
|
/**
|
|
61
|
-
* Handles HLS segment requests. Returns the requested segment from memory. Supports
|
|
63
|
+
* Handles HLS segment requests. Returns the requested segment from memory. Supports the fMP4 initialization segment (init.mp4), capture-mode media segments
|
|
64
|
+
* (.m4s), native-mode video segments (.ts), and audio segments for streams with separate audio renditions.
|
|
62
65
|
*
|
|
63
66
|
* Route: GET /hls/:name/:segment
|
|
64
67
|
*
|
|
@@ -66,6 +69,16 @@ export declare function handleHLSPlaylist(req: Request, res: Response): Promise<
|
|
|
66
69
|
* @param res - Express response object.
|
|
67
70
|
*/
|
|
68
71
|
export declare function handleHLSSegment(req: Request, res: Response): void;
|
|
72
|
+
/**
|
|
73
|
+
* Handles HLS variant playlist requests for streams with separate audio renditions. Serves video.m3u8 or audio.m3u8 depending on the requested playlist name.
|
|
74
|
+
* Returns 404 for streams that don't have separate audio.
|
|
75
|
+
*
|
|
76
|
+
* Route: GET /hls/:name/video.m3u8 and GET /hls/:name/audio.m3u8
|
|
77
|
+
*
|
|
78
|
+
* @param req - Express request object.
|
|
79
|
+
* @param res - Express response object.
|
|
80
|
+
*/
|
|
81
|
+
export declare function handleHLSVariantPlaylist(req: Request, res: Response): void;
|
|
69
82
|
/**
|
|
70
83
|
* Handles ad-hoc stream requests for arbitrary URLs. Generates a deterministic synthetic key from the URL and profile, starts a stream if none exists, and redirects
|
|
71
84
|
* to the standard HLS playlist path. This enables streaming URLs that are not predefined as channels.
|
|
@@ -79,14 +92,6 @@ export declare function handleHLSSegment(req: Request, res: Response): void;
|
|
|
79
92
|
* @param res - Express response object.
|
|
80
93
|
*/
|
|
81
94
|
export declare function handlePlayStream(req: Request, res: Response): Promise<void>;
|
|
82
|
-
/**
|
|
83
|
-
* Waits for a stream startup to complete without sending any HTTP responses. Used by MPEG-TS when headers have already been flushed and error responses cannot be
|
|
84
|
-
* sent.
|
|
85
|
-
*
|
|
86
|
-
* @param channelName - The channel name (or synthetic ad-hoc key) to poll.
|
|
87
|
-
* @returns The resolved stream ID on success, or null if startup failed or timed out.
|
|
88
|
-
*/
|
|
89
|
-
export declare function awaitStreamReadySilent(channelName: string): Promise<Nullable<number>>;
|
|
90
95
|
/**
|
|
91
96
|
* Options for initializing a stream.
|
|
92
97
|
*/
|
|
@@ -97,19 +102,19 @@ interface InitializeStreamOptions {
|
|
|
97
102
|
clientAddress: Nullable<string>;
|
|
98
103
|
clickSelector?: string;
|
|
99
104
|
clickToPlay?: boolean;
|
|
105
|
+
preTuned?: boolean;
|
|
106
|
+
mpegTsClient?: boolean;
|
|
100
107
|
profileOverride?: string;
|
|
101
108
|
url: string;
|
|
102
109
|
}
|
|
103
110
|
/**
|
|
104
|
-
* Initializes a new HLS stream. This is the
|
|
105
|
-
*
|
|
111
|
+
* Initializes a new HLS stream. This is the blocking wrapper used by callers that need to wait for the full setup to complete (pretune, MPEG-TS, ad-hoc play).
|
|
112
|
+
* Registers a pending stream entry with the channel-to-stream mapping, then awaits the full async setup.
|
|
106
113
|
*
|
|
107
|
-
*
|
|
108
|
-
* failure, the sentinel is removed and the error is re-thrown for the caller to handle HTTP error responses appropriately (channel-based streams need HDHomeRun
|
|
109
|
-
* headers, ad-hoc streams do not).
|
|
114
|
+
* For the non-blocking path used by HLS playlist requests, see registerPendingStream() + completeStreamSetup() called from ensureChannelStream().
|
|
110
115
|
*
|
|
111
116
|
* @param options - Stream initialization options.
|
|
112
|
-
* @returns The stream ID on success, or null if the stream was terminated during
|
|
117
|
+
* @returns The stream ID on success, or null if the stream was terminated during setup.
|
|
113
118
|
* @throws StreamSetupError if setup fails, or Error for unexpected failures.
|
|
114
119
|
*/
|
|
115
120
|
export declare function initializeStream(options: InitializeStreamOptions): Promise<Nullable<number>>;
|