senza-sdk 4.2.51-c1ae854.0 → 4.2.51-d3779b1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "senza-sdk",
3
- "version": "4.2.51-c1ae854.0",
3
+ "version": "4.2.51-d3779b1.0",
4
4
  "main": "./src/api.js",
5
5
  "description": "API for Senza application",
6
6
  "license": "MIT",
@@ -10,7 +10,8 @@ import {
10
10
  TargetPlayingState,
11
11
  isSubtitlesTranslationAllowed,
12
12
  isSubtitlesTranslationPattern,
13
- SetAudioLanguageState
13
+ SetAudioLanguageState,
14
+ SetSubtitleLanguageState
14
15
  } from "./utils";
15
16
  import { lifecycle } from "./lifecycle";
16
17
  import { writeLicenseResponse } from "./api";
@@ -892,6 +893,7 @@ class RemotePlayer extends EventTarget {
892
893
  throw new RemotePlayerError(6501, "Cannot call load() while previous load/unload is still in progress");
893
894
  }
894
895
  this._abortSetAudioLanguage = true;
896
+ this._abortSetSubtitleLanguage = true;
895
897
  this._abortSeeking = true;
896
898
  if (reset) {
897
899
  this._reset();
@@ -1065,6 +1067,18 @@ class RemotePlayer extends EventTarget {
1065
1067
  }
1066
1068
  }
1067
1069
 
1070
+ if (this._isSetAudioByApplication) {
1071
+ sdkLogger.info("application requesting play during setAudioLanguage");
1072
+ this._targetSetAudioPlayingState = TargetPlayingState.PLAYING_UI;
1073
+ return Promise.resolve(true);
1074
+ }
1075
+
1076
+ if (this._isSetSubtitleByApplication) {
1077
+ sdkLogger.info("application requesting play during setSubtitleLanguage");
1078
+ this._targetSetSubtitlePlayingState = TargetPlayingState.PLAYING_UI;
1079
+ return Promise.resolve(true);
1080
+ }
1081
+
1068
1082
  // If seeking in progress, wait for seek to complete before playing
1069
1083
  if (this._isSeekingByApplication) {
1070
1084
  sdkLogger.info("application requesting play during seek");
@@ -1104,6 +1118,16 @@ class RemotePlayer extends EventTarget {
1104
1118
  this._targetSeekPlayingState = TargetPlayingState.PAUSED;
1105
1119
  return Promise.resolve(true);
1106
1120
  }
1121
+ if (this._isSetAudioByApplication) {
1122
+ sdkLogger.info("application requesting pause during setAudioLanguage");
1123
+ this._targetSetAudioPlayingState = TargetPlayingState.PAUSED;
1124
+ return Promise.resolve(true);
1125
+ }
1126
+ if (this._isSetSubtitleByApplication) {
1127
+ sdkLogger.info("application requesting pause during setSubtitleLanguage");
1128
+ this._targetSetSubtitlePlayingState = TargetPlayingState.PAUSED;
1129
+ return Promise.resolve(true);
1130
+ }
1107
1131
  return this._pause();
1108
1132
  }
1109
1133
 
@@ -1349,7 +1373,8 @@ class RemotePlayer extends EventTarget {
1349
1373
  case 2:
1350
1374
  return this._selectTextTrackV2(textTrackId, prevSelectedTextTrack);
1351
1375
  default:
1352
- return this._selectTextTrackV3(textTrackId, prevSelectedTextTrack);
1376
+ this._pendingSubtitleLanguage = textTrackId;
1377
+ return this._atomicSetSubtitleLanguage();
1353
1378
  }
1354
1379
  }
1355
1380
 
@@ -1676,9 +1701,62 @@ class RemotePlayer extends EventTarget {
1676
1701
  sdkLogger.info("Seeking: local video element seeking end");
1677
1702
  }
1678
1703
 
