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.
@@ -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 = position - audioPosition;
1164
- if (posDiff <= 0.001) {
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((positionA - positionV).toFixed(3), ")"));
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.set("vodMediaSeqVideo", 0)];
2146
+ return [4 /*yield*/, this._sessionState.setCurrentVod(currentVod, { ttl: currentVod.getDuration() * 1000 })];
2143
2147
  case 56:
2144
- _w.vodMediaSeqVideo = _10.sent();
2145
- _x = sessionState;
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
- _x.vodMediaSeqAudio = _10.sent();
2149
- _y = sessionState;
2150
- return [4 /*yield*/, this._sessionState.set("vodMediaSeqSubtitle", 0)];
2151
+ _10.sent();
2152
+ _x = sessionState;
2153
+ return [4 /*yield*/, this._sessionState.set("vodMediaSeqVideo", 0)];
2151
2154
  case 58:
2152
- _y.vodMediaSeqSubtitle = _10.sent();
2153
- _z = sessionState;
2154
- return [4 /*yield*/, this._sessionState.set("mediaSeq", sessionState.mediaSeq + endMseqValue)];
2155
+ _x.vodMediaSeqVideo = _10.sent();
2156
+ _y = sessionState;
2157
+ return [4 /*yield*/, this._sessionState.set("vodMediaSeqAudio", 0)];
2155
2158
  case 59:
2156
- _z.mediaSeq = _10.sent();
2157
- _0 = sessionState;
2158
- return [4 /*yield*/, this._sessionState.set("mediaSeqAudio", sessionState.mediaSeqAudio + endMseqValueAudio)];
2159
+ _y.vodMediaSeqAudio = _10.sent();
2160
+ _z = sessionState;
2161
+ return [4 /*yield*/, this._sessionState.set("vodMediaSeqSubtitle", 0)];
2159
2162
  case 60:
2160
- _0.mediaSeqAudio = _10.sent();
2161
- _1 = sessionState;
2162
- return [4 /*yield*/, this._sessionState.set("mediaSeqSubtitle", sessionState.mediaSeqSubtitle + endMseqValueSubtitle)];
2163
+ _z.vodMediaSeqSubtitle = _10.sent();
2164
+ _0 = sessionState;
2165
+ return [4 /*yield*/, this._sessionState.set("mediaSeq", sessionState.mediaSeq + endMseqValue)];
2163
2166
  case 61:
2164
- _1.mediaSeqSubtitle = _10.sent();
2165
- _2 = sessionState;
2166
- return [4 /*yield*/, this._sessionState.set("discSeq", sessionState.discSeq + lastDiscontinuity)];
2167
+ _0.mediaSeq = _10.sent();
2168
+ _1 = sessionState;
2169
+ return [4 /*yield*/, this._sessionState.set("mediaSeqAudio", sessionState.mediaSeqAudio + endMseqValueAudio)];
2167
2170
  case 62:
2168
- _2.discSeq = _10.sent();
2169
- _3 = sessionState;
2170
- return [4 /*yield*/, this._sessionState.set("discSeqAudio", sessionState.discSeqAudio + lastDiscontinuityAudio)];
2171
+ _1.mediaSeqAudio = _10.sent();
2172
+ _2 = sessionState;
2173
+ return [4 /*yield*/, this._sessionState.set("mediaSeqSubtitle", sessionState.mediaSeqSubtitle + endMseqValueSubtitle)];
2171
2174
  case 63:
2172
- _3.discSeqAudio = _10.sent();
2173
- _4 = sessionState;
2174
- return [4 /*yield*/, this._sessionState.set("discSeqSubtitle", sessionState.discSeqSubtitle + lastDiscontinuitySubtitle)];
2175
+ _2.mediaSeqSubtitle = _10.sent();
2176
+ _3 = sessionState;
2177
+ return [4 /*yield*/, this._sessionState.set("discSeq", sessionState.discSeq + lastDiscontinuity)];
2175
2178
  case 64:
2176
- _4.discSeqSubtitle = _10.sent();
2177
- 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, "]"));
2178
- return [4 /*yield*/, this._sessionState.remove("nextVod")];
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.setCurrentVod(currentVod, { ttl: currentVod.getDuration() * 1000 })];
2185
+ return [4 /*yield*/, this._sessionState.set("discSeqSubtitle", sessionState.discSeqSubtitle + lastDiscontinuitySubtitle)];
2183
2186
  case 66:
2184
- _5.currentVod = _10.sent();
2185
- this.leaderIsSettingNextVod = false;
2186
- return [4 /*yield*/, this._playheadState.set("playheadRef", Date.now(), isLeader)];
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 TIME_SINCE_VOD_STARTED_MS = (Date.now() - refTs) + TIME_PADDING_MS;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eyevinn-channel-engine",
3
- "version": "4.2.7",
3
+ "version": "4.2.9",
4
4
  "description": "OTT TV Channel Engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
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 = position - audioPosition;
844
- if (posDiff <= 0.001) {
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)}] (${(positionA-positionV).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 TIME_SINCE_VOD_STARTED_MS = (Date.now() - refTs) + TIME_PADDING_MS;
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eyevinn-channel-engine",
3
- "version": "4.2.7",
3
+ "version": "4.2.9",
4
4
  "description": "OTT TV Channel Engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",