senza-sdk 4.2.51-44b32dd.0 → 4.2.51-9f586bc.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-44b32dd.0",
3
+ "version": "4.2.51-9f586bc.0",
4
4
  "main": "./src/api.js",
5
5
  "description": "API for Senza application",
6
6
  "license": "MIT",
@@ -9,7 +9,9 @@ import {
9
9
  SeekState,
10
10
  TargetPlayingState,
11
11
  isSubtitlesTranslationAllowed,
12
- isSubtitlesTranslationPattern
12
+ isSubtitlesTranslationPattern,
13
+ SetAudioLanguageState,
14
+ SetSubtitleLanguageState
13
15
  } from "./utils";
14
16
  import { lifecycle } from "./lifecycle";
15
17
  import { writeLicenseResponse } from "./api";
@@ -890,6 +892,8 @@ class RemotePlayer extends EventTarget {
890
892
  if (this._loadMode === this.LoadMode.LOADING || this._loadMode === this.LoadMode.UNLOADING) {
891
893
  throw new RemotePlayerError(6501, "Cannot call load() while previous load/unload is still in progress");
892
894
  }
895
+ this._abortSetAudioLanguage = true;
896
+ this._abortSetSubtitleLanguage = true;
893
897
  this._abortSeeking = true;
894
898
  if (reset) {
895
899
  this._reset();
@@ -1209,7 +1213,8 @@ class RemotePlayer extends EventTarget {
1209
1213
  case 2:
1210
1214
  return this._selectAudioTrackV2(audioTrackId, prevSelectedAudioTrack);
1211
1215
  default:
1212
- return this._selectAudioTrackV3(audioTrackId, prevSelectedAudioTrack);
1216
+ this._pendingAudioLanguage = audioTrackId;
1217
+ return this._atomicSetAudioLanguage();
1213
1218
  }
1214
1219
  }
1215
1220
 
@@ -1346,7 +1351,8 @@ class RemotePlayer extends EventTarget {
1346
1351
  case 2:
1347
1352
  return this._selectTextTrackV2(textTrackId, prevSelectedTextTrack);
1348
1353
  default:
1349
- return this._selectTextTrackV3(textTrackId, prevSelectedTextTrack);
1354
+ this._pendingSubtitleLanguage = textTrackId;
1355
+ return this._atomicSetSubtitleLanguage();
1350
1356
  }
1351
1357
  }
1352
1358
 
@@ -1672,6 +1678,96 @@ class RemotePlayer extends EventTarget {
1672
1678
  this._isSeekingByApplication = false;
1673
1679
  sdkLogger.info("Seeking: local video element seeking end");
1674
1680
  }
