senza-sdk 4.2.51-c1ae854.0 → 4.2.51-ccd3044.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-ccd3044.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,65 @@ 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._targetSetSubtitlePlayingState = 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
+ sdkLogger.error("BEFORE PLAY AFTER SET SUBTITLE 1");
1733
+ state = SetSubtitleLanguageState.DONE;
1734
+ break;
1735
+ }
1736
+ } catch (error) {
1737
+ sdkLogger.error(`Error during set subtitle process: ${error.message}`);
1738
+ state = SetSubtitleLanguageState.DONE;
1739
+ res = Promise.reject(error);
1740
+ } finally {
1741
+ sdkLogger.error("ABORT SET SUBTITLE", this._abortSetSubtitleLanguage);
1742
+ if (!this._abortSetSubtitleLanguage) {
1743
+ sdkLogger.error("TARGET PLAYING STATE", this._targetSetSubtitlePlayingState);
1744
+ if (this._targetSetSubtitlePlayingState === TargetPlayingState.PLAYING_UI) {
1745
+ sdkLogger.error("BEFORE PLAY AFTER SET SUBTITLE 2");
1746
+ this._play();
1747
+ } else if (this._targetSetSubtitlePlayingState === TargetPlayingState.PLAYING_ABR) {
1748
+ sdkLogger.error("BEFORE MOVE_TO_BACKGROUND AFTER SET SUBTITLE");
1749
+ lifecycle._moveToBackground();
1750
+ }
1751
+ }
1752
+ this._isSetSubtitleByApplication = false;
1753
+ sdkLogger.info("SetSubtitleLanguage: local video element set subtitle end");
1754
+ }
1755
+ }
1756
+ return res
1757
+ }
1758
+
1679
1759
  async _atomicSetAudioLanguage() {
1680
- sdkLogger.info("Seeking: local video element seeking start while isPLaying=", this._isPlaying);
1760
+ sdkLogger.info("SetAudioLanguage: local video element set start while isPLaying=", this._isPlaying);
1681
1761
 
1762
+ this._targetSetAudioPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1682
1763
  this._abortSetAudioLanguage = false;
1683
1764
  this._isSetAudioByApplication = true;
1684
1765
 
@@ -1703,21 +1784,30 @@ class RemotePlayer extends EventTarget {
1703
1784
  initialAudioLanguage = this._pendingAudioLanguage;
1704
1785
  previousPendingAudioLanguage = this._selectedAudioTrack;
1705
1786
  res = await this._selectAudioTrackV3(initialAudioLanguage, previousPendingAudioLanguage);
1787
+ sdkLogger.error("BEFORE PLAY AFTER SET AUDIO 1");
1706
1788
  state = SetAudioLanguageState.DONE;
1707
1789
  break;
1708
1790
  }
1709
1791
  } catch (error) {
1710
- sdkLogger.error(`Error during seeking process: ${error.message}`);
1711
- state = SeekState.DONE;
1792
+ sdkLogger.error(`Error during set audio process: ${error.message}`);
1793
+ state = SetAudioLanguageState.DONE;
1712
1794
  res = Promise.reject(error);
1713
1795
  } finally {
1796
+ sdkLogger.error("ABORT SET AUDIO", this._abortSetAudioLanguage);
1714
1797
  if (!this._abortSetAudioLanguage) {
1715
- this._play();
1798
+ sdkLogger.error("TARGET PLAYING STATE", this._targetSetAudioPlayingState);
1799
+ if (this._targetSetAudioPlayingState === TargetPlayingState.PLAYING_UI) {
1800
+ sdkLogger.error("BEFORE PLAY AFTER SET AUDIO 2");
1801
+ this._play();
1802
+ } else if (this._targetSetAudioPlayingState === TargetPlayingState.PLAYING_ABR) {
1803
+ sdkLogger.error("BEFORE MOVE_TO_BACKGROUND AFTER SET AUDIO");
1804
+ lifecycle._moveToBackground();
1805
+ }
1716
1806
  }
1717
1807
  this._isSetAudioByApplication = false;
1718
- sdkLogger.info("Seeking: local video element seeking end");
1808
+ sdkLogger.info("SetAudioLanguage: local video element set audio end");
1719
1809
  }
1720
- }
1810
+ }
1721
1811
  return res
1722
1812
  }
1723
1813
  }
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",