@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.
Files changed (159) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +472 -0
  3. package/dist/hls-demo.js +26995 -0
  4. package/dist/hls-demo.js.map +1 -0
  5. package/dist/hls.d.mts +4204 -0
  6. package/dist/hls.d.ts +4204 -0
  7. package/dist/hls.js +40050 -0
  8. package/dist/hls.js.d.ts +4204 -0
  9. package/dist/hls.js.map +1 -0
  10. package/dist/hls.light.js +27145 -0
  11. package/dist/hls.light.js.map +1 -0
  12. package/dist/hls.light.min.js +2 -0
  13. package/dist/hls.light.min.js.map +1 -0
  14. package/dist/hls.light.mjs +26392 -0
  15. package/dist/hls.light.mjs.map +1 -0
  16. package/dist/hls.min.js +2 -0
  17. package/dist/hls.min.js.map +1 -0
  18. package/dist/hls.mjs +38956 -0
  19. package/dist/hls.mjs.map +1 -0
  20. package/dist/hls.worker.js +2 -0
  21. package/dist/hls.worker.js.map +1 -0
  22. package/package.json +143 -0
  23. package/src/config.ts +794 -0
  24. package/src/controller/abr-controller.ts +1019 -0
  25. package/src/controller/algo-data-controller.ts +794 -0
  26. package/src/controller/audio-stream-controller.ts +1099 -0
  27. package/src/controller/audio-track-controller.ts +454 -0
  28. package/src/controller/base-playlist-controller.ts +438 -0
  29. package/src/controller/base-stream-controller.ts +2526 -0
  30. package/src/controller/buffer-controller.ts +2015 -0
  31. package/src/controller/buffer-operation-queue.ts +159 -0
  32. package/src/controller/cap-level-controller.ts +367 -0
  33. package/src/controller/cmcd-controller.ts +422 -0
  34. package/src/controller/content-steering-controller.ts +622 -0
  35. package/src/controller/eme-controller.ts +1617 -0
  36. package/src/controller/error-controller.ts +627 -0
  37. package/src/controller/fps-controller.ts +146 -0
  38. package/src/controller/fragment-finders.ts +256 -0
  39. package/src/controller/fragment-tracker.ts +567 -0
  40. package/src/controller/gap-controller.ts +719 -0
  41. package/src/controller/id3-track-controller.ts +488 -0
  42. package/src/controller/interstitial-player.ts +302 -0
  43. package/src/controller/interstitials-controller.ts +2895 -0
  44. package/src/controller/interstitials-schedule.ts +698 -0
  45. package/src/controller/latency-controller.ts +294 -0
  46. package/src/controller/level-controller.ts +776 -0
  47. package/src/controller/stream-controller.ts +1597 -0
  48. package/src/controller/subtitle-stream-controller.ts +508 -0
  49. package/src/controller/subtitle-track-controller.ts +617 -0
  50. package/src/controller/timeline-controller.ts +677 -0
  51. package/src/crypt/aes-crypto.ts +36 -0
  52. package/src/crypt/aes-decryptor.ts +339 -0
  53. package/src/crypt/decrypter-aes-mode.ts +4 -0
  54. package/src/crypt/decrypter.ts +225 -0
  55. package/src/crypt/fast-aes-key.ts +39 -0
  56. package/src/define-plugin.d.ts +17 -0
  57. package/src/demux/audio/aacdemuxer.ts +126 -0
  58. package/src/demux/audio/ac3-demuxer.ts +170 -0
  59. package/src/demux/audio/adts.ts +249 -0
  60. package/src/demux/audio/base-audio-demuxer.ts +205 -0
  61. package/src/demux/audio/dolby.ts +21 -0
  62. package/src/demux/audio/mp3demuxer.ts +85 -0
  63. package/src/demux/audio/mpegaudio.ts +177 -0
  64. package/src/demux/chunk-cache.ts +42 -0
  65. package/src/demux/dummy-demuxed-track.ts +13 -0
  66. package/src/demux/inject-worker.ts +75 -0
  67. package/src/demux/mp4demuxer.ts +234 -0
  68. package/src/demux/sample-aes.ts +198 -0
  69. package/src/demux/transmuxer-interface.ts +449 -0
  70. package/src/demux/transmuxer-worker.ts +221 -0
  71. package/src/demux/transmuxer.ts +560 -0
  72. package/src/demux/tsdemuxer.ts +1256 -0
  73. package/src/demux/video/avc-video-parser.ts +401 -0
  74. package/src/demux/video/base-video-parser.ts +198 -0
  75. package/src/demux/video/exp-golomb.ts +153 -0
  76. package/src/demux/video/hevc-video-parser.ts +736 -0
  77. package/src/empty-es.js +5 -0
  78. package/src/empty.js +3 -0
  79. package/src/errors.ts +107 -0
  80. package/src/events.ts +548 -0
  81. package/src/exports-default.ts +3 -0
  82. package/src/exports-named.ts +81 -0
  83. package/src/hls.ts +1613 -0
  84. package/src/is-supported.ts +54 -0
  85. package/src/loader/date-range.ts +207 -0
  86. package/src/loader/fragment-loader.ts +403 -0
  87. package/src/loader/fragment.ts +487 -0
  88. package/src/loader/interstitial-asset-list.ts +162 -0
  89. package/src/loader/interstitial-event.ts +337 -0
  90. package/src/loader/key-loader.ts +439 -0
  91. package/src/loader/level-details.ts +203 -0
  92. package/src/loader/level-key.ts +259 -0
  93. package/src/loader/load-stats.ts +17 -0
  94. package/src/loader/m3u8-parser.ts +1072 -0
  95. package/src/loader/playlist-loader.ts +839 -0
  96. package/src/polyfills/number.ts +15 -0
  97. package/src/remux/aac-helper.ts +81 -0
  98. package/src/remux/mp4-generator.ts +1380 -0
  99. package/src/remux/mp4-remuxer.ts +1261 -0
  100. package/src/remux/passthrough-remuxer.ts +434 -0
  101. package/src/task-loop.ts +130 -0
  102. package/src/types/algo.ts +44 -0
  103. package/src/types/buffer.ts +105 -0
  104. package/src/types/component-api.ts +20 -0
  105. package/src/types/demuxer.ts +208 -0
  106. package/src/types/events.ts +574 -0
  107. package/src/types/fragment-tracker.ts +23 -0
  108. package/src/types/level.ts +268 -0
  109. package/src/types/loader.ts +198 -0
  110. package/src/types/media-playlist.ts +92 -0
  111. package/src/types/network-details.ts +3 -0
  112. package/src/types/remuxer.ts +104 -0
  113. package/src/types/track.ts +12 -0
  114. package/src/types/transmuxer.ts +46 -0
  115. package/src/types/tuples.ts +6 -0
  116. package/src/types/vtt.ts +11 -0
  117. package/src/utils/arrays.ts +22 -0
  118. package/src/utils/attr-list.ts +192 -0
  119. package/src/utils/binary-search.ts +46 -0
  120. package/src/utils/buffer-helper.ts +173 -0
  121. package/src/utils/cea-608-parser.ts +1413 -0
  122. package/src/utils/chunker.ts +41 -0
  123. package/src/utils/codecs.ts +314 -0
  124. package/src/utils/cues.ts +96 -0
  125. package/src/utils/discontinuities.ts +174 -0
  126. package/src/utils/encryption-methods-util.ts +21 -0
  127. package/src/utils/error-helper.ts +95 -0
  128. package/src/utils/event-listener-helper.ts +16 -0
  129. package/src/utils/ewma-bandwidth-estimator.ts +97 -0
  130. package/src/utils/ewma.ts +43 -0
  131. package/src/utils/fetch-loader.ts +331 -0
  132. package/src/utils/global.ts +2 -0
  133. package/src/utils/hash.ts +10 -0
  134. package/src/utils/hdr.ts +67 -0
  135. package/src/utils/hex.ts +32 -0
  136. package/src/utils/imsc1-ttml-parser.ts +261 -0
  137. package/src/utils/keysystem-util.ts +45 -0
  138. package/src/utils/level-helper.ts +629 -0
  139. package/src/utils/logger.ts +120 -0
  140. package/src/utils/media-option-attributes.ts +49 -0
  141. package/src/utils/mediacapabilities-helper.ts +301 -0
  142. package/src/utils/mediakeys-helper.ts +210 -0
  143. package/src/utils/mediasource-helper.ts +37 -0
  144. package/src/utils/mp4-tools.ts +1473 -0
  145. package/src/utils/number.ts +3 -0
  146. package/src/utils/numeric-encoding-utils.ts +26 -0
  147. package/src/utils/output-filter.ts +46 -0
  148. package/src/utils/rendition-helper.ts +505 -0
  149. package/src/utils/safe-json-stringify.ts +22 -0
  150. package/src/utils/texttrack-utils.ts +164 -0
  151. package/src/utils/time-ranges.ts +17 -0
  152. package/src/utils/timescale-conversion.ts +46 -0
  153. package/src/utils/utf8-utils.ts +18 -0
  154. package/src/utils/variable-substitution.ts +105 -0
  155. package/src/utils/vttcue.ts +384 -0
  156. package/src/utils/vttparser.ts +497 -0
  157. package/src/utils/webvtt-parser.ts +166 -0
  158. package/src/utils/xhr-loader.ts +337 -0
  159. 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;