senza-sdk 4.2.51-90a45e8.0 → 4.2.51-c1ae854.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-90a45e8.0",
3
+ "version": "4.2.51-c1ae854.0",
4
4
  "main": "./src/api.js",
5
5
  "description": "API for Senza application",
6
6
  "license": "MIT",
@@ -9,7 +9,8 @@ import {
9
9
  SeekState,
10
10
  TargetPlayingState,
11
11
  isSubtitlesTranslationAllowed,
12
- isSubtitlesTranslationPattern
12
+ isSubtitlesTranslationPattern,
13
+ SetAudioLanguageState
13
14
  } from "./utils";
14
15
  import { lifecycle } from "./lifecycle";
15
16
  import { writeLicenseResponse } from "./api";
@@ -890,6 +891,7 @@ class RemotePlayer extends EventTarget {
890
891
  if (this._loadMode === this.LoadMode.LOADING || this._loadMode === this.LoadMode.UNLOADING) {
891
892
  throw new RemotePlayerError(6501, "Cannot call load() while previous load/unload is still in progress");
892
893
  }
894
+ this._abortSetAudioLanguage = true;
893
895
  this._abortSeeking = true;
894
896
  if (reset) {
895
897
  this._reset();
@@ -1209,7 +1211,8 @@ class RemotePlayer extends EventTarget {
1209
1211
  case 2:
1210
1212
  return this._selectAudioTrackV2(audioTrackId, prevSelectedAudioTrack);
1211
1213
  default:
1212
- return this._selectAudioTrackV3(audioTrackId, prevSelectedAudioTrack);
1214
+ this._pendingAudioLanguage = audioTrackId;
1215
+ return this._atomicSetAudioLanguage();
1213
1216
  }
1214
1217
  }
1215
1218
 
@@ -1271,7 +1274,6 @@ class RemotePlayer extends EventTarget {
1271
1274
  action: "setAudioLanguage",
1272
1275
  fcid: FCID,
1273
1276
  language: audioTrackId,
1274
- playbackPosition: this.currentTime
1275
1277
  };
1276
1278
  const request = { target: "TC", waitForResponse: true, message: JSON.stringify(message) };
1277
1279
  return new Promise((resolve, reject) => {
@@ -1303,6 +1305,7 @@ class RemotePlayer extends EventTarget {
1303
1305
  }, timeout, queryId);
1304
1306
  });
1305
1307
  }
1308
+
1306
1309
  sdkLogger.error("remotePlayer _selectAudioTrackV3: window.cefQuery is undefined");
1307
1310
  return Promise.resolve(undefined);
1308
1311
  }
@@ -1408,7 +1411,6 @@ class RemotePlayer extends EventTarget {
1408
1411
  action: "setSubtitleLanguage",
1409
1412
  fcid: FCID,
1410
1413
  language: textTrackId,
1411
- playbackPosition: this.currentTime
1412
1414
  };
1413
1415
  const request = { target: "TC", waitForResponse: true, message: JSON.stringify(message) };
1414
1416
  return new Promise((resolve, reject) => {
@@ -1673,6 +1675,51 @@ class RemotePlayer extends EventTarget {
1673
1675
  this._isSeekingByApplication = false;
1674
1676
  sdkLogger.info("Seeking: local video element seeking end");
1675
1677
  }
1678
+
1679
+ async _atomicSetAudioLanguage() {
1680
+ sdkLogger.info("Seeking: local video element seeking start while isPLaying=", this._isPlaying);
1681
+
1682
+ this._abortSetAudioLanguage = false;
1683
+ this._isSetAudioByApplication = true;
1684
+
1685
+ let state = SetAudioLanguageState.INIT;
1686
+
1687
+ let previousPendingAudioLanguage = this._pendingAudioLanguage;
1688
+ let initialAudioLanguage= this._pendingAudioLanguage;
1689
+ let res;
1690
+
1691
+ while (!this._abortSetAudioLanguage && state !== SetAudioLanguageState.DONE) {
1692
+ try {
1693
+ // TODO - Implement the logic for setting audio language
1694
+ switch(state) {
1695
+ case SetAudioLanguageState.INIT:
1696
+ state = this._isPlaying ? SetAudioLanguageState.STOPPED : SetAudioLanguageState.SET;
1697
+ break;
1698
+ case SetAudioLanguageState.STOPPED:
1699
+ await lifecycle.moveToForeground();
1700
+ state = SetAudioLanguageState.SET;
1701
+ break;
1702
+ case SetAudioLanguageState.SET:
1703
+ initialAudioLanguage = this._pendingAudioLanguage;
1704
+ previousPendingAudioLanguage = this._selectedAudioTrack;
1705
+ res = await this._selectAudioTrackV3(initialAudioLanguage, previousPendingAudioLanguage);
1706
+ state = SetAudioLanguageState.DONE;
1707
+ break;
1708
+ }
1709
+ } catch (error) {
1710
+ sdkLogger.error(`Error during seeking process: ${error.message}`);
1711
+ state = SeekState.DONE;
1712
+ res = Promise.reject(error);
1713
+ } finally {
1714
+ if (!this._abortSetAudioLanguage) {
1715
+ this._play();
1716
+ }
1717
+ this._isSetAudioByApplication = false;
1718
+ sdkLogger.info("Seeking: local video element seeking end");
1719
+ }
1720
+ }
1721
+ return res
1722
+ }
1676
1723
  }
1677
1724
  /**
1678
1725
  *
package/src/utils.js CHANGED
@@ -155,6 +155,15 @@ 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
+
158
167
  export const iso6393to1 = {
159
168
  "aar": "aa",
160
169
  "abk": "ab",