eyevinn-channel-engine 4.2.7 → 4.2.9
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/dist/engine/session.js +44 -40
- package/dist/package.json +1 -1
- package/engine/session.js +12 -8
- package/package.json +1 -1
package/dist/engine/session.js
CHANGED
|
@@ -1062,7 +1062,7 @@ var Session = /** @class */ (function () {
|
|
|
1062
1062
|
};
|
|
1063
1063
|
Session.prototype.incrementAsync = function () {
|
|
1064
1064
|
return __awaiter(this, void 0, void 0, function () {
|
|
1065
|
-
var isLeader, sessionState, playheadState, currentVod, _a, isOldVod, nextState, leaderAction, leaderState, _b, m3u8_4, _c, audioIncrement, positionV, positionA, position, currentVod_1, sessionState_1, posDiff, incrementValue, index, audioSeqLastIdx, thresh, audioPosition, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, mediaSequenceValue, audioInfo, mediaSequenceValueAudio, diffMs, m3u8;
|
|
1065
|
+
var isLeader, sessionState, playheadState, currentVod, _a, isOldVod, nextState, leaderAction, leaderState, _b, m3u8_4, _c, audioIncrement, positionV, positionA, position, currentVod_1, sessionState_1, posDiff, incrementValue, index, audioSeqLastIdx, thresh, maxAcceptableDiff, audioPosition, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, mediaSequenceValue, audioInfo, mediaSequenceValueAudio, diffMs, m3u8;
|
|
1066
1066
|
return __generator(this, function (_s) {
|
|
1067
1067
|
switch (_s.label) {
|
|
1068
1068
|
case 0: return [4 /*yield*/, this._tickAsync()];
|
|
@@ -1154,22 +1154,26 @@ var Session = /** @class */ (function () {
|
|
|
1154
1154
|
index = 0;
|
|
1155
1155
|
audioSeqLastIdx = currentVod_1.getLiveMediaSequencesCount("audio") - 1;
|
|
1156
1156
|
thresh = 0.5;
|
|
1157
|
+
maxAcceptableDiff = 0.001;
|
|
1157
1158
|
debug("[".concat(this._sessionId, "]: About to determine audio increment"));
|
|
1158
1159
|
_s.label = 19;
|
|
1159
1160
|
case 19: return [4 /*yield*/, this._getAudioPlayheadPosition(sessionState_1.vodMediaSeqAudio + index)];
|
|
1160
1161
|
case 20:
|
|
1161
1162
|
audioPosition = (_s.sent()) * 1000;
|
|
1162
1163
|
positionA = audioPosition / 1000;
|
|
1163
|
-
posDiff =
|
|
1164
|
-
|
|
1164
|
+
posDiff = (positionV - positionA).toFixed(3);
|
|
1165
|
+
debug("[".concat(this._sessionId, "]: positionV=").concat(positionV, ";positionA=").concat(positionA, ";posDiff=").concat(posDiff, ";(posDiff <= 0.001)=").concat(posDiff <= 0.001));
|
|
1166
|
+
if (posDiff <= maxAcceptableDiff) {
|
|
1167
|
+
debug("[".concat(this._sessionId, "]: posDiff value (").concat(posDiff, ") is acceptable"));
|
|
1165
1168
|
return [3 /*break*/, 22];
|
|
1166
1169
|
}
|
|
1167
1170
|
if (posDiff > thresh) {
|
|
1168
1171
|
index++;
|
|
1169
1172
|
incrementValue++;
|
|
1170
1173
|
}
|
|
1171
|
-
else {
|
|
1174
|
+
else if (posDiff > maxAcceptableDiff) {
|
|
1172
1175
|
index = incrementValue;
|
|
1176
|
+
debug("[".concat(this._sessionId, "]: Audio Stepping index set to = ").concat(index));
|
|
1173
1177
|
return [3 /*break*/, 22];
|
|
1174
1178
|
}
|
|
1175
1179
|
if (sessionState_1.vodMediaSeqAudio + index > audioSeqLastIdx) {
|
|
@@ -1181,7 +1185,7 @@ var Session = /** @class */ (function () {
|
|
|
1181
1185
|
_s.label = 22;
|
|
1182
1186
|
case 22:
|
|
1183
1187
|
audioIncrement = index;
|
|
1184
|
-
debug("[".concat(this._sessionId, "]: Current VOD Playhead Positions are to be: [").concat(positionV.toFixed(3), "][").concat(positionA.toFixed(3), "] (").concat(
|
|
1188
|
+
debug("[".concat(this._sessionId, "]: Current VOD Playhead Positions are to be: [").concat(positionV.toFixed(3), "][").concat(positionA.toFixed(3), "] (").concat(posDiff, ")"));
|
|
1185
1189
|
_s.label = 23;
|
|
1186
1190
|
case 23:
|
|
1187
1191
|
debug("[".concat(this._sessionId, "]: Will increment audio with ").concat(audioIncrement));
|
|
@@ -2139,53 +2143,53 @@ var Session = /** @class */ (function () {
|
|
|
2139
2143
|
currentVod = newVod;
|
|
2140
2144
|
debug("[".concat(this._sessionId, "]: msequences=").concat(currentVod.getLiveMediaSequencesCount(), "; audio msequences=").concat(currentVod.getLiveMediaSequencesCount("audio"), "; subtitle msequences=").concat(currentVod.getLiveMediaSequencesCount("subtitle")));
|
|
2141
2145
|
_w = sessionState;
|
|
2142
|
-
return [4 /*yield*/, this._sessionState.
|
|
2146
|
+
return [4 /*yield*/, this._sessionState.setCurrentVod(currentVod, { ttl: currentVod.getDuration() * 1000 })];
|
|
2143
2147
|
case 56:
|
|
2144
|
-
_w.
|
|
2145
|
-
|
|
2146
|
-
return [4 /*yield*/, this._sessionState.set("vodMediaSeqAudio", 0)];
|
|
2148
|
+
_w.currentVod = _10.sent();
|
|
2149
|
+
return [4 /*yield*/, this._playheadState.set("playheadRef", Date.now(), isLeader)];
|
|
2147
2150
|
case 57:
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
return [4 /*yield*/, this._sessionState.set("
|
|
2151
|
+
_10.sent();
|
|
2152
|
+
_x = sessionState;
|
|
2153
|
+
return [4 /*yield*/, this._sessionState.set("vodMediaSeqVideo", 0)];
|
|
2151
2154
|
case 58:
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
return [4 /*yield*/, this._sessionState.set("
|
|
2155
|
+
_x.vodMediaSeqVideo = _10.sent();
|
|
2156
|
+
_y = sessionState;
|
|
2157
|
+
return [4 /*yield*/, this._sessionState.set("vodMediaSeqAudio", 0)];
|
|
2155
2158
|
case 59:
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
return [4 /*yield*/, this._sessionState.set("
|
|
2159
|
+
_y.vodMediaSeqAudio = _10.sent();
|
|
2160
|
+
_z = sessionState;
|
|
2161
|
+
return [4 /*yield*/, this._sessionState.set("vodMediaSeqSubtitle", 0)];
|
|
2159
2162
|
case 60:
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
return [4 /*yield*/, this._sessionState.set("
|
|
2163
|
+
_z.vodMediaSeqSubtitle = _10.sent();
|
|
2164
|
+
_0 = sessionState;
|
|
2165
|
+
return [4 /*yield*/, this._sessionState.set("mediaSeq", sessionState.mediaSeq + endMseqValue)];
|
|
2163
2166
|
case 61:
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
return [4 /*yield*/, this._sessionState.set("
|
|
2167
|
+
_0.mediaSeq = _10.sent();
|
|
2168
|
+
_1 = sessionState;
|
|
2169
|
+
return [4 /*yield*/, this._sessionState.set("mediaSeqAudio", sessionState.mediaSeqAudio + endMseqValueAudio)];
|
|
2167
2170
|
case 62:
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
return [4 /*yield*/, this._sessionState.set("
|
|
2171
|
+
_1.mediaSeqAudio = _10.sent();
|
|
2172
|
+
_2 = sessionState;
|
|
2173
|
+
return [4 /*yield*/, this._sessionState.set("mediaSeqSubtitle", sessionState.mediaSeqSubtitle + endMseqValueSubtitle)];
|
|
2171
2174
|
case 63:
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
return [4 /*yield*/, this._sessionState.set("
|
|
2175
|
+
_2.mediaSeqSubtitle = _10.sent();
|
|
2176
|
+
_3 = sessionState;
|
|
2177
|
+
return [4 /*yield*/, this._sessionState.set("discSeq", sessionState.discSeq + lastDiscontinuity)];
|
|
2175
2178
|
case 64:
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
return [4 /*yield*/, this._sessionState.
|
|
2179
|
+
_3.discSeq = _10.sent();
|
|
2180
|
+
_4 = sessionState;
|
|
2181
|
+
return [4 /*yield*/, this._sessionState.set("discSeqAudio", sessionState.discSeqAudio + lastDiscontinuityAudio)];
|
|
2179
2182
|
case 65:
|
|
2180
|
-
_10.sent();
|
|
2183
|
+
_4.discSeqAudio = _10.sent();
|
|
2181
2184
|
_5 = sessionState;
|
|
2182
|
-
return [4 /*yield*/, this._sessionState.
|
|
2185
|
+
return [4 /*yield*/, this._sessionState.set("discSeqSubtitle", sessionState.discSeqSubtitle + lastDiscontinuitySubtitle)];
|
|
2183
2186
|
case 66:
|
|
2184
|
-
_5.
|
|
2185
|
-
this.
|
|
2186
|
-
return [4 /*yield*/, this.
|
|
2187
|
+
_5.discSeqSubtitle = _10.sent();
|
|
2188
|
+
debug("[".concat(this._sessionId, "]: new sequence data set in store V[").concat(sessionState.mediaSeq, "][").concat(sessionState.discSeq, "]_A[").concat(sessionState.mediaSeqAudio, "][").concat(sessionState.discSeqAudio, "]_S[").concat(sessionState.mediaSeqSubtitle, "][").concat(sessionState.discSeqSubtitle, "]"));
|
|
2189
|
+
return [4 /*yield*/, this._sessionState.remove("nextVod")];
|
|
2187
2190
|
case 67:
|
|
2188
2191
|
_10.sent();
|
|
2192
|
+
this.leaderIsSettingNextVod = false;
|
|
2189
2193
|
return [4 /*yield*/, this._playheadState.set("diffCompensation", this.diffCompensation, isLeader)];
|
|
2190
2194
|
case 68:
|
|
2191
2195
|
_10.sent();
|
|
@@ -2757,9 +2761,9 @@ var Session = /** @class */ (function () {
|
|
|
2757
2761
|
}
|
|
2758
2762
|
};
|
|
2759
2763
|
Session.prototype._isOldVod = function (refTs, vodDur) {
|
|
2760
|
-
var TIME_PADDING_MS = 20 * 1000; // 20secs
|
|
2761
2764
|
var VOD_DURATION_MS = vodDur * 1000;
|
|
2762
|
-
var
|
|
2765
|
+
var TIME_PADDING_MS = VOD_DURATION_MS * 0.05; //5 percent of content duration
|
|
2766
|
+
var TIME_SINCE_VOD_STARTED_MS = Date.now() - refTs + TIME_PADDING_MS;
|
|
2763
2767
|
if (TIME_SINCE_VOD_STARTED_MS > VOD_DURATION_MS) {
|
|
2764
2768
|
return true;
|
|
2765
2769
|
}
|
package/dist/package.json
CHANGED
package/engine/session.js
CHANGED
|
@@ -836,19 +836,23 @@ class Session {
|
|
|
836
836
|
let index = 0;
|
|
837
837
|
const audioSeqLastIdx = currentVod.getLiveMediaSequencesCount("audio") - 1;
|
|
838
838
|
const thresh = 0.5;
|
|
839
|
+
const maxAcceptableDiff = 0.001;
|
|
839
840
|
debug(`[${this._sessionId}]: About to determine audio increment`);
|
|
840
841
|
do {
|
|
841
842
|
const audioPosition = (await this._getAudioPlayheadPosition(sessionState.vodMediaSeqAudio + index)) * 1000;
|
|
842
843
|
positionA = audioPosition / 1000;
|
|
843
|
-
posDiff =
|
|
844
|
-
|
|
844
|
+
posDiff = (positionV-positionA).toFixed(3);
|
|
845
|
+
debug(`[${this._sessionId}]: positionV=${positionV};positionA=${positionA};posDiff=${posDiff};(posDiff <= 0.001)=${posDiff <= 0.001}`);
|
|
846
|
+
if (posDiff <= maxAcceptableDiff) {
|
|
847
|
+
debug(`[${this._sessionId}]: posDiff value (${posDiff}) is acceptable`);
|
|
845
848
|
break;
|
|
846
849
|
}
|
|
847
850
|
if (posDiff > thresh) {
|
|
848
851
|
index++;
|
|
849
852
|
incrementValue++;
|
|
850
|
-
} else {
|
|
853
|
+
} else if (posDiff > maxAcceptableDiff) {
|
|
851
854
|
index = incrementValue;
|
|
855
|
+
debug(`[${this._sessionId}]: Audio Stepping index set to = ${index}`);
|
|
852
856
|
break;
|
|
853
857
|
}
|
|
854
858
|
if (sessionState.vodMediaSeqAudio + index > audioSeqLastIdx) {
|
|
@@ -856,7 +860,7 @@ class Session {
|
|
|
856
860
|
}
|
|
857
861
|
} while (!(-thresh < posDiff && posDiff < thresh));
|
|
858
862
|
audioIncrement = index;
|
|
859
|
-
debug(`[${this._sessionId}]: Current VOD Playhead Positions are to be: [${positionV.toFixed(3)}][${positionA.toFixed(3)}] (${
|
|
863
|
+
debug(`[${this._sessionId}]: Current VOD Playhead Positions are to be: [${positionV.toFixed(3)}][${positionA.toFixed(3)}] (${posDiff})`);
|
|
860
864
|
}
|
|
861
865
|
debug(`[${this._sessionId}]: Will increment audio with ${audioIncrement}`);
|
|
862
866
|
sessionState.vodMediaSeqAudio = await this._sessionState.increment("vodMediaSeqAudio", audioIncrement);
|
|
@@ -1549,6 +1553,8 @@ class Session {
|
|
|
1549
1553
|
debug(`[${this._sessionId}]: playhead positions [A]=${newVod.getPlayheadPositions("audio")}`);
|
|
1550
1554
|
currentVod = newVod;
|
|
1551
1555
|
debug(`[${this._sessionId}]: msequences=${currentVod.getLiveMediaSequencesCount()}; audio msequences=${currentVod.getLiveMediaSequencesCount("audio")}; subtitle msequences=${currentVod.getLiveMediaSequencesCount("subtitle")}`);
|
|
1556
|
+
sessionState.currentVod = await this._sessionState.setCurrentVod(currentVod, { ttl: currentVod.getDuration() * 1000 });
|
|
1557
|
+
await this._playheadState.set("playheadRef", Date.now(), isLeader);
|
|
1552
1558
|
sessionState.vodMediaSeqVideo = await this._sessionState.set("vodMediaSeqVideo", 0);
|
|
1553
1559
|
sessionState.vodMediaSeqAudio = await this._sessionState.set("vodMediaSeqAudio", 0);
|
|
1554
1560
|
sessionState.vodMediaSeqSubtitle = await this._sessionState.set("vodMediaSeqSubtitle", 0);
|
|
@@ -1560,9 +1566,7 @@ class Session {
|
|
|
1560
1566
|
sessionState.discSeqSubtitle = await this._sessionState.set("discSeqSubtitle", sessionState.discSeqSubtitle + lastDiscontinuitySubtitle);
|
|
1561
1567
|
debug(`[${this._sessionId}]: new sequence data set in store V[${sessionState.mediaSeq}][${sessionState.discSeq}]_A[${sessionState.mediaSeqAudio}][${sessionState.discSeqAudio}]_S[${sessionState.mediaSeqSubtitle}][${sessionState.discSeqSubtitle}]`);
|
|
1562
1568
|
await this._sessionState.remove("nextVod");
|
|
1563
|
-
sessionState.currentVod = await this._sessionState.setCurrentVod(currentVod, { ttl: currentVod.getDuration() * 1000 });
|
|
1564
1569
|
this.leaderIsSettingNextVod = false;
|
|
1565
|
-
await this._playheadState.set("playheadRef", Date.now(), isLeader);
|
|
1566
1570
|
await this._playheadState.set("diffCompensation", this.diffCompensation, isLeader);
|
|
1567
1571
|
debug(`[${this._sessionId}]: sharing durrent vods diffCompensation=${this.diffCompensation}`);
|
|
1568
1572
|
this.produceEvent({
|
|
@@ -2033,9 +2037,9 @@ class Session {
|
|
|
2033
2037
|
}
|
|
2034
2038
|
|
|
2035
2039
|
_isOldVod(refTs, vodDur) {
|
|
2036
|
-
const TIME_PADDING_MS = 20 * 1000 // 20secs
|
|
2037
2040
|
const VOD_DURATION_MS = vodDur * 1000;
|
|
2038
|
-
const
|
|
2041
|
+
const TIME_PADDING_MS = VOD_DURATION_MS * 0.05; //5 percent of content duration
|
|
2042
|
+
const TIME_SINCE_VOD_STARTED_MS = Date.now() - refTs + TIME_PADDING_MS;
|
|
2039
2043
|
if (TIME_SINCE_VOD_STARTED_MS > VOD_DURATION_MS) {
|
|
2040
2044
|
return true;
|
|
2041
2045
|
}
|