@byteplus/veplayer-plugin 2.4.0 → 2.4.1-rc.1
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/esm/index.development.js +43395 -42054
- package/esm/index.production.js +3 -3
- package/esm/veplayer.plugin.abr.development.js +2555 -2238
- package/esm/veplayer.plugin.abr.production.js +1 -1
- package/esm/veplayer.plugin.flv.development.js +419 -158
- package/esm/veplayer.plugin.flv.production.js +1 -1
- package/esm/veplayer.plugin.hls.development.js +738 -79
- package/esm/veplayer.plugin.hls.production.js +1 -1
- package/esm/veplayer.plugin.mp4.development.js +2 -2
- package/esm/veplayer.plugin.mp4.production.js +1 -1
- package/esm/veplayer.plugin.rtm.development.js +10 -4
- package/esm/veplayer.plugin.rtm.production.js +1 -1
- package/esm/veplayer.plugin.shaka.development.js +1 -1
- package/esm/veplayer.plugin.shaka.production.js +1 -1
- package/package.json +1 -1
- package/umd/veplayer.plugin.abr.development.js +2555 -2238
- package/umd/veplayer.plugin.abr.production.js +1 -1
- package/umd/veplayer.plugin.flv.development.js +419 -158
- package/umd/veplayer.plugin.flv.production.js +1 -1
- package/umd/veplayer.plugin.hls.development.js +738 -79
- package/umd/veplayer.plugin.hls.production.js +1 -1
- package/umd/veplayer.plugin.mp4.development.js +2 -2
- package/umd/veplayer.plugin.mp4.production.js +1 -1
- package/umd/veplayer.plugin.rtm.development.js +10 -4
- package/umd/veplayer.plugin.rtm.production.js +1 -1
- package/umd/veplayer.plugin.shaka.development.js +1 -1
- package/umd/veplayer.plugin.shaka.production.js +1 -1
|
@@ -1644,7 +1644,7 @@
|
|
|
1644
1644
|
}
|
|
1645
1645
|
return offsetTime;
|
|
1646
1646
|
};
|
|
1647
|
-
var version = "3.0.
|
|
1647
|
+
var version = "3.0.20-rc.3";
|
|
1648
1648
|
var ERROR_MAP = {
|
|
1649
1649
|
1: 5101,
|
|
1650
1650
|
2: 5102,
|
|
@@ -2678,7 +2678,7 @@
|
|
|
2678
2678
|
arr2[i] = arr[i];
|
|
2679
2679
|
return arr2;
|
|
2680
2680
|
}
|
|
2681
|
-
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
2681
|
+
function _createForOfIteratorHelper$1(o, allowArrayLike) {
|
|
2682
2682
|
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
2683
2683
|
if (!it) {
|
|
2684
2684
|
if (Array.isArray(o) || (it = _unsupportedIterableToArray$1(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
@@ -2866,6 +2866,21 @@
|
|
|
2866
2866
|
length: Buffer2.totalLength && Buffer2.totalLength(buffers)
|
|
2867
2867
|
};
|
|
2868
2868
|
}
|
|
2869
|
+
}, {
|
|
2870
|
+
key: "isBuffered",
|
|
2871
|
+
value: function isBuffered(media, pos) {
|
|
2872
|
+
if (media) {
|
|
2873
|
+
var buffered = Buffer2.get(media);
|
|
2874
|
+
if (buffered !== null && buffered !== void 0 && buffered.length) {
|
|
2875
|
+
for (var i = 0; i < buffered.length; i++) {
|
|
2876
|
+
if (pos >= buffered.start(i) && pos <= buffered.end(i)) {
|
|
2877
|
+
return true;
|
|
2878
|
+
}
|
|
2879
|
+
}
|
|
2880
|
+
}
|
|
2881
|
+
}
|
|
2882
|
+
return false;
|
|
2883
|
+
}
|
|
2869
2884
|
}]);
|
|
2870
2885
|
return Buffer2;
|
|
2871
2886
|
}();
|
|
@@ -4770,7 +4785,7 @@
|
|
|
4770
4785
|
value: function _getHeaders(xhr) {
|
|
4771
4786
|
var headerLines = xhr.getAllResponseHeaders().trim().split("\r\n");
|
|
4772
4787
|
var headers = {};
|
|
4773
|
-
var _iterator = _createForOfIteratorHelper(headerLines), _step;
|
|
4788
|
+
var _iterator = _createForOfIteratorHelper$1(headerLines), _step;
|
|
4774
4789
|
try {
|
|
4775
4790
|
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
|
|
4776
4791
|
var header = _step.value;
|
|
@@ -5608,6 +5623,60 @@
|
|
|
5608
5623
|
function _nonIterableRest() {
|
|
5609
5624
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
5610
5625
|
}
|
|
5626
|
+
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
5627
|
+
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
5628
|
+
if (!it) {
|
|
5629
|
+
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
5630
|
+
if (it)
|
|
5631
|
+
o = it;
|
|
5632
|
+
var i = 0;
|
|
5633
|
+
var F = function() {
|
|
5634
|
+
};
|
|
5635
|
+
return {
|
|
5636
|
+
s: F,
|
|
5637
|
+
n: function() {
|
|
5638
|
+
if (i >= o.length)
|
|
5639
|
+
return {
|
|
5640
|
+
done: true
|
|
5641
|
+
};
|
|
5642
|
+
return {
|
|
5643
|
+
done: false,
|
|
5644
|
+
value: o[i++]
|
|
5645
|
+
};
|
|
5646
|
+
},
|
|
5647
|
+
e: function(e) {
|
|
5648
|
+
throw e;
|
|
5649
|
+
},
|
|
5650
|
+
f: F
|
|
5651
|
+
};
|
|
5652
|
+
}
|
|
5653
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
5654
|
+
}
|
|
5655
|
+
var normalCompletion = true, didErr = false, err;
|
|
5656
|
+
return {
|
|
5657
|
+
s: function() {
|
|
5658
|
+
it = it.call(o);
|
|
5659
|
+
},
|
|
5660
|
+
n: function() {
|
|
5661
|
+
var step = it.next();
|
|
5662
|
+
normalCompletion = step.done;
|
|
5663
|
+
return step;
|
|
5664
|
+
},
|
|
5665
|
+
e: function(e) {
|
|
5666
|
+
didErr = true;
|
|
5667
|
+
err = e;
|
|
5668
|
+
},
|
|
5669
|
+
f: function() {
|
|
5670
|
+
try {
|
|
5671
|
+
if (!normalCompletion && it.return != null)
|
|
5672
|
+
it.return();
|
|
5673
|
+
} finally {
|
|
5674
|
+
if (didErr)
|
|
5675
|
+
throw err;
|
|
5676
|
+
}
|
|
5677
|
+
}
|
|
5678
|
+
};
|
|
5679
|
+
}
|
|
5611
5680
|
function _toPrimitive(input, hint) {
|
|
5612
5681
|
if (typeof input !== "object" || input === null)
|
|
5613
5682
|
return input;
|
|
@@ -5630,6 +5699,7 @@
|
|
|
5630
5699
|
METADATA: "metadata"
|
|
5631
5700
|
};
|
|
5632
5701
|
var VideoCodecType = {
|
|
5702
|
+
AV1: "av1",
|
|
5633
5703
|
AVC: "avc",
|
|
5634
5704
|
HEVC: "hevc"
|
|
5635
5705
|
};
|
|
@@ -5676,6 +5746,7 @@
|
|
|
5676
5746
|
_defineProperty(this, "isVideoEncryption", false);
|
|
5677
5747
|
_defineProperty(this, "isAudioEncryption", false);
|
|
5678
5748
|
_defineProperty(this, "isVideo", true);
|
|
5749
|
+
_defineProperty(this, "lastKeyFrameDts", 0);
|
|
5679
5750
|
_defineProperty(this, "kid", null);
|
|
5680
5751
|
_defineProperty(this, "pssh", null);
|
|
5681
5752
|
_defineProperty(this, "ext", void 0);
|
|
@@ -5718,6 +5789,9 @@
|
|
|
5718
5789
|
}, {
|
|
5719
5790
|
key: "exist",
|
|
5720
5791
|
value: function exist() {
|
|
5792
|
+
if (/av01/.test(this.codec)) {
|
|
5793
|
+
return true;
|
|
5794
|
+
}
|
|
5721
5795
|
return !!(this.pps.length && this.sps.length && this.codec);
|
|
5722
5796
|
}
|
|
5723
5797
|
}, {
|
|
@@ -5986,7 +6060,7 @@
|
|
|
5986
6060
|
continue;
|
|
5987
6061
|
}
|
|
5988
6062
|
frameLength = (data[i + 3] & 3) << 11 | data[i + 4] << 3 | (data[i + 5] & 224) >> 5;
|
|
5989
|
-
if (len - i < frameLength)
|
|
6063
|
+
if (!frameLength || len - i < frameLength)
|
|
5990
6064
|
break;
|
|
5991
6065
|
protectionSkipBytes = (~data[i + 1] & 1) * 2;
|
|
5992
6066
|
frames.push({
|
|
@@ -6180,6 +6254,15 @@
|
|
|
6180
6254
|
return parseInt(item, 16);
|
|
6181
6255
|
});
|
|
6182
6256
|
}
|
|
6257
|
+
function combineToFloat(integer, decimal) {
|
|
6258
|
+
return Number(integer + "." + decimal);
|
|
6259
|
+
}
|
|
6260
|
+
function toDegree(matrix) {
|
|
6261
|
+
if (matrix.length < 5)
|
|
6262
|
+
return 0;
|
|
6263
|
+
var scaled0 = Math.hypot(matrix[0], matrix[3]), scaled1 = Math.hypot(matrix[1], matrix[4]);
|
|
6264
|
+
return 0 === scaled0 || 0 === scaled1 ? 0 : 180 * Math.atan2(matrix[1] / scaled1, matrix[0] / scaled0) / Math.PI;
|
|
6265
|
+
}
|
|
6183
6266
|
var NALu = /* @__PURE__ */ function() {
|
|
6184
6267
|
function NALu2() {
|
|
6185
6268
|
_classCallCheck(this, NALu2);
|
|
@@ -6842,13 +6925,16 @@
|
|
|
6842
6925
|
var AUDIO_EXCETION_LOG_EMIT_DURATION = 5 * 9e4;
|
|
6843
6926
|
var MAX_VIDEO_FRAME_DURATION = 9e4;
|
|
6844
6927
|
var MAX_DTS_DELTA_WITH_NEXT_CHUNK = 9e4 / 2;
|
|
6928
|
+
var LARGE_AV_FIRST_FRAME_FORCE_FIX_THRESHOLD = 9e4 * 5;
|
|
6845
6929
|
var TsFixer = /* @__PURE__ */ function() {
|
|
6846
|
-
function TsFixer2(videoTrack, audioTrack, metadataTrack) {
|
|
6930
|
+
function TsFixer2(videoTrack, audioTrack, metadataTrack, fixerConfig) {
|
|
6847
6931
|
_classCallCheck(this, TsFixer2);
|
|
6848
6932
|
this.videoTrack = videoTrack;
|
|
6849
6933
|
this.audioTrack = audioTrack;
|
|
6850
6934
|
this.metadataTrack = metadataTrack;
|
|
6851
6935
|
this._baseDts = -1;
|
|
6936
|
+
this._baseVideoDts = -1;
|
|
6937
|
+
this._baseAudioDts = -1;
|
|
6852
6938
|
this._baseDtsInited = false;
|
|
6853
6939
|
this._audioNextPts = void 0;
|
|
6854
6940
|
this._videoNextDts = void 0;
|
|
@@ -6857,6 +6943,8 @@
|
|
|
6857
6943
|
this._lastAudioExceptionGapDot = 0;
|
|
6858
6944
|
this._lastAudioExceptionOverlapDot = 0;
|
|
6859
6945
|
this._lastAudioExceptionLargeGapDot = 0;
|
|
6946
|
+
this._needForceFixLargeGap = fixerConfig === null || fixerConfig === void 0 ? void 0 : fixerConfig.forceFixLargeGap;
|
|
6947
|
+
this._largeGapThreshold = (fixerConfig === null || fixerConfig === void 0 ? void 0 : fixerConfig.largeGapThreshold) || LARGE_AV_FIRST_FRAME_FORCE_FIX_THRESHOLD;
|
|
6860
6948
|
}
|
|
6861
6949
|
_createClass(TsFixer2, [{
|
|
6862
6950
|
key: "fix",
|
|
@@ -6884,10 +6972,16 @@
|
|
|
6884
6972
|
if (discontinuity) {
|
|
6885
6973
|
this._calculateBaseDts(this.audioTrack, this.videoTrack);
|
|
6886
6974
|
this._baseDts -= startTime;
|
|
6975
|
+
this._baseAudioDts -= startTime;
|
|
6976
|
+
this._baseVideoDts -= startTime;
|
|
6887
6977
|
}
|
|
6888
6978
|
if (!contiguous) {
|
|
6889
6979
|
this._videoNextDts = vaDelta > 0 ? startTime + vaDelta : startTime;
|
|
6890
6980
|
this._audioNextPts = vaDelta > 0 ? startTime : startTime - vaDelta;
|
|
6981
|
+
if (this._needForceFixLargeGap) {
|
|
6982
|
+
this._videoNextDts = 0;
|
|
6983
|
+
this._audioNextPts = 0;
|
|
6984
|
+
}
|
|
6891
6985
|
var vDeltaToNextDts = firstVideoSample ? firstVideoSample.dts - this._baseDts - this._videoNextDts : 0;
|
|
6892
6986
|
var aDeltaToNextDts = firstAudioSample ? firstAudioSample.pts - this._baseDts - this._audioNextPts : 0;
|
|
6893
6987
|
if (Math.abs(vDeltaToNextDts || aDeltaToNextDts) > MAX_VIDEO_FRAME_DURATION) {
|
|
@@ -6920,8 +7014,8 @@
|
|
|
6920
7014
|
if (!samples.length)
|
|
6921
7015
|
return;
|
|
6922
7016
|
samples.forEach(function(x) {
|
|
6923
|
-
x.dts -= _this2._baseDts;
|
|
6924
|
-
x.pts -= _this2._baseDts;
|
|
7017
|
+
x.dts -= _this2._needForceFixLargeGap ? _this2._baseVideoDts : _this2._baseDts;
|
|
7018
|
+
x.pts -= _this2._needForceFixLargeGap ? _this2._baseVideoDts : _this2._baseDts;
|
|
6925
7019
|
});
|
|
6926
7020
|
if (this._videoNextDts === void 0) {
|
|
6927
7021
|
var samp0 = samples[0];
|
|
@@ -7014,7 +7108,7 @@
|
|
|
7014
7108
|
if (!samples.length)
|
|
7015
7109
|
return;
|
|
7016
7110
|
samples.forEach(function(x) {
|
|
7017
|
-
x.pts -= _this3._baseDts;
|
|
7111
|
+
x.pts -= _this3._needForceFixLargeGap ? _this3._baseAudioDts : _this3._baseDts;
|
|
7018
7112
|
x.dts = x.pts;
|
|
7019
7113
|
});
|
|
7020
7114
|
this._doFixAudioInternal(audioTrack, samples, 9e4);
|
|
@@ -7031,12 +7125,15 @@
|
|
|
7031
7125
|
var videoBaseDts = Infinity;
|
|
7032
7126
|
if (audioSamps.length) {
|
|
7033
7127
|
audioTrack.baseDts = audioBasePts = audioSamps[0].pts;
|
|
7128
|
+
this._baseAudioDts = audioBasePts;
|
|
7034
7129
|
}
|
|
7035
7130
|
if (videoSamps.length) {
|
|
7036
7131
|
videoTrack.baseDts = videoBaseDts = videoSamps[0].dts;
|
|
7132
|
+
this._baseVideoDts = videoBaseDts;
|
|
7037
7133
|
}
|
|
7038
7134
|
this._baseDts = Math.min(audioBasePts, videoBaseDts);
|
|
7039
7135
|
var delta = videoBaseDts - audioBasePts;
|
|
7136
|
+
var largeGap = false;
|
|
7040
7137
|
if (Number.isFinite(delta) && Math.abs(delta) > LARGE_AV_FIRST_FRAME_GAP) {
|
|
7041
7138
|
videoTrack.warnings.push({
|
|
7042
7139
|
type: WarningType.LARGE_AV_SHIFT,
|
|
@@ -7046,6 +7143,16 @@
|
|
|
7046
7143
|
delta
|
|
7047
7144
|
});
|
|
7048
7145
|
}
|
|
7146
|
+
if (Number.isFinite(delta) && Math.abs(delta) > this._largeGapThreshold * MAX_SILENT_FRAME_DURATION) {
|
|
7147
|
+
largeGap = true;
|
|
7148
|
+
}
|
|
7149
|
+
if (!this._baseDtsInited) {
|
|
7150
|
+
if (largeGap && this._needForceFixLargeGap) {
|
|
7151
|
+
this._needForceFixLargeGap = true;
|
|
7152
|
+
} else {
|
|
7153
|
+
this._needForceFixLargeGap = false;
|
|
7154
|
+
}
|
|
7155
|
+
}
|
|
7049
7156
|
this._baseDtsInited = true;
|
|
7050
7157
|
return true;
|
|
7051
7158
|
}
|
|
@@ -7139,6 +7246,7 @@
|
|
|
7139
7246
|
var logger$4 = new Logger$1("TsDemuxer");
|
|
7140
7247
|
var TsDemuxer = /* @__PURE__ */ function() {
|
|
7141
7248
|
function TsDemuxer2(videoTrack, audioTrack, metadataTrack) {
|
|
7249
|
+
var fixerConfig = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
|
|
7142
7250
|
_classCallCheck(this, TsDemuxer2);
|
|
7143
7251
|
_defineProperty(this, "_pmtId", -1);
|
|
7144
7252
|
_defineProperty(this, "_remainingPacketData", null);
|
|
@@ -7148,7 +7256,7 @@
|
|
|
7148
7256
|
this.videoTrack = videoTrack || new VideoTrack();
|
|
7149
7257
|
this.audioTrack = audioTrack || new AudioTrack();
|
|
7150
7258
|
this.metadataTrack = metadataTrack || new MetadataTrack();
|
|
7151
|
-
this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack);
|
|
7259
|
+
this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack, fixerConfig);
|
|
7152
7260
|
}
|
|
7153
7261
|
_createClass(TsDemuxer2, [{
|
|
7154
7262
|
key: "demux",
|
|
@@ -7495,6 +7603,207 @@
|
|
|
7495
7603
|
}]);
|
|
7496
7604
|
return TsDemuxer2;
|
|
7497
7605
|
}();
|
|
7606
|
+
var ByteReader = /* @__PURE__ */ function() {
|
|
7607
|
+
function ByteReader2(buf, offset, len) {
|
|
7608
|
+
_classCallCheck(this, ByteReader2);
|
|
7609
|
+
this.dv = new DataView(buf);
|
|
7610
|
+
this.start = this.offset = offset || this.dv.byteOffset;
|
|
7611
|
+
this.end = len ? this.start + len : this.start + this.dv.byteLength;
|
|
7612
|
+
}
|
|
7613
|
+
_createClass(ByteReader2, [{
|
|
7614
|
+
key: "buffer",
|
|
7615
|
+
get: function get() {
|
|
7616
|
+
return this.dv.buffer;
|
|
7617
|
+
}
|
|
7618
|
+
}, {
|
|
7619
|
+
key: "unreadLength",
|
|
7620
|
+
get: function get() {
|
|
7621
|
+
return Math.max(this.end - this.offset, 0);
|
|
7622
|
+
}
|
|
7623
|
+
}, {
|
|
7624
|
+
key: "size",
|
|
7625
|
+
get: function get() {
|
|
7626
|
+
return this.end - this.start;
|
|
7627
|
+
}
|
|
7628
|
+
}, {
|
|
7629
|
+
key: "readFloat",
|
|
7630
|
+
value: function readFloat(byteNum) {
|
|
7631
|
+
var val = 0;
|
|
7632
|
+
switch (byteNum) {
|
|
7633
|
+
case 4:
|
|
7634
|
+
val = this.dv.getFloat32(this.offset);
|
|
7635
|
+
break;
|
|
7636
|
+
case 8:
|
|
7637
|
+
val = this.dv.getFloat64(this.offset);
|
|
7638
|
+
break;
|
|
7639
|
+
default:
|
|
7640
|
+
throw new Error("read ".concat(byteNum, "-byte float is not supported"));
|
|
7641
|
+
}
|
|
7642
|
+
this.offset += byteNum;
|
|
7643
|
+
return val;
|
|
7644
|
+
}
|
|
7645
|
+
}, {
|
|
7646
|
+
key: "back",
|
|
7647
|
+
value: function back(byteNum) {
|
|
7648
|
+
this.offset -= byteNum;
|
|
7649
|
+
}
|
|
7650
|
+
}, {
|
|
7651
|
+
key: "skip",
|
|
7652
|
+
value: function skip(byteNum) {
|
|
7653
|
+
this.offset += byteNum;
|
|
7654
|
+
}
|
|
7655
|
+
}, {
|
|
7656
|
+
key: "readInt",
|
|
7657
|
+
value: function readInt(byteNum) {
|
|
7658
|
+
var offset = this.offset;
|
|
7659
|
+
this.offset += byteNum;
|
|
7660
|
+
switch (byteNum) {
|
|
7661
|
+
case 1:
|
|
7662
|
+
return this.dv.getInt8(offset);
|
|
7663
|
+
case 2:
|
|
7664
|
+
return this.dv.getInt16(offset);
|
|
7665
|
+
case 4:
|
|
7666
|
+
return this.dv.getInt32(offset);
|
|
7667
|
+
default:
|
|
7668
|
+
throw new Error("read ".concat(byteNum, "-byte integers is not supported"));
|
|
7669
|
+
}
|
|
7670
|
+
}
|
|
7671
|
+
}, {
|
|
7672
|
+
key: "read",
|
|
7673
|
+
value: function read(byteNum) {
|
|
7674
|
+
var offset = this.offset;
|
|
7675
|
+
this.offset += byteNum;
|
|
7676
|
+
switch (byteNum) {
|
|
7677
|
+
case 1:
|
|
7678
|
+
return this.dv.getUint8(offset);
|
|
7679
|
+
case 2:
|
|
7680
|
+
return this.dv.getUint16(offset);
|
|
7681
|
+
case 3:
|
|
7682
|
+
return (this.dv.getUint16(offset) << 8) + this.dv.getUint8(offset + 2);
|
|
7683
|
+
case 4:
|
|
7684
|
+
return this.dv.getUint32(offset);
|
|
7685
|
+
default:
|
|
7686
|
+
this.back(byteNum - 4);
|
|
7687
|
+
return this.read(byteNum - 4) + this.dv.getUint32(offset) * Math.pow(256, byteNum - 4);
|
|
7688
|
+
}
|
|
7689
|
+
}
|
|
7690
|
+
}, {
|
|
7691
|
+
key: "write",
|
|
7692
|
+
value: function write(byteNum, val) {
|
|
7693
|
+
var offset = this.offset;
|
|
7694
|
+
this.offset += byteNum;
|
|
7695
|
+
switch (byteNum) {
|
|
7696
|
+
case 1:
|
|
7697
|
+
return this.dv.setUint8(offset, val);
|
|
7698
|
+
case 2:
|
|
7699
|
+
return this.dv.setUint16(offset, val);
|
|
7700
|
+
case 3:
|
|
7701
|
+
return this.dv.setUint8(offset, val >>> 16), this.dv.setUint16(offset + 1, 65535 & val);
|
|
7702
|
+
case 4:
|
|
7703
|
+
return this.dv.setUint32(offset, val);
|
|
7704
|
+
default:
|
|
7705
|
+
throw new Error("write ".concat(byteNum, "-byte integers is not supported"));
|
|
7706
|
+
}
|
|
7707
|
+
}
|
|
7708
|
+
}, {
|
|
7709
|
+
key: "readToBuffer",
|
|
7710
|
+
value: function readToBuffer(len) {
|
|
7711
|
+
var buffer;
|
|
7712
|
+
if (this.offset || len) {
|
|
7713
|
+
buffer = this.dv.buffer.slice(this.offset, len ? this.offset + len : this.end);
|
|
7714
|
+
} else {
|
|
7715
|
+
buffer = this.dv.buffer;
|
|
7716
|
+
}
|
|
7717
|
+
this.offset += buffer.byteLength;
|
|
7718
|
+
return buffer;
|
|
7719
|
+
}
|
|
7720
|
+
}, {
|
|
7721
|
+
key: "readToUint8",
|
|
7722
|
+
value: function readToUint8(len) {
|
|
7723
|
+
var uint8 = new Uint8Array(this.dv.buffer, this.offset, len || this.unreadLength);
|
|
7724
|
+
this.offset += uint8.byteLength;
|
|
7725
|
+
return uint8;
|
|
7726
|
+
}
|
|
7727
|
+
}, {
|
|
7728
|
+
key: "readString",
|
|
7729
|
+
value: function readString(len) {
|
|
7730
|
+
var i = 0, str = "";
|
|
7731
|
+
for (; i < len; i++) {
|
|
7732
|
+
str += String.fromCharCode(this.dv.getUint8(this.offset));
|
|
7733
|
+
this.offset++;
|
|
7734
|
+
}
|
|
7735
|
+
return str;
|
|
7736
|
+
}
|
|
7737
|
+
}], [{
|
|
7738
|
+
key: "fromUint8",
|
|
7739
|
+
value: function fromUint8(uint8) {
|
|
7740
|
+
return new ByteReader2(uint8.buffer, uint8.byteOffset, uint8.byteLength);
|
|
7741
|
+
}
|
|
7742
|
+
}, {
|
|
7743
|
+
key: "concatUint8s",
|
|
7744
|
+
value: function concatUint8s(args) {
|
|
7745
|
+
var uint8 = new Uint8Array(args.reduce(function(ret, v) {
|
|
7746
|
+
return ret + v.byteLength;
|
|
7747
|
+
}, 0));
|
|
7748
|
+
var offset = 0;
|
|
7749
|
+
args.forEach(function(v) {
|
|
7750
|
+
uint8.set(v, offset);
|
|
7751
|
+
offset += v.byteLength;
|
|
7752
|
+
});
|
|
7753
|
+
return uint8;
|
|
7754
|
+
}
|
|
7755
|
+
}, {
|
|
7756
|
+
key: "concatUint8",
|
|
7757
|
+
value: function concatUint8() {
|
|
7758
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
7759
|
+
args[_key] = arguments[_key];
|
|
7760
|
+
}
|
|
7761
|
+
return this.concatUint8s(args);
|
|
7762
|
+
}
|
|
7763
|
+
}]);
|
|
7764
|
+
return ByteReader2;
|
|
7765
|
+
}();
|
|
7766
|
+
var BitReader = /* @__PURE__ */ function() {
|
|
7767
|
+
function BitReader2(val, size) {
|
|
7768
|
+
_classCallCheck(this, BitReader2);
|
|
7769
|
+
this.offset = 0;
|
|
7770
|
+
this.val = val;
|
|
7771
|
+
this.size = size;
|
|
7772
|
+
}
|
|
7773
|
+
_createClass(BitReader2, [{
|
|
7774
|
+
key: "skip",
|
|
7775
|
+
value: function skip(len) {
|
|
7776
|
+
this.offset += len;
|
|
7777
|
+
}
|
|
7778
|
+
}, {
|
|
7779
|
+
key: "read",
|
|
7780
|
+
value: function read(len) {
|
|
7781
|
+
var unreadLength = this.size - this.offset - len;
|
|
7782
|
+
if (unreadLength >= 0) {
|
|
7783
|
+
var bits = 0, i = 0;
|
|
7784
|
+
this.offset += len;
|
|
7785
|
+
if (this.size > 31) {
|
|
7786
|
+
for (; i < len; i++) {
|
|
7787
|
+
bits += Math.pow(2, i);
|
|
7788
|
+
}
|
|
7789
|
+
return this.val / Math.pow(2, unreadLength) & bits;
|
|
7790
|
+
} else {
|
|
7791
|
+
for (; i < len; i++) {
|
|
7792
|
+
bits += 1 << i;
|
|
7793
|
+
}
|
|
7794
|
+
return this.val >>> unreadLength & bits;
|
|
7795
|
+
}
|
|
7796
|
+
}
|
|
7797
|
+
throw new Error("the number of the read operation exceeds the total length limit of bits");
|
|
7798
|
+
}
|
|
7799
|
+
}], [{
|
|
7800
|
+
key: "fromByte",
|
|
7801
|
+
value: function fromByte(byte, len) {
|
|
7802
|
+
return new BitReader2(byte.read(len), len << 3);
|
|
7803
|
+
}
|
|
7804
|
+
}]);
|
|
7805
|
+
return BitReader2;
|
|
7806
|
+
}();
|
|
7498
7807
|
var MP4Parser = /* @__PURE__ */ function() {
|
|
7499
7808
|
function MP4Parser2() {
|
|
7500
7809
|
_classCallCheck(this, MP4Parser2);
|
|
@@ -7652,18 +7961,36 @@
|
|
|
7652
7961
|
key: "tkhd",
|
|
7653
7962
|
value: function tkhd(box) {
|
|
7654
7963
|
return parseBox(box, true, function(ret, data) {
|
|
7655
|
-
var
|
|
7964
|
+
var byte = ByteReader.fromUint8(data);
|
|
7656
7965
|
if (ret.version === 1) {
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
|
|
7966
|
+
byte.read(8);
|
|
7967
|
+
byte.read(8);
|
|
7968
|
+
ret.trackId = byte.read(4);
|
|
7969
|
+
byte.read(4);
|
|
7970
|
+
ret.duration = byte.read(8);
|
|
7660
7971
|
} else {
|
|
7661
|
-
|
|
7662
|
-
|
|
7663
|
-
|
|
7972
|
+
byte.read(4);
|
|
7973
|
+
byte.read(4);
|
|
7974
|
+
ret.trackId = byte.read(4);
|
|
7975
|
+
byte.read(4);
|
|
7976
|
+
ret.duration = byte.read(4);
|
|
7977
|
+
}
|
|
7978
|
+
byte.skip(16);
|
|
7979
|
+
ret.matrix = [];
|
|
7980
|
+
for (var i = 0; i < 36; i++) {
|
|
7981
|
+
ret.matrix.push(byte.read(1));
|
|
7982
|
+
}
|
|
7983
|
+
byte.back(36);
|
|
7984
|
+
var caculatedMatrix = [];
|
|
7985
|
+
for (var _i = 0, int32; _i < 3; _i++) {
|
|
7986
|
+
caculatedMatrix.push(combineToFloat(byte.readInt(2), byte.readInt(2)));
|
|
7987
|
+
caculatedMatrix.push(combineToFloat(byte.readInt(2), byte.readInt(2)));
|
|
7988
|
+
int32 = byte.readInt(4);
|
|
7989
|
+
caculatedMatrix.push(combineToFloat(int32 >> 30, int32 & 1073741823));
|
|
7664
7990
|
}
|
|
7665
|
-
ret.
|
|
7666
|
-
ret.
|
|
7991
|
+
ret.rotation = toDegree(caculatedMatrix);
|
|
7992
|
+
ret.width = byte.read(4);
|
|
7993
|
+
ret.height = byte.read(4);
|
|
7667
7994
|
});
|
|
7668
7995
|
}
|
|
7669
7996
|
}, {
|
|
@@ -7793,7 +8120,7 @@
|
|
|
7793
8120
|
if (ret.version > 0) {
|
|
7794
8121
|
var numKeyIds = readBig32(data, start);
|
|
7795
8122
|
start += 4;
|
|
7796
|
-
for (var
|
|
8123
|
+
for (var _i2 = 0; _i2 < ("" + numKeyIds).length; _i2++) {
|
|
7797
8124
|
for (var j = 0; j < 16; j++) {
|
|
7798
8125
|
var keyId = data[start];
|
|
7799
8126
|
start += 1;
|
|
@@ -7816,6 +8143,8 @@
|
|
|
7816
8143
|
ret.entryCount = readBig32(data);
|
|
7817
8144
|
ret.entries = MP4Parser2.findBox(data.subarray(4), [], start + 4).map(function(b) {
|
|
7818
8145
|
switch (b.type) {
|
|
8146
|
+
case "av01":
|
|
8147
|
+
return MP4Parser2.av01(b);
|
|
7819
8148
|
case "avc1":
|
|
7820
8149
|
case "avc2":
|
|
7821
8150
|
case "avc3":
|
|
@@ -7895,6 +8224,69 @@
|
|
|
7895
8224
|
}
|
|
7896
8225
|
});
|
|
7897
8226
|
}
|
|
8227
|
+
}, {
|
|
8228
|
+
key: "colr",
|
|
8229
|
+
value: function colr(box) {
|
|
8230
|
+
return parseBox(box, false, function(ret, data) {
|
|
8231
|
+
var byte = ByteReader.fromUint8(data);
|
|
8232
|
+
ret.data = box.data;
|
|
8233
|
+
ret.colorType = byte.readString(4);
|
|
8234
|
+
if (ret.colorType === "nclx") {
|
|
8235
|
+
ret.colorPrimaries = byte.read(2);
|
|
8236
|
+
ret.transferCharacteristics = byte.read(2);
|
|
8237
|
+
ret.matrixCoefficients = byte.read(2);
|
|
8238
|
+
ret.fullRangeFlag = byte.read(1) >> 7;
|
|
8239
|
+
} else if (ret.colorType === "rICC" || ret.colorType === "prof") {
|
|
8240
|
+
ret.iccProfile = data.readToUint8();
|
|
8241
|
+
}
|
|
8242
|
+
});
|
|
8243
|
+
}
|
|
8244
|
+
}, {
|
|
8245
|
+
key: "av01",
|
|
8246
|
+
value: function av01(box) {
|
|
8247
|
+
return parseBox(box, false, function(ret, data, start) {
|
|
8248
|
+
var bodyStart = parseVisualSampleEntry(ret, data);
|
|
8249
|
+
var bodyData = data.subarray(bodyStart);
|
|
8250
|
+
start += bodyStart;
|
|
8251
|
+
ret.av1C = MP4Parser2.av1C(MP4Parser2.findBox(bodyData, ["av1C"], start)[0]);
|
|
8252
|
+
ret.colr = MP4Parser2.colr(MP4Parser2.findBox(bodyData, ["colr"], start)[0]);
|
|
8253
|
+
});
|
|
8254
|
+
}
|
|
8255
|
+
}, {
|
|
8256
|
+
key: "av1C",
|
|
8257
|
+
value: function av1C(box) {
|
|
8258
|
+
return parseBox(box, false, function(ret, data) {
|
|
8259
|
+
ret.data = box.data;
|
|
8260
|
+
var byte = ByteReader.fromUint8(data);
|
|
8261
|
+
var bit = BitReader.fromByte(byte, 4);
|
|
8262
|
+
ret.marker = bit.read(1);
|
|
8263
|
+
ret.version = bit.read(7);
|
|
8264
|
+
ret.seqProfile = bit.read(3);
|
|
8265
|
+
ret.seqLevelIdx0 = bit.read(5);
|
|
8266
|
+
ret.seqTier0 = bit.read(1);
|
|
8267
|
+
ret.highBitdepth = bit.read(1);
|
|
8268
|
+
ret.twelveBit = bit.read(1);
|
|
8269
|
+
ret.monochrome = bit.read(1);
|
|
8270
|
+
ret.chromaSubsamplingX = bit.read(1);
|
|
8271
|
+
ret.chromaSubsamplingY = bit.read(1);
|
|
8272
|
+
ret.chromaSamplePosition = bit.read(2);
|
|
8273
|
+
ret.reserved = bit.read(3);
|
|
8274
|
+
ret.initialPresentationDelayPresent = bit.read(1);
|
|
8275
|
+
if (ret.initialPresentationDelayPresent) {
|
|
8276
|
+
ret.initialPresentationDelayMinusOne = bit.read(4);
|
|
8277
|
+
} else {
|
|
8278
|
+
ret.initialPresentationDelayMinusOne = 0;
|
|
8279
|
+
}
|
|
8280
|
+
ret.configOBUs = byte.readToUint8();
|
|
8281
|
+
var bitdepth;
|
|
8282
|
+
if (ret.seqLevelIdx0 === 2 && ret.highBitdepth === 1) {
|
|
8283
|
+
bitdepth = ret.twelveBit === 1 ? "12" : "10";
|
|
8284
|
+
} else if (ret.seqProfile <= 2) {
|
|
8285
|
+
bitdepth = ret.highBitdepth === 1 ? "10" : "08";
|
|
8286
|
+
}
|
|
8287
|
+
ret.codec = ["av01", ret.seqProfile, (ret.seqLevelIdx0 < 10 ? "0" + ret.seqLevelIdx0 : ret.seqLevelIdx0) + (ret.seqTier0 ? "H" : "M"), bitdepth].join(".");
|
|
8288
|
+
});
|
|
8289
|
+
}
|
|
7898
8290
|
}, {
|
|
7899
8291
|
key: "avc1",
|
|
7900
8292
|
value: function avc1(box) {
|
|
@@ -7929,7 +8321,7 @@
|
|
|
7929
8321
|
ret.ppsLength = data[start];
|
|
7930
8322
|
start += 1;
|
|
7931
8323
|
ret.pps = [];
|
|
7932
|
-
for (var
|
|
8324
|
+
for (var _i3 = 0; _i3 < ret.ppsLength; _i3++) {
|
|
7933
8325
|
var _size = readBig16(data, start);
|
|
7934
8326
|
start += 2;
|
|
7935
8327
|
ret.pps.push(data.subarray(start, start += _size));
|
|
@@ -8098,7 +8490,7 @@
|
|
|
8098
8490
|
start += 8;
|
|
8099
8491
|
}
|
|
8100
8492
|
} else {
|
|
8101
|
-
for (var
|
|
8493
|
+
for (var _i4 = 0; _i4 < entryCount; _i4++) {
|
|
8102
8494
|
entries.push({
|
|
8103
8495
|
count: readBig32(data, start),
|
|
8104
8496
|
offset: -(~readBig32(data, start + 4) + 1)
|
|
@@ -8320,13 +8712,20 @@
|
|
|
8320
8712
|
v.mvhdTimecale = moov.mvhd.timescale;
|
|
8321
8713
|
v.timescale = v.formatTimescale = vTrack.mdia.mdhd.timescale;
|
|
8322
8714
|
v.duration = vTrack.mdia.mdhd.duration || v.mvhdDurtion / v.mvhdTimecale * v.timescale;
|
|
8715
|
+
v.rotation = vTrack.tkhd.rotation;
|
|
8716
|
+
v.matrix = vTrack.tkhd.matrix;
|
|
8323
8717
|
var e1 = vTrack.mdia.minf.stbl.stsd.entries[0];
|
|
8324
8718
|
v.width = e1.width;
|
|
8325
8719
|
v.height = e1.height;
|
|
8326
8720
|
if (e1.pasp) {
|
|
8327
8721
|
v.sarRatio = [e1.pasp.hSpacing, e1.pasp.vSpacing];
|
|
8328
8722
|
}
|
|
8329
|
-
if (e1.
|
|
8723
|
+
if (e1.av1C) {
|
|
8724
|
+
v.codecType = VideoCodecType.AV1;
|
|
8725
|
+
v.codec = e1.av1C.codec;
|
|
8726
|
+
v.av1C = e1.av1C.data;
|
|
8727
|
+
v.colr = e1.colr.data;
|
|
8728
|
+
} else if (e1.hvcC) {
|
|
8330
8729
|
v.codecType = VideoCodecType.HEVC;
|
|
8331
8730
|
v.codec = e1.hvcC.codec;
|
|
8332
8731
|
v.vps = e1.hvcC.vps;
|
|
@@ -8645,8 +9044,9 @@
|
|
|
8645
9044
|
function parseBox(box, isFullBox, parse2) {
|
|
8646
9045
|
if (!box)
|
|
8647
9046
|
return;
|
|
8648
|
-
if (box.size !== box.data.length)
|
|
9047
|
+
if (box.size !== box.data.length) {
|
|
8649
9048
|
throw new Error("box ".concat(box.type, " size !== data.length"));
|
|
9049
|
+
}
|
|
8650
9050
|
var ret = {
|
|
8651
9051
|
start: box.start,
|
|
8652
9052
|
size: box.size,
|
|
@@ -8685,11 +9085,167 @@
|
|
|
8685
9085
|
var FMP4Demuxer = /* @__PURE__ */ function() {
|
|
8686
9086
|
function FMP4Demuxer2(videoTrack, audioTrack, metadataTrack) {
|
|
8687
9087
|
_classCallCheck(this, FMP4Demuxer2);
|
|
9088
|
+
_defineProperty(this, "__loadedMoofWraps", []);
|
|
9089
|
+
_defineProperty(this, "__lastRemainData", null);
|
|
9090
|
+
_defineProperty(this, "__lastRemainDataStart", 0);
|
|
9091
|
+
_defineProperty(this, "__nextMoofStart", -1);
|
|
8688
9092
|
this.videoTrack = videoTrack || new VideoTrack();
|
|
8689
9093
|
this.audioTrack = audioTrack || new AudioTrack();
|
|
8690
9094
|
this.metadataTrack = metadataTrack || new MetadataTrack();
|
|
8691
9095
|
}
|
|
8692
9096
|
_createClass(FMP4Demuxer2, [{
|
|
9097
|
+
key: "demuxPart",
|
|
9098
|
+
value: function demuxPart(partData, partDataStart, moov) {
|
|
9099
|
+
var _this = this;
|
|
9100
|
+
var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
|
|
9101
|
+
var videoExist = videoTrack.exist();
|
|
9102
|
+
var audioExist = audioTrack.exist();
|
|
9103
|
+
var isAV01 = /av01/.test(videoTrack.codec);
|
|
9104
|
+
videoTrack.samples = [];
|
|
9105
|
+
audioTrack.samples = [];
|
|
9106
|
+
var data = partData;
|
|
9107
|
+
var dataStart = partDataStart;
|
|
9108
|
+
if (this.__lastRemainData) {
|
|
9109
|
+
var lastRemainDataEnd = this.__lastRemainDataStart + this.__lastRemainData.byteLength;
|
|
9110
|
+
var continuous = partDataStart <= lastRemainDataEnd && partDataStart > this.__lastRemainDataStart && partDataStart + partData.byteLength > lastRemainDataEnd;
|
|
9111
|
+
if (continuous) {
|
|
9112
|
+
var noDuplicateData = partData.subarray(this.__lastRemainData.byteLength + this.__lastRemainDataStart - partDataStart);
|
|
9113
|
+
data = concatUint8Array(this.__lastRemainData, noDuplicateData);
|
|
9114
|
+
dataStart = this.__lastRemainDataStart;
|
|
9115
|
+
this.__lastRemainData = null;
|
|
9116
|
+
} else {
|
|
9117
|
+
this.__lastRemainData = null;
|
|
9118
|
+
this.__lastRemainDataStart = 0;
|
|
9119
|
+
this.__nextMoofStart = -1;
|
|
9120
|
+
}
|
|
9121
|
+
}
|
|
9122
|
+
if (!moov) {
|
|
9123
|
+
var moovBox = MP4Parser.findBox(data, ["moov"])[0];
|
|
9124
|
+
if (!moovBox)
|
|
9125
|
+
throw new Error("cannot found moov box");
|
|
9126
|
+
moov = MP4Parser.moov(moovBox);
|
|
9127
|
+
}
|
|
9128
|
+
if (data) {
|
|
9129
|
+
var dataEnd = dataStart + data.byteLength;
|
|
9130
|
+
if (!videoExist && !audioExist) {
|
|
9131
|
+
MP4Parser.moovToTrack(moov, videoTrack, audioTrack);
|
|
9132
|
+
}
|
|
9133
|
+
var moofBoxes = [];
|
|
9134
|
+
if (this.__nextMoofStart < 0) {
|
|
9135
|
+
MP4Parser.findBox(data, ["moof"], dataStart).forEach(function(v) {
|
|
9136
|
+
return moofBoxes.push(v);
|
|
9137
|
+
});
|
|
9138
|
+
} else if (this.__nextMoofStart >= dataStart && this.__nextMoofStart <= dataEnd - 8) {
|
|
9139
|
+
MP4Parser.findBox(data.subarray(this.__nextMoofStart - dataStart), ["moof"], this.__nextMoofStart).forEach(function(v) {
|
|
9140
|
+
return moofBoxes.push(v);
|
|
9141
|
+
});
|
|
9142
|
+
}
|
|
9143
|
+
moofBoxes.filter(function(moofBox) {
|
|
9144
|
+
return moofBox.size <= moofBox.data.length;
|
|
9145
|
+
}).forEach(function(moofBox) {
|
|
9146
|
+
var moof = MP4Parser.moof(moofBox);
|
|
9147
|
+
_this.__nextMoofStart = moof.start + Math.max.apply(Math, _toConsumableArray(moof.traf.map(function(v) {
|
|
9148
|
+
return v.trun.samples.reduce(function(ret, w) {
|
|
9149
|
+
return ret + w.size;
|
|
9150
|
+
}, v.trun.dataOffset || 0);
|
|
9151
|
+
})));
|
|
9152
|
+
_this.__loadedMoofWraps.push({
|
|
9153
|
+
start: moof.start,
|
|
9154
|
+
nextMoofStart: _this.__nextMoofStart,
|
|
9155
|
+
moof
|
|
9156
|
+
});
|
|
9157
|
+
_this.__loadedMoofWraps.sort(function(p, n) {
|
|
9158
|
+
return p.start - n.start;
|
|
9159
|
+
});
|
|
9160
|
+
});
|
|
9161
|
+
var _iterator = _createForOfIteratorHelper(this.__loadedMoofWraps), _step;
|
|
9162
|
+
try {
|
|
9163
|
+
var _loop = function _loop2() {
|
|
9164
|
+
var moofWrap = _step.value;
|
|
9165
|
+
if (moofWrap.start > dataEnd || moofWrap.nextMoofStart < dataStart) {
|
|
9166
|
+
return "continue";
|
|
9167
|
+
}
|
|
9168
|
+
var moofStart = moofWrap.start;
|
|
9169
|
+
var tracks = MP4Parser.moofToSamples(moofWrap.moof, videoTrack, audioTrack);
|
|
9170
|
+
var videoBaseMediaDecodeTime = videoTrack.baseMediaDecodeTime;
|
|
9171
|
+
var audioBaseMediaDecodeTime = audioTrack.baseMediaDecodeTime;
|
|
9172
|
+
var nalSize;
|
|
9173
|
+
Object.keys(tracks).forEach(function(k) {
|
|
9174
|
+
if (videoTrack.id == k) {
|
|
9175
|
+
tracks[k].some(function(x) {
|
|
9176
|
+
var xStart = x.offset += moofStart;
|
|
9177
|
+
if (xStart < dataStart) {
|
|
9178
|
+
return;
|
|
9179
|
+
}
|
|
9180
|
+
if (xStart + x.size > dataEnd) {
|
|
9181
|
+
return true;
|
|
9182
|
+
}
|
|
9183
|
+
var sample = new VideoSample((x.pts || x.dts) + videoBaseMediaDecodeTime, x.dts + videoBaseMediaDecodeTime);
|
|
9184
|
+
sample.duration = x.duration;
|
|
9185
|
+
sample.gopId = x.gopId;
|
|
9186
|
+
if (x.keyframe)
|
|
9187
|
+
sample.setToKeyframe();
|
|
9188
|
+
var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
|
|
9189
|
+
sample.data = sampleData;
|
|
9190
|
+
if (!isAV01) {
|
|
9191
|
+
var start = 0;
|
|
9192
|
+
var len = sampleData.length - 1;
|
|
9193
|
+
while (start < len) {
|
|
9194
|
+
nalSize = readBig32(sampleData, start);
|
|
9195
|
+
start += 4;
|
|
9196
|
+
sample.units.push(sampleData.subarray(start, start + nalSize));
|
|
9197
|
+
start += nalSize;
|
|
9198
|
+
}
|
|
9199
|
+
}
|
|
9200
|
+
_this.__lastRemainDataStart = xStart + x.size;
|
|
9201
|
+
videoTrack.samples.push(sample);
|
|
9202
|
+
});
|
|
9203
|
+
} else if (audioTrack.id == k) {
|
|
9204
|
+
tracks[k].some(function(x) {
|
|
9205
|
+
var xStart = x.offset + moofStart;
|
|
9206
|
+
if (xStart < dataStart) {
|
|
9207
|
+
return;
|
|
9208
|
+
}
|
|
9209
|
+
if (xStart + x.size > dataEnd) {
|
|
9210
|
+
return true;
|
|
9211
|
+
}
|
|
9212
|
+
var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
|
|
9213
|
+
audioTrack.samples.push(new AudioSample(x.dts + audioBaseMediaDecodeTime, sampleData, x.duration));
|
|
9214
|
+
_this.__lastRemainDataStart = xStart + x.size;
|
|
9215
|
+
});
|
|
9216
|
+
}
|
|
9217
|
+
});
|
|
9218
|
+
};
|
|
9219
|
+
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
|
|
9220
|
+
var _ret = _loop();
|
|
9221
|
+
if (_ret === "continue")
|
|
9222
|
+
continue;
|
|
9223
|
+
}
|
|
9224
|
+
} catch (err) {
|
|
9225
|
+
_iterator.e(err);
|
|
9226
|
+
} finally {
|
|
9227
|
+
_iterator.f();
|
|
9228
|
+
}
|
|
9229
|
+
}
|
|
9230
|
+
if (this.__lastRemainDataStart > dataStart && this.__lastRemainDataStart < data.byteLength + dataStart) {
|
|
9231
|
+
this.__lastRemainData = data.subarray(this.__lastRemainDataStart - dataStart);
|
|
9232
|
+
} else {
|
|
9233
|
+
this.__lastRemainData = data;
|
|
9234
|
+
this.__lastRemainDataStart = dataStart;
|
|
9235
|
+
}
|
|
9236
|
+
if (videoTrack.samples.length) {
|
|
9237
|
+
videoTrack.baseMediaDecodeTime = videoTrack.samples[0].pts;
|
|
9238
|
+
}
|
|
9239
|
+
if (audioTrack.samples.length) {
|
|
9240
|
+
audioTrack.baseMediaDecodeTime = audioTrack.samples[0].pts;
|
|
9241
|
+
}
|
|
9242
|
+
return {
|
|
9243
|
+
videoTrack,
|
|
9244
|
+
audioTrack,
|
|
9245
|
+
metadataTrack: this.metadataTrack
|
|
9246
|
+
};
|
|
9247
|
+
}
|
|
9248
|
+
}, {
|
|
8693
9249
|
key: "demux",
|
|
8694
9250
|
value: function demux(videoData, audioData) {
|
|
8695
9251
|
var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
|
|
@@ -9185,6 +9741,8 @@
|
|
|
9185
9741
|
}
|
|
9186
9742
|
} else if (track.useEME && track.encv) {
|
|
9187
9743
|
content = MP42.encv(track);
|
|
9744
|
+
} else if (track.av1C) {
|
|
9745
|
+
content = MP42.av01(track);
|
|
9188
9746
|
} else {
|
|
9189
9747
|
content = MP42.avc1hev1(track);
|
|
9190
9748
|
}
|
|
@@ -9397,6 +9955,90 @@
|
|
|
9397
9955
|
var schi = MP42.schi(data);
|
|
9398
9956
|
return MP42.box(MP42.types.sinf, content, MP42.box(MP42.types.frma, frma), MP42.box(MP42.types.schm, schm), schi);
|
|
9399
9957
|
}
|
|
9958
|
+
}, {
|
|
9959
|
+
key: "av01",
|
|
9960
|
+
value: function av01(track) {
|
|
9961
|
+
return MP42.box(MP42.types.av01, new Uint8Array([
|
|
9962
|
+
0,
|
|
9963
|
+
0,
|
|
9964
|
+
0,
|
|
9965
|
+
0,
|
|
9966
|
+
0,
|
|
9967
|
+
0,
|
|
9968
|
+
0,
|
|
9969
|
+
1,
|
|
9970
|
+
0,
|
|
9971
|
+
0,
|
|
9972
|
+
0,
|
|
9973
|
+
0,
|
|
9974
|
+
0,
|
|
9975
|
+
0,
|
|
9976
|
+
0,
|
|
9977
|
+
0,
|
|
9978
|
+
0,
|
|
9979
|
+
0,
|
|
9980
|
+
0,
|
|
9981
|
+
0,
|
|
9982
|
+
0,
|
|
9983
|
+
0,
|
|
9984
|
+
0,
|
|
9985
|
+
0,
|
|
9986
|
+
track.width >> 8 & 255,
|
|
9987
|
+
track.width & 255,
|
|
9988
|
+
track.height >> 8 & 255,
|
|
9989
|
+
track.height & 255,
|
|
9990
|
+
0,
|
|
9991
|
+
72,
|
|
9992
|
+
0,
|
|
9993
|
+
0,
|
|
9994
|
+
0,
|
|
9995
|
+
72,
|
|
9996
|
+
0,
|
|
9997
|
+
0,
|
|
9998
|
+
0,
|
|
9999
|
+
0,
|
|
10000
|
+
0,
|
|
10001
|
+
0,
|
|
10002
|
+
0,
|
|
10003
|
+
1,
|
|
10004
|
+
0,
|
|
10005
|
+
0,
|
|
10006
|
+
0,
|
|
10007
|
+
0,
|
|
10008
|
+
0,
|
|
10009
|
+
0,
|
|
10010
|
+
0,
|
|
10011
|
+
0,
|
|
10012
|
+
0,
|
|
10013
|
+
0,
|
|
10014
|
+
0,
|
|
10015
|
+
0,
|
|
10016
|
+
0,
|
|
10017
|
+
0,
|
|
10018
|
+
0,
|
|
10019
|
+
0,
|
|
10020
|
+
0,
|
|
10021
|
+
0,
|
|
10022
|
+
0,
|
|
10023
|
+
0,
|
|
10024
|
+
0,
|
|
10025
|
+
0,
|
|
10026
|
+
0,
|
|
10027
|
+
0,
|
|
10028
|
+
0,
|
|
10029
|
+
0,
|
|
10030
|
+
0,
|
|
10031
|
+
0,
|
|
10032
|
+
0,
|
|
10033
|
+
0,
|
|
10034
|
+
0,
|
|
10035
|
+
0,
|
|
10036
|
+
0,
|
|
10037
|
+
24,
|
|
10038
|
+
17,
|
|
10039
|
+
17
|
|
10040
|
+
]), track.av1C, track.colr);
|
|
10041
|
+
}
|
|
9400
10042
|
}, {
|
|
9401
10043
|
key: "avc1hev1",
|
|
9402
10044
|
value: function avc1hev1(track) {
|
|
@@ -10369,7 +11011,7 @@
|
|
|
10369
11011
|
}]);
|
|
10370
11012
|
return MP42;
|
|
10371
11013
|
}();
|
|
10372
|
-
_defineProperty(MP4, "types", ["avc1", "avcC", "hvc1", "hvcC", "dinf", "dref", "esds", "ftyp", "hdlr", "mdat", "mdhd", "mdia", "mfhd", "minf", "moof", "moov", "mp4a", "mvex", "mvhd", "pasp", "stbl", "stco", "stsc", "stsd", "stsz", "stts", "tfdt", "tfhd", "traf", "trak", "trex", "tkhd", "vmhd", "smhd", "ctts", "stss", "styp", "pssh", "sidx", "sbgp", "saiz", "saio", "senc", "trun", "encv", "enca", "sinf", "btrt", "frma", "tenc", "schm", "schi", "mehd", "fiel", "sdtp"].reduce(function(p, c) {
|
|
11014
|
+
_defineProperty(MP4, "types", ["av01", "av1C", "avc1", "avcC", "hvc1", "hvcC", "dinf", "dref", "esds", "ftyp", "hdlr", "mdat", "mdhd", "mdia", "mfhd", "minf", "moof", "moov", "mp4a", "mvex", "mvhd", "pasp", "stbl", "stco", "stsc", "stsd", "stsz", "stts", "tfdt", "tfhd", "traf", "trak", "trex", "tkhd", "vmhd", "smhd", "ctts", "stss", "styp", "pssh", "sidx", "sbgp", "saiz", "saio", "senc", "trun", "encv", "enca", "sinf", "btrt", "frma", "tenc", "schm", "schi", "mehd", "fiel", "sdtp"].reduce(function(p, c) {
|
|
10373
11015
|
p[c] = [c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2), c.charCodeAt(3)];
|
|
10374
11016
|
return p;
|
|
10375
11017
|
}, /* @__PURE__ */ Object.create(null)));
|
|
@@ -10704,30 +11346,46 @@
|
|
|
10704
11346
|
};
|
|
10705
11347
|
}
|
|
10706
11348
|
var samples = track.samples;
|
|
11349
|
+
var isAV01 = /av01/.test(track.codec);
|
|
10707
11350
|
var mdatSize = 0;
|
|
10708
|
-
|
|
10709
|
-
|
|
10710
|
-
|
|
10711
|
-
}, 0);
|
|
10712
|
-
mdatSize += s.units.length * 4;
|
|
10713
|
-
});
|
|
10714
|
-
var mdata = new Uint8Array(mdatSize);
|
|
10715
|
-
var mdatView = new DataView(mdata.buffer);
|
|
10716
|
-
var _loop = function _loop2(_offset, _sample) {
|
|
10717
|
-
_sample = samples[i];
|
|
10718
|
-
var sampleSize = 0;
|
|
10719
|
-
_sample.units.forEach(function(u) {
|
|
10720
|
-
mdatView.setUint32(_offset, u.byteLength);
|
|
10721
|
-
_offset += 4;
|
|
10722
|
-
mdata.set(u, _offset);
|
|
10723
|
-
_offset += u.byteLength;
|
|
10724
|
-
sampleSize += 4 + u.byteLength;
|
|
11351
|
+
if (isAV01) {
|
|
11352
|
+
samples.forEach(function(s) {
|
|
11353
|
+
mdatSize += s.data.byteLength;
|
|
10725
11354
|
});
|
|
10726
|
-
|
|
10727
|
-
|
|
10728
|
-
|
|
10729
|
-
|
|
10730
|
-
|
|
11355
|
+
} else {
|
|
11356
|
+
samples.forEach(function(s) {
|
|
11357
|
+
mdatSize += s.units.reduce(function(t, c) {
|
|
11358
|
+
return t + c.byteLength;
|
|
11359
|
+
}, 0);
|
|
11360
|
+
mdatSize += s.units.length * 4;
|
|
11361
|
+
});
|
|
11362
|
+
}
|
|
11363
|
+
var mdata = new Uint8Array(mdatSize);
|
|
11364
|
+
if (isAV01) {
|
|
11365
|
+
for (var i = 0, l = samples.length, offset = 0, sample; i < l; i++) {
|
|
11366
|
+
sample = samples[i];
|
|
11367
|
+
mdata.set(sample.data, offset);
|
|
11368
|
+
sample.size = sample.data.byteLength;
|
|
11369
|
+
offset += sample.size;
|
|
11370
|
+
}
|
|
11371
|
+
} else {
|
|
11372
|
+
var mdatView = new DataView(mdata.buffer);
|
|
11373
|
+
var _loop = function _loop2(_offset2, _sample2) {
|
|
11374
|
+
_sample2 = samples[_i];
|
|
11375
|
+
var sampleSize = 0;
|
|
11376
|
+
_sample2.units.forEach(function(u) {
|
|
11377
|
+
mdatView.setUint32(_offset2, u.byteLength);
|
|
11378
|
+
_offset2 += 4;
|
|
11379
|
+
mdata.set(u, _offset2);
|
|
11380
|
+
_offset2 += u.byteLength;
|
|
11381
|
+
sampleSize += 4 + u.byteLength;
|
|
11382
|
+
});
|
|
11383
|
+
_sample2.size = sampleSize;
|
|
11384
|
+
_offset = _offset2, _sample = _sample2;
|
|
11385
|
+
};
|
|
11386
|
+
for (var _i = 0, _l = samples.length, _offset = 0, _sample; _i < _l; _i++) {
|
|
11387
|
+
_loop(_offset, _sample);
|
|
11388
|
+
}
|
|
10731
11389
|
}
|
|
10732
11390
|
var mdat = MP4.mdat(mdata);
|
|
10733
11391
|
var moof = MP4.moof([track]);
|
|
@@ -10886,11 +11544,11 @@
|
|
|
10886
11544
|
});
|
|
10887
11545
|
var logger$3 = new Logger$2("Transmuxer");
|
|
10888
11546
|
var Transmuxer = /* @__PURE__ */ function() {
|
|
10889
|
-
function Transmuxer2(hls, isMP4, needRemux) {
|
|
11547
|
+
function Transmuxer2(hls, isMP4, needRemux, fixerConfig) {
|
|
10890
11548
|
_classCallCheck$3(this, Transmuxer2);
|
|
10891
11549
|
_defineProperty$3(this, "_initSegmentId", "");
|
|
10892
11550
|
this.hls = hls;
|
|
10893
|
-
this._demuxer = isMP4 ? new FMP4Demuxer() : new TsDemuxer();
|
|
11551
|
+
this._demuxer = isMP4 ? new FMP4Demuxer() : new TsDemuxer(null, null, null, fixerConfig);
|
|
10894
11552
|
this._isMP4 = isMP4;
|
|
10895
11553
|
if (needRemux)
|
|
10896
11554
|
this._remuxer = new FMP4Remuxer(this._demuxer.videoTrack, this._demuxer.audioTrack);
|
|
@@ -11157,11 +11815,11 @@
|
|
|
11157
11815
|
return;
|
|
11158
11816
|
if (TsDemuxer.probe(chunk)) {
|
|
11159
11817
|
if (!this._transmuxer)
|
|
11160
|
-
this._transmuxer = new Transmuxer(this.hls, false, !this._softVideo);
|
|
11818
|
+
this._transmuxer = new Transmuxer(this.hls, false, !this._softVideo, this.hls.config.fixerConfig);
|
|
11161
11819
|
} else if (MP4Parser.probe(chunk)) {
|
|
11162
11820
|
if (this._softVideo) {
|
|
11163
11821
|
if (!this._transmuxer)
|
|
11164
|
-
this._transmuxer = new Transmuxer(this.hls, true);
|
|
11822
|
+
this._transmuxer = new Transmuxer(this.hls, true, null, this.hls.config.fixerConfig);
|
|
11165
11823
|
} else {
|
|
11166
11824
|
this._directAppend = true;
|
|
11167
11825
|
var mix = false;
|
|
@@ -11604,7 +12262,11 @@
|
|
|
11604
12262
|
minSegmentsStartPlay: 3,
|
|
11605
12263
|
preferMMS: false,
|
|
11606
12264
|
preferMMSStreaming: false,
|
|
11607
|
-
mseLowLatency: true
|
|
12265
|
+
mseLowLatency: true,
|
|
12266
|
+
fixerConfig: {
|
|
12267
|
+
forceFixLargeGap: false,
|
|
12268
|
+
largeGapThreshold: 5
|
|
12269
|
+
}
|
|
11608
12270
|
}, cfg), {}, {
|
|
11609
12271
|
media
|
|
11610
12272
|
});
|
|
@@ -11998,9 +12660,6 @@
|
|
|
11998
12660
|
var endOfList = false;
|
|
11999
12661
|
var partSegmentIndex = 0;
|
|
12000
12662
|
while (line = lines[index++]) {
|
|
12001
|
-
if (endOfList) {
|
|
12002
|
-
break;
|
|
12003
|
-
}
|
|
12004
12663
|
if (line[0] !== "#") {
|
|
12005
12664
|
if (media.lowLatency) {
|
|
12006
12665
|
curSN++;
|
|
@@ -12054,11 +12713,6 @@
|
|
|
12054
12713
|
break;
|
|
12055
12714
|
case "ENDLIST":
|
|
12056
12715
|
{
|
|
12057
|
-
var _lastSegment = media.segments[media.segments.length - 1];
|
|
12058
|
-
if (_lastSegment) {
|
|
12059
|
-
_lastSegment.isLast = true;
|
|
12060
|
-
}
|
|
12061
|
-
media.live = false;
|
|
12062
12716
|
endOfList = true;
|
|
12063
12717
|
}
|
|
12064
12718
|
break;
|
|
@@ -12162,11 +12816,14 @@
|
|
|
12162
12816
|
});
|
|
12163
12817
|
var lastSegment = media.segments[media.segments.length - 1];
|
|
12164
12818
|
if (lastSegment) {
|
|
12165
|
-
|
|
12166
|
-
media.endPartIndex = lastSegment.partIndex;
|
|
12167
|
-
if (endOfList && !lastSegment.isLast) {
|
|
12819
|
+
if (endOfList) {
|
|
12168
12820
|
lastSegment.isLast = true;
|
|
12169
12821
|
}
|
|
12822
|
+
media.endSN = lastSegment.sn;
|
|
12823
|
+
media.endPartIndex = lastSegment.partIndex;
|
|
12824
|
+
}
|
|
12825
|
+
if (endOfList) {
|
|
12826
|
+
media.live = false;
|
|
12170
12827
|
}
|
|
12171
12828
|
media.totalDuration = totalDuration;
|
|
12172
12829
|
media.endCC = curCC;
|
|
@@ -13263,7 +13920,7 @@
|
|
|
13263
13920
|
_defineProperty$3(_assertThisInitialized$2(_this), "_switchUrlOpts", null);
|
|
13264
13921
|
_defineProperty$3(_assertThisInitialized$2(_this), "_isProcessQuotaExceeded", false);
|
|
13265
13922
|
_defineProperty$3(_assertThisInitialized$2(_this), "_loadSegment", /* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee() {
|
|
13266
|
-
var
|
|
13923
|
+
var _this$_playlist, nextSegment, lastSegment, _assertThisInitialize, config, minFrameDuration, maxBufferThroughout, bInfo, bufferThroughout;
|
|
13267
13924
|
return _regeneratorRuntime$1().wrap(function _callee$(_context) {
|
|
13268
13925
|
while (1)
|
|
13269
13926
|
switch (_context.prev = _context.next) {
|
|
@@ -13274,42 +13931,44 @@
|
|
|
13274
13931
|
}
|
|
13275
13932
|
return _context.abrupt("return");
|
|
13276
13933
|
case 2:
|
|
13277
|
-
|
|
13934
|
+
_this$_playlist = _this._playlist, nextSegment = _this$_playlist.nextSegment, lastSegment = _this$_playlist.lastSegment;
|
|
13278
13935
|
_assertThisInitialize = _assertThisInitialized$2(_this), config = _assertThisInitialize.config;
|
|
13279
|
-
|
|
13280
|
-
|
|
13936
|
+
minFrameDuration = 0.016;
|
|
13937
|
+
maxBufferThroughout = Math.min(Math.max((lastSegment === null || lastSegment === void 0 ? void 0 : lastSegment.duration) - minFrameDuration / 2 || 0, minFrameDuration), 0.1);
|
|
13938
|
+
if (nextSegment) {
|
|
13939
|
+
_context.next = 8;
|
|
13281
13940
|
break;
|
|
13282
13941
|
}
|
|
13283
13942
|
return _context.abrupt("return");
|
|
13284
|
-
case
|
|
13943
|
+
case 8:
|
|
13285
13944
|
if (_this.isLive) {
|
|
13286
|
-
_context.next =
|
|
13945
|
+
_context.next = 18;
|
|
13287
13946
|
break;
|
|
13288
13947
|
}
|
|
13289
13948
|
bInfo = _this.bufferInfo();
|
|
13290
13949
|
if (_this.media.paused && !_this.media.currentTime) {
|
|
13291
13950
|
bInfo = _this.bufferInfo(bInfo.nextStart || 0.5);
|
|
13292
13951
|
}
|
|
13293
|
-
bufferThroughout = Math.abs(bInfo.end - _this.media.duration) <
|
|
13952
|
+
bufferThroughout = Math.abs(bInfo.end - _this.media.duration) < maxBufferThroughout;
|
|
13294
13953
|
if (!(bInfo.remaining >= config.preloadTime || bufferThroughout)) {
|
|
13295
|
-
_context.next =
|
|
13954
|
+
_context.next = 15;
|
|
13296
13955
|
break;
|
|
13297
13956
|
}
|
|
13298
13957
|
_this._tryEos();
|
|
13299
13958
|
return _context.abrupt("return");
|
|
13300
|
-
case
|
|
13959
|
+
case 15:
|
|
13301
13960
|
if (!(config.preferMMSStreaming && !_this._bufferService.msStreaming)) {
|
|
13302
|
-
_context.next =
|
|
13961
|
+
_context.next = 17;
|
|
13303
13962
|
break;
|
|
13304
13963
|
}
|
|
13305
13964
|
return _context.abrupt("return");
|
|
13306
|
-
case
|
|
13307
|
-
if (!_this._urlSwitching && _this._prevSegSn !==
|
|
13965
|
+
case 17:
|
|
13966
|
+
if (!_this._urlSwitching && _this._prevSegSn !== nextSegment.sn - 1 && bInfo.end && Math.abs(nextSegment.start - bInfo.end) > 1) {
|
|
13308
13967
|
_this._playlist.setNextSegmentByIndex(_this._playlist.findSegmentIndexByTime(bInfo.end + 0.1));
|
|
13309
13968
|
}
|
|
13310
|
-
case
|
|
13969
|
+
case 18:
|
|
13311
13970
|
return _context.abrupt("return", _this._loadSegmentDirect());
|
|
13312
|
-
case
|
|
13971
|
+
case 19:
|
|
13313
13972
|
case "end":
|
|
13314
13973
|
return _context.stop();
|
|
13315
13974
|
}
|
|
@@ -14562,8 +15221,8 @@
|
|
|
14562
15221
|
value: function _tryEos() {
|
|
14563
15222
|
var _this$_bufferService3, _this$_bufferService4;
|
|
14564
15223
|
var media = this.media;
|
|
14565
|
-
var _this$
|
|
14566
|
-
var eosAllowed = !nextSegment && media.readyState && media.duration > 0 && ((_this$_bufferService3 = this._bufferService) === null || _this$_bufferService3 === void 0 ? void 0 : _this$_bufferService3.msIsOpened) && !((_this$_bufferService4 = this._bufferService) !== null && _this$_bufferService4 !== void 0 && _this$_bufferService4.msHasOpTasks);
|
|
15224
|
+
var _this$_playlist2 = this._playlist, nextSegment = _this$_playlist2.nextSegment, lastSegment = _this$_playlist2.lastSegment;
|
|
15225
|
+
var eosAllowed = (!nextSegment || lastSegment && Buffer$1.isBuffered(media, lastSegment.start + lastSegment.duration / 2)) && media.readyState && media.duration > 0 && ((_this$_bufferService3 = this._bufferService) === null || _this$_bufferService3 === void 0 ? void 0 : _this$_bufferService3.msIsOpened) && !((_this$_bufferService4 = this._bufferService) !== null && _this$_bufferService4 !== void 0 && _this$_bufferService4.msHasOpTasks);
|
|
14567
15226
|
if (!eosAllowed) {
|
|
14568
15227
|
return;
|
|
14569
15228
|
}
|
|
@@ -14599,7 +15258,7 @@
|
|
|
14599
15258
|
}]);
|
|
14600
15259
|
return Hls2;
|
|
14601
15260
|
}(EventEmitter);
|
|
14602
|
-
_defineProperty$3(Hls, "version", "3.0.
|
|
15261
|
+
_defineProperty$3(Hls, "version", "3.0.20-rc.3");
|
|
14603
15262
|
try {
|
|
14604
15263
|
if (localStorage.getItem("xgd")) {
|
|
14605
15264
|
Hls.enableLogger();
|