1704
+ async _atomicSetSubtitleLanguage() {
1705
+ sdkLogger.info("SetSubtitleLanguage: local video element set start while isPLaying=", this._isPlaying);
1706
+
1707
+ this._targetSeekPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1708
+ this._abortSetSubtitleLanguage = false;
1709
+ this._isSetSubtitleByApplication = true;
1710
+
1711
+ let state = SetSubtitleLanguageState.INIT;
1712
+
1713
+ let previousPendingSubtitleLanguage = this._pendingSubtitleLanguage;
1714
+ let initialSubtitleLanguage= this._pendingSubtitleLanguage;
1715
+ let res;
1716
+
1717
+ while (!this._abortSetSubtitleLanguage && state !== SetSubtitleLanguageState.DONE) {
1718
+ try {
1719
+ // TODO - Implement the logic for setting audio language
1720
+ switch(state) {
1721
+ case SetSubtitleLanguageState.INIT:
1722
+ state = this._isPlaying ? SetSubtitleLanguageState.STOPPED : SetSubtitleLanguageState.SET;
1723
+ break;
1724
+ case SetSubtitleLanguageState.STOPPED:
1725
+ await lifecycle.moveToForeground();
1726
+ state = SetSubtitleLanguageState.SET;
1727
+ break;
1728
+ case SetSubtitleLanguageState.SET:
1729
+ initialSubtitleLanguage = this._pendingSubtitleLanguage;
1730
+ previousPendingSubtitleLanguage = this._selectedSubtitleTrack;
1731
+ res = await this._selectTextTrackV3(initialSubtitleLanguage, previousPendingSubtitleLanguage);
1732
+ state = SetSubtitleLanguageState.DONE;
1733
+ break;
1734
+ }
1735
+ } catch (error) {
1736
+ sdkLogger.error(`Error during set subtitle process: ${error.message}`);
1737
+ state = SetSubtitleLanguageState.DONE;
1738
+ res = Promise.reject(error);
1739
+ } finally {
1740
+ if (!this._abortSetSubtitleLanguage) {
1741
+ if (this._targetSeekPlayingState === TargetPlayingState.PLAYING_UI) {
1742
+ console.log("BEFORE PLAY AFTER SET SUBTITLE");
1743
+ await this._play();
1744
+ } else if (this._targetSeekPlayingState === TargetPlayingState.PLAYING_ABR) {
1745
+ console.log("BEFORE MOVE_TO_BACKGROUND AFTER SET SUBTITLE");
1746
+ await lifecycle._moveToBackground();
1747
+ }
1748
+ }
1749
+ this._isSetSubtitleByApplication = false;
1750
+ sdkLogger.info("SetSubtitleLanguage: local video element set subtitle end");
1751
+ }
1752
+ }
1753
+ return res
1754
+ }
1755
+
1679
1756
  async _atomicSetAudioLanguage() {
1680
- sdkLogger.info("Seeking: local video element seeking start while isPLaying=", this._isPlaying);
1757
+ sdkLogger.info("SetAudioLanguage: local video element set start while isPLaying=", this._isPlaying);
1681
1758
 
1759
+ this._targetSeekPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1682
1760
  this._abortSetAudioLanguage = false;
1683
1761
  this._isSetAudioByApplication = true;
1684
1762
 
@@ -1707,17 +1785,23 @@ class RemotePlayer extends EventTarget {
1707
1785
  break;
1708
1786
  }
1709
1787
  } catch (error) {
1710
- sdkLogger.error(`Error during seeking process: ${error.message}`);
1711
- state = SeekState.DONE;
1788
+ sdkLogger.error(`Error during set audio process: ${error.message}`);
1789
+ state = SetAudioLanguageState.DONE;
1712
1790
  res = Promise.reject(error);
1713
1791
  } finally {
1714
1792
  if (!this._abortSetAudioLanguage) {
1715
- this._play();
1793
+ if (this._targetSeekPlayingState === TargetPlayingState.PLAYING_UI) {
1794
+ console.log("BEFORE PLAY AFTER SET AUDIO");
1795
+ await this._play();
1796
+ } else if (this._targetSeekPlayingState === TargetPlayingState.PLAYING_ABR) {
1797
+ console.log("BEFORE MOVE_TO_BACKGROUND AFTER SET AUDIO");
1798
+ await lifecycle._moveToBackground();
1799
+ }
1716
1800
  }
1717
1801
  this._isSetAudioByApplication = false;
1718
- sdkLogger.info("Seeking: local video element seeking end");
1802
+ sdkLogger.info("SetAudioLanguage: local video element set audio end");
1719
1803
  }
1720
- }
1804
+ }
1721
1805
  return res
1722
1806
  }
1723
1807
  }
package/src/utils.js CHANGED
@@ -164,6 +164,15 @@ export const SetAudioLanguageState = Object.freeze({
164
164
  DONE: "done"
165
165
  });
166
166
 
167
+ export const SetSubtitleLanguageState = Object.freeze({
168
+ INIT: "init",
169
+ STOPPED: "stopped",
170
+ SET: "set",
171
+ MULTI_SET: "multiSet",
172
+ WAITING: "waiting",
173
+ DONE: "done"
174
+ });
175
+
167
176
  export const iso6393to1 = {
168
177
  "aar": "aa",
169
178
  "abk": "ab",