@zenvor/hls.js 1.0.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/LICENSE +28 -0
- package/README.md +472 -0
- package/dist/hls-demo.js +26995 -0
- package/dist/hls-demo.js.map +1 -0
- package/dist/hls.d.mts +4204 -0
- package/dist/hls.d.ts +4204 -0
- package/dist/hls.js +40050 -0
- package/dist/hls.js.d.ts +4204 -0
- package/dist/hls.js.map +1 -0
- package/dist/hls.light.js +27145 -0
- package/dist/hls.light.js.map +1 -0
- package/dist/hls.light.min.js +2 -0
- package/dist/hls.light.min.js.map +1 -0
- package/dist/hls.light.mjs +26392 -0
- package/dist/hls.light.mjs.map +1 -0
- package/dist/hls.min.js +2 -0
- package/dist/hls.min.js.map +1 -0
- package/dist/hls.mjs +38956 -0
- package/dist/hls.mjs.map +1 -0
- package/dist/hls.worker.js +2 -0
- package/dist/hls.worker.js.map +1 -0
- package/package.json +143 -0
- package/src/config.ts +794 -0
- package/src/controller/abr-controller.ts +1019 -0
- package/src/controller/algo-data-controller.ts +794 -0
- package/src/controller/audio-stream-controller.ts +1099 -0
- package/src/controller/audio-track-controller.ts +454 -0
- package/src/controller/base-playlist-controller.ts +438 -0
- package/src/controller/base-stream-controller.ts +2526 -0
- package/src/controller/buffer-controller.ts +2015 -0
- package/src/controller/buffer-operation-queue.ts +159 -0
- package/src/controller/cap-level-controller.ts +367 -0
- package/src/controller/cmcd-controller.ts +422 -0
- package/src/controller/content-steering-controller.ts +622 -0
- package/src/controller/eme-controller.ts +1617 -0
- package/src/controller/error-controller.ts +627 -0
- package/src/controller/fps-controller.ts +146 -0
- package/src/controller/fragment-finders.ts +256 -0
- package/src/controller/fragment-tracker.ts +567 -0
- package/src/controller/gap-controller.ts +719 -0
- package/src/controller/id3-track-controller.ts +488 -0
- package/src/controller/interstitial-player.ts +302 -0
- package/src/controller/interstitials-controller.ts +2895 -0
- package/src/controller/interstitials-schedule.ts +698 -0
- package/src/controller/latency-controller.ts +294 -0
- package/src/controller/level-controller.ts +776 -0
- package/src/controller/stream-controller.ts +1597 -0
- package/src/controller/subtitle-stream-controller.ts +508 -0
- package/src/controller/subtitle-track-controller.ts +617 -0
- package/src/controller/timeline-controller.ts +677 -0
- package/src/crypt/aes-crypto.ts +36 -0
- package/src/crypt/aes-decryptor.ts +339 -0
- package/src/crypt/decrypter-aes-mode.ts +4 -0
- package/src/crypt/decrypter.ts +225 -0
- package/src/crypt/fast-aes-key.ts +39 -0
- package/src/define-plugin.d.ts +17 -0
- package/src/demux/audio/aacdemuxer.ts +126 -0
- package/src/demux/audio/ac3-demuxer.ts +170 -0
- package/src/demux/audio/adts.ts +249 -0
- package/src/demux/audio/base-audio-demuxer.ts +205 -0
- package/src/demux/audio/dolby.ts +21 -0
- package/src/demux/audio/mp3demuxer.ts +85 -0
- package/src/demux/audio/mpegaudio.ts +177 -0
- package/src/demux/chunk-cache.ts +42 -0
- package/src/demux/dummy-demuxed-track.ts +13 -0
- package/src/demux/inject-worker.ts +75 -0
- package/src/demux/mp4demuxer.ts +234 -0
- package/src/demux/sample-aes.ts +198 -0
- package/src/demux/transmuxer-interface.ts +449 -0
- package/src/demux/transmuxer-worker.ts +221 -0
- package/src/demux/transmuxer.ts +560 -0
- package/src/demux/tsdemuxer.ts +1256 -0
- package/src/demux/video/avc-video-parser.ts +401 -0
- package/src/demux/video/base-video-parser.ts +198 -0
- package/src/demux/video/exp-golomb.ts +153 -0
- package/src/demux/video/hevc-video-parser.ts +736 -0
- package/src/empty-es.js +5 -0
- package/src/empty.js +3 -0
- package/src/errors.ts +107 -0
- package/src/events.ts +548 -0
- package/src/exports-default.ts +3 -0
- package/src/exports-named.ts +81 -0
- package/src/hls.ts +1613 -0
- package/src/is-supported.ts +54 -0
- package/src/loader/date-range.ts +207 -0
- package/src/loader/fragment-loader.ts +403 -0
- package/src/loader/fragment.ts +487 -0
- package/src/loader/interstitial-asset-list.ts +162 -0
- package/src/loader/interstitial-event.ts +337 -0
- package/src/loader/key-loader.ts +439 -0
- package/src/loader/level-details.ts +203 -0
- package/src/loader/level-key.ts +259 -0
- package/src/loader/load-stats.ts +17 -0
- package/src/loader/m3u8-parser.ts +1072 -0
- package/src/loader/playlist-loader.ts +839 -0
- package/src/polyfills/number.ts +15 -0
- package/src/remux/aac-helper.ts +81 -0
- package/src/remux/mp4-generator.ts +1380 -0
- package/src/remux/mp4-remuxer.ts +1261 -0
- package/src/remux/passthrough-remuxer.ts +434 -0
- package/src/task-loop.ts +130 -0
- package/src/types/algo.ts +44 -0
- package/src/types/buffer.ts +105 -0
- package/src/types/component-api.ts +20 -0
- package/src/types/demuxer.ts +208 -0
- package/src/types/events.ts +574 -0
- package/src/types/fragment-tracker.ts +23 -0
- package/src/types/level.ts +268 -0
- package/src/types/loader.ts +198 -0
- package/src/types/media-playlist.ts +92 -0
- package/src/types/network-details.ts +3 -0
- package/src/types/remuxer.ts +104 -0
- package/src/types/track.ts +12 -0
- package/src/types/transmuxer.ts +46 -0
- package/src/types/tuples.ts +6 -0
- package/src/types/vtt.ts +11 -0
- package/src/utils/arrays.ts +22 -0
- package/src/utils/attr-list.ts +192 -0
- package/src/utils/binary-search.ts +46 -0
- package/src/utils/buffer-helper.ts +173 -0
- package/src/utils/cea-608-parser.ts +1413 -0
- package/src/utils/chunker.ts +41 -0
- package/src/utils/codecs.ts +314 -0
- package/src/utils/cues.ts +96 -0
- package/src/utils/discontinuities.ts +174 -0
- package/src/utils/encryption-methods-util.ts +21 -0
- package/src/utils/error-helper.ts +95 -0
- package/src/utils/event-listener-helper.ts +16 -0
- package/src/utils/ewma-bandwidth-estimator.ts +97 -0
- package/src/utils/ewma.ts +43 -0
- package/src/utils/fetch-loader.ts +331 -0
- package/src/utils/global.ts +2 -0
- package/src/utils/hash.ts +10 -0
- package/src/utils/hdr.ts +67 -0
- package/src/utils/hex.ts +32 -0
- package/src/utils/imsc1-ttml-parser.ts +261 -0
- package/src/utils/keysystem-util.ts +45 -0
- package/src/utils/level-helper.ts +629 -0
- package/src/utils/logger.ts +120 -0
- package/src/utils/media-option-attributes.ts +49 -0
- package/src/utils/mediacapabilities-helper.ts +301 -0
- package/src/utils/mediakeys-helper.ts +210 -0
- package/src/utils/mediasource-helper.ts +37 -0
- package/src/utils/mp4-tools.ts +1473 -0
- package/src/utils/number.ts +3 -0
- package/src/utils/numeric-encoding-utils.ts +26 -0
- package/src/utils/output-filter.ts +46 -0
- package/src/utils/rendition-helper.ts +505 -0
- package/src/utils/safe-json-stringify.ts +22 -0
- package/src/utils/texttrack-utils.ts +164 -0
- package/src/utils/time-ranges.ts +17 -0
- package/src/utils/timescale-conversion.ts +46 -0
- package/src/utils/utf8-utils.ts +18 -0
- package/src/utils/variable-substitution.ts +105 -0
- package/src/utils/vttcue.ts +384 -0
- package/src/utils/vttparser.ts +497 -0
- package/src/utils/webvtt-parser.ts +166 -0
- package/src/utils/xhr-loader.ts +337 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { logger } from '../../utils/logger';
|
|
6
|
+
|
|
7
|
+
class ExpGolomb {
|
|
8
|
+
private data: Uint8Array;
|
|
9
|
+
public bytesAvailable: number;
|
|
10
|
+
private word: number;
|
|
11
|
+
private bitsAvailable: number;
|
|
12
|
+
|
|
13
|
+
constructor(data: Uint8Array) {
|
|
14
|
+
this.data = data;
|
|
15
|
+
// the number of bytes left to examine in this.data
|
|
16
|
+
this.bytesAvailable = data.byteLength;
|
|
17
|
+
// the current word being examined
|
|
18
|
+
this.word = 0; // :uint
|
|
19
|
+
// the number of bits left to examine in the current word
|
|
20
|
+
this.bitsAvailable = 0; // :uint
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// ():void
|
|
24
|
+
loadWord(): void {
|
|
25
|
+
const data = this.data;
|
|
26
|
+
const bytesAvailable = this.bytesAvailable;
|
|
27
|
+
const position = data.byteLength - bytesAvailable;
|
|
28
|
+
const workingBytes = new Uint8Array(4);
|
|
29
|
+
const availableBytes = Math.min(4, bytesAvailable);
|
|
30
|
+
if (availableBytes === 0) {
|
|
31
|
+
throw new Error('no bytes available');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
workingBytes.set(data.subarray(position, position + availableBytes));
|
|
35
|
+
this.word = new DataView(workingBytes.buffer).getUint32(0);
|
|
36
|
+
// track the amount of this.data that has been processed
|
|
37
|
+
this.bitsAvailable = availableBytes * 8;
|
|
38
|
+
this.bytesAvailable -= availableBytes;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// (count:int):void
|
|
42
|
+
skipBits(count: number): void {
|
|
43
|
+
let skipBytes; // :int
|
|
44
|
+
count = Math.min(count, this.bytesAvailable * 8 + this.bitsAvailable);
|
|
45
|
+
if (this.bitsAvailable > count) {
|
|
46
|
+
this.word <<= count;
|
|
47
|
+
this.bitsAvailable -= count;
|
|
48
|
+
} else {
|
|
49
|
+
count -= this.bitsAvailable;
|
|
50
|
+
skipBytes = count >> 3;
|
|
51
|
+
count -= skipBytes << 3;
|
|
52
|
+
this.bytesAvailable -= skipBytes;
|
|
53
|
+
this.loadWord();
|
|
54
|
+
this.word <<= count;
|
|
55
|
+
this.bitsAvailable -= count;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// (size:int):uint
|
|
60
|
+
readBits(size: number): number {
|
|
61
|
+
let bits = Math.min(this.bitsAvailable, size); // :uint
|
|
62
|
+
const valu = this.word >>> (32 - bits); // :uint
|
|
63
|
+
if (size > 32) {
|
|
64
|
+
logger.error('Cannot read more than 32 bits at a time');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
this.bitsAvailable -= bits;
|
|
68
|
+
if (this.bitsAvailable > 0) {
|
|
69
|
+
this.word <<= bits;
|
|
70
|
+
} else if (this.bytesAvailable > 0) {
|
|
71
|
+
this.loadWord();
|
|
72
|
+
} else {
|
|
73
|
+
throw new Error('no bits available');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
bits = size - bits;
|
|
77
|
+
if (bits > 0 && this.bitsAvailable) {
|
|
78
|
+
return (valu << bits) | this.readBits(bits);
|
|
79
|
+
} else {
|
|
80
|
+
return valu;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ():uint
|
|
85
|
+
skipLZ(): number {
|
|
86
|
+
let leadingZeroCount; // :uint
|
|
87
|
+
for (
|
|
88
|
+
leadingZeroCount = 0;
|
|
89
|
+
leadingZeroCount < this.bitsAvailable;
|
|
90
|
+
++leadingZeroCount
|
|
91
|
+
) {
|
|
92
|
+
if ((this.word & (0x80000000 >>> leadingZeroCount)) !== 0) {
|
|
93
|
+
// the first bit of working word is 1
|
|
94
|
+
this.word <<= leadingZeroCount;
|
|
95
|
+
this.bitsAvailable -= leadingZeroCount;
|
|
96
|
+
return leadingZeroCount;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// we exhausted word and still have not found a 1
|
|
100
|
+
this.loadWord();
|
|
101
|
+
return leadingZeroCount + this.skipLZ();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ():void
|
|
105
|
+
skipUEG(): void {
|
|
106
|
+
this.skipBits(1 + this.skipLZ());
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// ():void
|
|
110
|
+
skipEG(): void {
|
|
111
|
+
this.skipBits(1 + this.skipLZ());
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ():uint
|
|
115
|
+
readUEG(): number {
|
|
116
|
+
const clz = this.skipLZ(); // :uint
|
|
117
|
+
return this.readBits(clz + 1) - 1;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ():int
|
|
121
|
+
readEG(): number {
|
|
122
|
+
const valu = this.readUEG(); // :int
|
|
123
|
+
if (0x01 & valu) {
|
|
124
|
+
// the number is odd if the low order bit is set
|
|
125
|
+
return (1 + valu) >>> 1; // add 1 to make it even, and divide by 2
|
|
126
|
+
} else {
|
|
127
|
+
return -1 * (valu >>> 1); // divide by two then make it negative
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Some convenience functions
|
|
132
|
+
// :Boolean
|
|
133
|
+
readBoolean(): boolean {
|
|
134
|
+
return this.readBits(1) === 1;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ():int
|
|
138
|
+
readUByte(): number {
|
|
139
|
+
return this.readBits(8);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// ():int
|
|
143
|
+
readUShort(): number {
|
|
144
|
+
return this.readBits(16);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// ():int
|
|
148
|
+
readUInt(): number {
|
|
149
|
+
return this.readBits(32);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export default ExpGolomb;
|