1681
+
1682
+ async _atomicSetSubtitleLanguage() {
1683
+ sdkLogger.info("SetSubtitleLanguage: local video element set start while isPLaying=", this._isPlaying);
1684
+
1685
+ this._abortSetSubtitleLanguage = false;
1686
+ this._isSetSubtitleByApplication = true;
1687
+
1688
+ let state = SetSubtitleLanguageState.INIT;
1689
+
1690
+ let previousPendingSubtitleLanguage = this._pendingSubtitleLanguage;
1691
+ let initialSubtitleLanguage= this._pendingSubtitleLanguage;
1692
+ let res;
1693
+
1694
+ while (!this._abortSetSubtitleLanguage && state !== SetSubtitleLanguageState.DONE) {
1695
+ try {
1696
+ // TODO - Implement the logic for setting audio language
1697
+ switch(state) {
1698
+ case SetSubtitleLanguageState.INIT:
1699
+ state = this._isPlaying ? SetSubtitleLanguageState.STOPPED : SetSubtitleLanguageState.SET;
1700
+ break;
1701
+ case SetSubtitleLanguageState.STOPPED:
1702
+ await lifecycle.moveToForeground();
1703
+ state = SetSubtitleLanguageState.SET;
1704
+ break;
1705
+ case SetSubtitleLanguageState.SET:
1706
+ initialSubtitleLanguage = this._pendingSubtitleLanguage;
1707
+ previousPendingSubtitleLanguage = this._selectedSubtitleTrack;
1708
+ res = await this._selectTextTrackV3(initialSubtitleLanguage, previousPendingSubtitleLanguage);
1709
+ state = SetSubtitleLanguageState.DONE;
1710
+ break;
1711
+ }
1712
+ } catch (error) {
1713
+ sdkLogger.error(`Error during set subtitle process: ${error.message}`);
1714
+ state = SetSubtitleLanguageState.DONE;
1715
+ res = Promise.reject(error);
1716
+ } finally {
1717
+ if (!this._abortSetSubtitleLanguage) {
1718
+ this._play();
1719
+ }
1720
+ this._isSetSubtitleByApplication = false;
1721
+ sdkLogger.info("SetSubtitleLanguage: local video element set subtitle end");
1722
+ }
1723
+ }
1724
+ return res
1725
+ }
1726
+
1727
+ async _atomicSetAudioLanguage() {
1728
+ sdkLogger.info("SetAudioLanguage: local video element set start while isPLaying=", this._isPlaying);
1729
+
1730
+ this._abortSetAudioLanguage = false;
1731
+ this._isSetAudioByApplication = true;
1732
+
1733
+ let state = SetAudioLanguageState.INIT;
1734
+
1735
+ let previousPendingAudioLanguage = this._pendingAudioLanguage;
1736
+ let initialAudioLanguage= this._pendingAudioLanguage;
1737
+ let res;
1738
+
1739
+ while (!this._abortSetAudioLanguage && state !== SetAudioLanguageState.DONE) {
1740
+ try {
1741
+ // TODO - Implement the logic for setting audio language
1742
+ switch(state) {
1743
+ case SetAudioLanguageState.INIT:
1744
+ state = this._isPlaying ? SetAudioLanguageState.STOPPED : SetAudioLanguageState.SET;
1745
+ break;
1746
+ case SetAudioLanguageState.STOPPED:
1747
+ await lifecycle.moveToForeground();
1748
+ state = SetAudioLanguageState.SET;
1749
+ break;
1750
+ case SetAudioLanguageState.SET:
1751
+ initialAudioLanguage = this._pendingAudioLanguage;
1752
+ previousPendingAudioLanguage = this._selectedAudioTrack;
1753
+ res = await this._selectAudioTrackV3(initialAudioLanguage, previousPendingAudioLanguage);
1754
+ state = SetAudioLanguageState.DONE;
1755
+ break;
1756
+ }
1757
+ } catch (error) {
1758
+ sdkLogger.error(`Error during set audio process: ${error.message}`);
1759
+ state = SetAudioLanguageState.DONE;
1760
+ res = Promise.reject(error);
1761
+ } finally {
1762
+ if (!this._abortSetAudioLanguage) {
1763
+ this._play();
1764
+ }
1765
+ this._isSetAudioByApplication = false;
1766
+ sdkLogger.info("SetAudioLanguage: local video element set audio end");
1767
+ }
1768
+ }
1769
+ return res
1770
+ }
1675
1771
  }
1676
1772
  /**
1677
1773
  *
package/src/utils.js CHANGED
@@ -155,6 +155,24 @@ export const TargetPlayingState = Object.freeze({
155
155
  PLAYING_ABR: "playingAbr"
156
156
  });
157
157
 
158
+ export const SetAudioLanguageState = Object.freeze({
159
+ INIT: "init",
160
+ STOPPED: "stopped",
161
+ SET: "set",
162
+ MULTI_SET: "multiSet",
163
+ WAITING: "waiting",
164
+ DONE: "done"
165
+ });
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
+
158
176
  export const iso6393to1 = {
159
177
  "aar": "aa",
160
178
  "abk": "ab",