movi-player 0.3.0 → 0.3.2
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/AGENTS.md +2 -0
- package/README.md +54 -7
- package/dist/core/MoviPlayer.d.ts +77 -1
- package/dist/core/MoviPlayer.d.ts.map +1 -1
- package/dist/core/MoviPlayer.js +667 -121
- package/dist/core/MoviPlayer.js.map +1 -1
- package/dist/core/PlayerState.js +1 -1
- package/dist/core/PlayerState.js.map +1 -1
- package/dist/decode/VideoDecoder.d.ts.map +1 -1
- package/dist/decode/VideoDecoder.js +6 -2
- package/dist/decode/VideoDecoder.js.map +1 -1
- package/dist/demuxer.cjs +315 -129
- package/dist/demuxer.js +377 -191
- package/dist/element.cjs +58309 -16596
- package/dist/element.js +59520 -17807
- package/dist/index.cjs +58309 -16596
- package/dist/index.js +59520 -17807
- package/dist/player.cjs +56818 -15360
- package/dist/player.js +57818 -16360
- package/dist/render/DASHPlayerWrapper.d.ts +65 -0
- package/dist/render/DASHPlayerWrapper.d.ts.map +1 -0
- package/dist/render/DASHPlayerWrapper.js +540 -0
- package/dist/render/DASHPlayerWrapper.js.map +1 -0
- package/dist/render/HLSPlayerWrapper.d.ts.map +1 -1
- package/dist/render/HLSPlayerWrapper.js +47 -11
- package/dist/render/HLSPlayerWrapper.js.map +1 -1
- package/dist/render/MoviElement.d.ts +97 -0
- package/dist/render/MoviElement.d.ts.map +1 -1
- package/dist/render/MoviElement.js +852 -152
- package/dist/render/MoviElement.js.map +1 -1
- package/dist/render/ShakaPlayerWrapper.d.ts +111 -0
- package/dist/render/ShakaPlayerWrapper.d.ts.map +1 -0
- package/dist/render/ShakaPlayerWrapper.js +956 -0
- package/dist/render/ShakaPlayerWrapper.js.map +1 -0
- package/dist/source/DashFallback.d.ts +32 -0
- package/dist/source/DashFallback.d.ts.map +1 -0
- package/dist/source/DashFallback.js +142 -0
- package/dist/source/DashFallback.js.map +1 -0
- package/dist/source/DashManifest.d.ts +34 -0
- package/dist/source/DashManifest.d.ts.map +1 -0
- package/dist/source/DashManifest.js +194 -0
- package/dist/source/DashManifest.js.map +1 -0
- package/dist/source/DashSegmentSource.d.ts +32 -0
- package/dist/source/DashSegmentSource.d.ts.map +1 -0
- package/dist/source/DashSegmentSource.js +86 -0
- package/dist/source/DashSegmentSource.js.map +1 -0
- package/dist/source/HttpSource.d.ts +64 -0
- package/dist/source/HttpSource.d.ts.map +1 -1
- package/dist/source/HttpSource.js +444 -57
- package/dist/source/HttpSource.js.map +1 -1
- package/dist/source/ThumbnailHttpSource.d.ts +13 -0
- package/dist/source/ThumbnailHttpSource.d.ts.map +1 -1
- package/dist/source/ThumbnailHttpSource.js +70 -8
- package/dist/source/ThumbnailHttpSource.js.map +1 -1
- package/dist/source/index.d.ts +2 -0
- package/dist/source/index.d.ts.map +1 -1
- package/dist/source/index.js +1 -0
- package/dist/source/index.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +16 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashSegmentSource.js","sourceRoot":"","sources":["../../src/source/DashSegmentSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,11 @@ export declare class HttpSource implements SourceAdapter {
|
|
|
26
26
|
private streamError;
|
|
27
27
|
private maxBufferedEnd;
|
|
28
28
|
private fullyBuffered;
|
|
29
|
+
private rangeUnsupported;
|
|
30
|
+
private linearMode;
|
|
31
|
+
private onLinearMode;
|
|
32
|
+
private readMax;
|
|
33
|
+
private recentReads;
|
|
29
34
|
private consecutiveForceRestarts;
|
|
30
35
|
private lastForceRestartTime;
|
|
31
36
|
private readonly MAX_FORCE_RESTARTS;
|
|
@@ -50,6 +55,21 @@ export declare class HttpSource implements SourceAdapter {
|
|
|
50
55
|
* Pass a number of megabytes. 0 or negative values are ignored.
|
|
51
56
|
*/
|
|
52
57
|
setMaxBufferSize(megabytes: number): void;
|
|
58
|
+
/**
|
|
59
|
+
* Register a callback fired once when the source falls back to linear
|
|
60
|
+
* (forward-only, non-seekable) playback because the server has no Range
|
|
61
|
+
* support and the file is too large to cache whole. The UI uses this to
|
|
62
|
+
* hide the timeline and disable seeking/thumbnails.
|
|
63
|
+
*/
|
|
64
|
+
setOnLinearMode(cb: () => void): void;
|
|
65
|
+
/** True once the source is in forward-only linear (non-seekable) playback. */
|
|
66
|
+
isLinearMode(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* True once we've confirmed the server has no Range support (covers both the
|
|
69
|
+
* full-cache and the linear fallback). Callers use it to skip features that
|
|
70
|
+
* need scattered random-access reads (e.g. the thumbnail pipeline).
|
|
71
|
+
*/
|
|
72
|
+
isRangeUnsupported(): boolean;
|
|
53
73
|
/**
|
|
54
74
|
* Resize buffer based on file size (3% of file, clamped to min/max)
|
|
55
75
|
*/
|
|
@@ -76,6 +96,23 @@ export declare class HttpSource implements SourceAdapter {
|
|
|
76
96
|
* throw on failure.
|
|
77
97
|
*/
|
|
78
98
|
protected resolveSize(): Promise<number>;
|
|
99
|
+
/**
|
|
100
|
+
* Recover the total file size from a 1-byte ranged GET when HEAD didn't
|
|
101
|
+
* carry Content-Length. Reads the total out of Content-Range; returns null
|
|
102
|
+
* if the server gives us nothing usable. The body is cancelled immediately —
|
|
103
|
+
* we only want headers, and a server that ignores Range would otherwise
|
|
104
|
+
* start streaming the whole file.
|
|
105
|
+
*/
|
|
106
|
+
protected resolveSizeViaRange(): Promise<number | null>;
|
|
107
|
+
/**
|
|
108
|
+
* Last-resort size probe: a plain (un-ranged) GET. Catches servers that strip
|
|
109
|
+
* Content-Length on HEAD and don't CORS-expose Content-Range on a 206, yet
|
|
110
|
+
* still send Content-Length on a full 200 response. The body is cancelled the
|
|
111
|
+
* moment headers are in, so nothing past the headers is downloaded.
|
|
112
|
+
*/
|
|
113
|
+
protected resolveSizeViaPlainGet(): Promise<number | null>;
|
|
114
|
+
/** Pull a download filename out of a Content-Disposition header, if present. */
|
|
115
|
+
private setFilenameFromDisposition;
|
|
79
116
|
/**
|
|
80
117
|
* Build the HTTP headers used for every outbound request (HEAD, range
|
|
81
118
|
* GET, stream GET). Default implementation just returns the static
|
|
@@ -129,6 +166,33 @@ export declare class HttpSource implements SourceAdapter {
|
|
|
129
166
|
*/
|
|
130
167
|
private startStream;
|
|
131
168
|
private readStreamBackground;
|
|
169
|
+
/**
|
|
170
|
+
* Consume a single 200 response as the whole file from byte 0, used when the
|
|
171
|
+
* server has no Range support. Two outcomes:
|
|
172
|
+
* - File fits the buffer cap → cache it entirely → full random access
|
|
173
|
+
* (seek/thumbnails keep working once downloaded).
|
|
174
|
+
* - File exceeds the cap (or size unknown) → bounded forward-only sliding
|
|
175
|
+
* window (linearMode): playback is linear, seeking impossible. The UI is
|
|
176
|
+
* notified via onLinearMode so it can hide the timeline.
|
|
177
|
+
* The response body MUST start at byte 0 (caller guarantees startOffset===0).
|
|
178
|
+
*/
|
|
179
|
+
private consumeNonRangeStream;
|
|
180
|
+
/**
|
|
181
|
+
* Append a chunk to the buffer for the non-range stream. In full-cache mode
|
|
182
|
+
* the buffer always has room. In linearMode it slides the window forward by
|
|
183
|
+
* discarding already-consumed bytes, applying backpressure (waiting for the
|
|
184
|
+
* demuxer to catch up) when the window can't be advanced yet.
|
|
185
|
+
*/
|
|
186
|
+
private writeSequential;
|
|
187
|
+
/**
|
|
188
|
+
* Slide the linear-mode window forward to make room for new download. Keeps a
|
|
189
|
+
* trailing history of up to LINEAR_TRAIL_BYTES behind the playhead so the user
|
|
190
|
+
* can seek backward into already-played content that's still in RAM — only the
|
|
191
|
+
* bytes older than that are dropped. Returns false when nothing can be dropped
|
|
192
|
+
* yet (playhead hasn't advanced past the trailing window), so the caller
|
|
193
|
+
* applies backpressure. This bounds read-ahead to (bufferSize - trail).
|
|
194
|
+
*/
|
|
195
|
+
private slideWindow;
|
|
132
196
|
private stopStream;
|
|
133
197
|
private waitForData;
|
|
134
198
|
read(offset: number, length: number): Promise<ArrayBuffer>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpSource.d.ts","sourceRoot":"","sources":["../../src/source/HttpSource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAoCrD,qBAAa,UAAW,YAAW,aAAa;IAC9C,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,2BAA2B,CAAuB;IAG1D,OAAO,CAAC,UAAU,CAA2B;IAK7C,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,kBAAkB,CAAa;IAGvC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAAa;IAGrC,OAAO,CAAC,MAAM,CAAwD;IACtE,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,WAAW,CAAsB;IAGzC,OAAO,CAAC,cAAc,CAAa;IAInC,OAAO,CAAC,aAAa,CAAkB;
|
|
1
|
+
{"version":3,"file":"HttpSource.d.ts","sourceRoot":"","sources":["../../src/source/HttpSource.ts"],"names":[],"mappings":"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"}
|