senza-sdk 4.2.51-6aee9e6.0 → 4.2.51-77d7fb8.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-6aee9e6.0",
3
+ "version": "4.2.51-77d7fb8.0",
4
4
  "main": "./src/api.js",
5
5
  "description": "API for Senza application",
6
6
  "license": "MIT",
@@ -695,7 +695,7 @@ class RemotePlayer extends EventTarget {
695
695
  return Promise.resolve(undefined);
696
696
  }
697
697
 
698
- _play() {
698
+ _play(streamType = StreamType.AUDIO) {
699
699
  if (window.cefQuery) {
700
700
  const FCID = getFCID();
701
701
  const logger = sdkLogger.withFields({ FCID });
@@ -719,7 +719,7 @@ class RemotePlayer extends EventTarget {
719
719
  if (this._remotePlayerApiVersion >= 2) {
720
720
  if (this._isAudioSyncEnabled()) {
721
721
  message.switchMode = SwitchMode.SEAMLESS;
722
- message.streamType = StreamType.AUDIO;
722
+ message.streamType = streamType;
723
723
  waitForResponse = true;
724
724
  } else {
725
725
  logger.log("remotePlayer play request ignored and will be sent with the lifecycle.moveToBackground()");
@@ -817,6 +817,52 @@ class RemotePlayer extends EventTarget {
817
817
  return Promise.resolve(undefined);
818
818
  }
819
819
 
820
+ _stop(streamType = StreamType.AUDIO) {
821
+ if (window.cefQuery) {
822
+ this._changePlayMode(false);
823
+ const FCID = getFCID();
824
+ const logger = sdkLogger.withFields({ FCID });
825
+ logger.log(`remotePlayer stop: sending stop action for streamType ${streamType}`);
826
+ const message = {
827
+ type: "remotePlayer.stop",
828
+ class: "remotePlayer",
829
+ action: "stop",
830
+ streamType: streamType,
831
+ fcid: FCID
832
+ };
833
+ const request = { target: "TC", waitForResponse: true, message: JSON.stringify(message) };
834
+ return new Promise((resolve, reject) => {
835
+ let timerId = 0;
836
+ const timeBeforeSendingRequest = Date.now();
837
+ const queryId = window.cefQuery({
838
+ request: JSON.stringify(request),
839
+ persistent: false,
840
+ onSuccess: () => {
841
+ const duration = Date.now() - timeBeforeSendingRequest;
842
+ logger.withFields({ duration }).log(`stop completed successfully after ${duration} ms`);
843
+ timerId = clearTimer(timerId);
844
+ resolve();
845
+ },
846
+ onFailure: (code, msg) => {
847
+ const duration = Date.now() - timeBeforeSendingRequest;
848
+ logger.withFields({ duration }).log(`stop failed after ${duration} ms. Error code: ${code}, error message: ${msg}`);
849
+ timerId = clearTimer(timerId);
850
+ reject(new RemotePlayerError(code, msg));
851
+ }
852
+ });
853
+ logger.log(`window.cefQuery for stop returned query id ${queryId}`);
854
+ const timeout = this._remotePlayerConfirmationTimeout + 1000;
855
+ timerId = setTimeout(() => {
856
+ logger.log(`stop reached timeout of ${timeout} ms, canceling query id ${queryId}`);
857
+ window.cefQueryCancel(queryId);
858
+ reject(new RemotePlayerError(6000, `stop reached timeout of ${timeout} ms`));
859
+ }, timeout, queryId);
860
+ });
861
+ }
862
+ sdkLogger.error("remotePlayer play: window.cefQuery is undefined");
863
+ return Promise.resolve(undefined);
864
+ }
865
+
820
866
  /** In order to support a seamless switch between the video in the UI and ABR, the web application must
821
867
  * register the video element being used for the currently played video before calling the load and play apis.
822
868
  * @param {object} video The video element currently playing video in the web application
@@ -1235,8 +1281,7 @@ class RemotePlayer extends EventTarget {
1235
1281
  case 2:
1236
1282
  return this._selectAudioTrackV2(audioTrackId, prevSelectedAudioTrack);
1237
1283
  default:
1238
- this._pendingAudioLanguage = audioTrackId;
1239
- return this._atomicSetAudioLanguage();
1284
+ return this._atomicSetAudioLanguage(audioTrackId, prevSelectedAudioTrack);
1240
1285
  }
1241
1286
  }
1242
1287
 
@@ -1283,11 +1328,10 @@ class RemotePlayer extends EventTarget {
1283
1328
  * Available only from v3 and on
1284
1329
  *
1285
1330
  * @param {string} audioTrackId - The ID of the audio track to select.
1286
- * @param {string} prevSelectedAudioTrack - The previously selected audio track ID.
1287
1331
  * @returns {Promise<void>} Resolves when the operation is complete.
1288
1332
  * */
1289
- async _selectAudioTrackV3(audioTrackId, prevSelectedAudioTrack) {
1290
- sdkLogger.log(`remotePlayer _selectAudioTrackV3: prevAudioTrack=${prevSelectedAudioTrack} audioTrackId=${audioTrackId} isPlaying=${this._isPlaying}`);
1333
+ async _selectAudioTrackV3(audioTrackId) {
1334
+ sdkLogger.log(`remotePlayer _selectAudioTrackV3: audioTrackId=${audioTrackId} isPlaying=${this._isPlaying}`);
1291
1335
  if (window.cefQuery) {
1292
1336
  const FCID = getFCID();
1293
1337
  const logger = sdkLogger.withFields({ FCID });
@@ -1373,8 +1417,7 @@ class RemotePlayer extends EventTarget {
1373
1417
  case 2:
1374
1418
  return this._selectTextTrackV2(textTrackId, prevSelectedTextTrack);
1375
1419
  default:
1376
- this._pendingSubtitleLanguage = textTrackId;
1377
- return this._atomicSetSubtitleLanguage();
1420
+ return this._atomicSetSubtitleLanguage(textTrackId, prevSelectedTextTrack);
1378
1421
  }
1379
1422
  }
1380
1423
 
@@ -1421,11 +1464,9 @@ class RemotePlayer extends EventTarget {
1421
1464
  * Available only from v3 and on
1422
1465
  *
1423
1466
  * @param {string} textTrackId - The ID of the text track to select.
1424
- * @param {string} prevSelectedTextTrack - The previously selected text track ID.
1425
1467
  * @returns {Promise<void>} Resolves when the operation is complete.
1426
1468
  * */
1427
- async _selectTextTrackV3(textTrackId, prevSelectedTextTrack) {
1428
- sdkLogger.log(`remotePlayer _selectTextTrackV3: prevAudioTrack=${prevSelectedTextTrack} textTrackId=${textTrackId} isPlaying=${this._isPlaying}`);
1469
+ async _selectTextTrackV3(textTrackId) {
1429
1470
  if (window.cefQuery) {
1430
1471
  const FCID = getFCID();
1431
1472
  const logger = sdkLogger.withFields({ FCID });
@@ -1435,7 +1476,7 @@ class RemotePlayer extends EventTarget {
1435
1476
  class: "remotePlayer",
1436
1477
  action: "setSubtitleLanguage",
1437
1478
  fcid: FCID,
1438
- language: textTrackId,
1479
+ language: textTrackId
1439
1480
  };
1440
1481
  const request = { target: "TC", waitForResponse: true, message: JSON.stringify(message) };
1441
1482
  return new Promise((resolve, reject) => {
@@ -1701,271 +1742,101 @@ class RemotePlayer extends EventTarget {
1701
1742
  sdkLogger.info("Seeking: local video element seeking end");
1702
1743
  }
1703
1744
 
1704
- async _stopAudio() {
1705
- if (window.cefQuery) {
1706
- if (this._remotePlayerApiVersion >= 2) {
1707
- return new Promise((resolve, reject) => {
1708
- const FCID = getFCID();
1709
- const logger = sdkLogger.withFields({ FCID });
1710
- logger.log(`remotePlayer _stopAudio: sending stop action remotePlayer._isPlaying=${remotePlayer._isPlaying}`);
1711
- const message = {
1712
- type: "remotePlayer.stop",
1713
- class: "remotePlayer",
1714
- action: "stop",
1715
- streamType: StreamType.AUDIO,
1716
- fcid: FCID
1717
- };
1718
- let timerId = 0;
1719
- const timeBeforeSendingRequest = Date.now();
1720
- const queryId = window.cefQuery({
1721
- request: JSON.stringify({ target: "TC", waitForResponse: true, internalAction: "uiActive", message: JSON.stringify(message) }),
1722
- persistent: false,
1723
- onSuccess: () => {
1724
- const duration = Date.now() - timeBeforeSendingRequest;
1725
- logger.withFields({ duration }).log(`stop audio completed successfully after ${duration} ms`);
1726
- this._inTransition = false;
1727
- timerId = clearTimer(timerId);
1728
- resolve(true);
1729
- },
1730
- onFailure: (code, msg) => {
1731
- const duration = Date.now() - timeBeforeSendingRequest;
1732
- logger.withFields({ duration }).log(`stop audio failed after ${duration} ms. Error code: ${code}, error message: ${msg}`);
1733
- this._inTransition = false;
1734
- timerId = clearTimer(timerId);
1735
- reject(new SenzaError(code, msg));
1736
- }
1737
- });
1738
- logger.log(`window.cefQuery for stop audio returned query id ${queryId}`);
1739
- const timeout = this._remotePlayerConfirmationTimeout + 1000;
1740
- timerId = setTimeout(() => {
1741
- logger.log(`stop audio reached timeout of ${timeout} ms, canceling query id ${queryId}`);
1742
- this._inTransition = false;
1743
- window.cefQueryCancel(queryId);
1744
- reject(new SenzaError(6000, `stop audio reached timeout of ${timeout} ms`));
1745
- }, timeout, queryId);
1746
- });
1747
- }
1748
- }
1745
+ async _atomicSetAudioLanguage(audioTrackId, prevSelectedAudioTrack) {
1746
+ this._targetSetAudioPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1749
1747
 
1750
- }
1748
+ sdkLogger.log(`remotePlayer _atomicSetAudioLanguage: prevAudioTrack=${prevSelectedAudioTrack} audioTrackId=${audioTrackId} isPlaying=${this._isPlaying} targetState=${this._targetSetAudioPlayingState}`);
1751
1749
 
1752
- async _stopSubtitle() {
1753
- if (window.cefQuery) {
1754
- if (this._remotePlayerApiVersion >= 2) {
1755
- return new Promise((resolve, reject) => {
1756
- const FCID = getFCID();
1757
- const logger = sdkLogger.withFields({ FCID });
1758
- logger.log(`remotePlayer _stopSubtitle: sending stop action remotePlayer._isPlaying=${remotePlayer._isPlaying}`);
1759
- const message = {
1760
- type: "remotePlayer.stop",
1761
- class: "remotePlayer",
1762
- action: "stop",
1763
- streamType: StreamType.SUBTITLE,
1764
- fcid: FCID
1765
- };
1766
- let timerId = 0;
1767
- const timeBeforeSendingRequest = Date.now();
1768
- const queryId = window.cefQuery({
1769
- request: JSON.stringify({ target: "TC", waitForResponse: true, internalAction: "uiActive", message: JSON.stringify(message) }),
1770
- persistent: false,
1771
- onSuccess: () => {
1772
- const duration = Date.now() - timeBeforeSendingRequest;
1773
- logger.withFields({ duration }).log(`stop subtitle completed successfully after ${duration} ms`);
1774
- this._inTransition = false;
1775
- timerId = clearTimer(timerId);
1776
- resolve(true);
1777
- },
1778
- onFailure: (code, msg) => {
1779
- const duration = Date.now() - timeBeforeSendingRequest;
1780
- logger.withFields({ duration }).log(`stop subtitle failed after ${duration} ms. Error code: ${code}, error message: ${msg}`);
1781
- this._inTransition = false;
1782
- timerId = clearTimer(timerId);
1783
- reject(new SenzaError(code, msg));
1784
- }
1785
- });
1786
- logger.log(`window.cefQuery for stop returned query id ${queryId}`);
1787
- const timeout = this._remotePlayerConfirmationTimeout + 1000;
1788
- timerId = setTimeout(() => {
1789
- logger.log(`stop reached timeout of ${timeout} ms, canceling query id ${queryId}`);
1790
- window.cefQueryCancel(queryId);
1791
- reject(new SenzaError(6000, `stop reached timeout of ${timeout} ms`));
1792
- }, timeout, queryId);
1793
- });
1794
- }
1795
- }
1796
-
1797
- }
1750
+ this._abortSetAudioLanguage = false;
1751
+ this._isSetAudioByApplication = true;
1798
1752
 
1799
- async _playSubtitle() {
1800
- if (window.cefQuery) {
1801
- if (this._remotePlayerApiVersion >= 2) {
1802
- return new Promise((resolve, reject) => {
1803
- const FCID = getFCID();
1804
- const logger = sdkLogger.withFields({ FCID });
1805
- logger.log("remotePlayer play subtitle: sending play action");
1806
- const configuration = remotePlayer.getConfiguration();
1807
- const subtitlesLanguage = remotePlayer.textTrackVisibility && (remotePlayer._selectedSubtitlesTrack || configuration.preferredSubtitlesLanguage) || "";
1808
- let request;
1809
- const message = {
1810
- action: "play",
1811
- fcid: FCID,
1812
- subtitlesLanguage
1813
- };
1814
- if (this._remotePlayerApiVersion >= 2) {
1815
- message.type = "remotePlayer.play";
1816
- message.class = "remotePlayer";
1817
- message.streamType = StreamType.SUBTITLE;
1818
- request = {
1819
- target: "TC",
1820
- waitForResponse: true,
1821
- internalAction: "uiExit",
1822
- message: JSON.stringify(message)
1823
- };
1824
- } else {
1825
- request = message;
1826
- }
1827
- let timerId = 0;
1828
- const timeBeforeSendingRequest = Date.now();
1829
- const queryId = window.cefQuery({
1830
- request: JSON.stringify(request),
1831
- persistent: false,
1832
- onSuccess: () => {
1833
- const duration = Date.now() - timeBeforeSendingRequest;
1834
- logger.withFields({ duration }).log(`play subtitle completed successfully after ${duration} ms`);
1835
- this._inTransition = false;
1836
- timerId = clearTimer(timerId);
1837
- resolve();
1838
- },
1839
- onFailure: (code, msg) => {
1840
- const duration = Date.now() - timeBeforeSendingRequest;
1841
- logger.withFields({ duration }).log(`play subtitle failed after ${duration} ms. Error code: ${code}, error message: ${msg}`);
1842
- this._inTransition = false;
1843
- timerId = clearTimer(timerId);
1844
- reject(new SenzaError(code, msg));
1845
- }
1846
- });
1847
- if (this._remotePlayerApiVersion >= 2) {
1848
- logger.log(`window.cefQuery for play subtitle returned query id ${queryId}`);
1849
- const timeout = this._remotePlayerConfirmationTimeout + 1000;
1850
- timerId = setTimeout(() => {
1851
- logger.log(`play subtitle reached timeout of ${timeout} ms, canceling query id ${queryId}`);
1852
- this._inTransition = false;
1853
- window.cefQueryCancel(queryId);
1854
- reject(new SenzaError(6000, `play subtitle reached timeout of ${timeout} ms`));
1855
- }, timeout, queryId);
1753
+ let state = SetAudioLanguageState.INIT;
1754
+ let res;
1755
+
1756
+ while (!this._abortSetAudioLanguage && state !== SetAudioLanguageState.DONE) {
1757
+ try {
1758
+ switch(state) {
1759
+ case SetAudioLanguageState.INIT:
1760
+ // always stop stream before changing language to flush current segments
1761
+ // because we cannot differentiate if player is paused/stopped
1762
+ state = SetAudioLanguageState.STOPPED;
1763
+ break;
1764
+ case SetAudioLanguageState.STOPPED:
1765
+ await this._stop(StreamType.AUDIO);
1766
+ state = SetAudioLanguageState.SET;
1767
+ break;
1768
+ case SetAudioLanguageState.SET:
1769
+ res = await this._selectAudioTrackV3(audioTrackId);
1770
+ // check if we need to resume playback or leave player state as is
1771
+ state = this._targetSetAudioPlayingState !== TargetPlayingState.PAUSED ? SetAudioLanguageState.PLAYING: SetAudioLanguageState.DONE;
1772
+ sdkLogger.log(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} isPlaying=${this._isPlaying} targetState=${this._targetSetAudioPlayingState}`);
1773
+ break;
1774
+ case SetAudioLanguageState.PLAYING:
1775
+ if (!this._abortSetAudioLanguage) {
1776
+ await this._play(StreamType.AUDIO);
1856
1777
  }
1857
- });
1778
+ state = SetAudioLanguageState.DONE;
1779
+ break;
1780
+ }
1781
+ } catch (error) {
1782
+ sdkLogger.error(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} failed with error ${error.message}.`);
1783
+ state = SetAudioLanguageState.DONE;
1784
+ res = Promise.reject(error);
1858
1785
  }
1859
-
1860
1786
  }
1861
- sdkLogger.error("remotePlayer play subtitle: window.cefQuery is undefined");
1862
- return Promise.resolve(undefined);
1863
- }
1864
1787
 
1865
- async _atomicSetSubtitleLanguage() {
1866
- sdkLogger.info("SetSubtitleLanguage: local video element set start while isPLaying=", this._isPlaying);
1788
+ this._isSetAudioByApplication = false;
1789
+ sdkLogger.log(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} ended.`);
1790
+ return res;
1791
+ }
1867
1792
 
1793
+ async _atomicSetSubtitleLanguage(textTrackId, prevSelectedTextTrack) {
1868
1794
  this._targetSetSubtitlePlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1795
+ sdkLogger.log(`remotePlayer _atomicSetSubtitleLanguage: prevTextTrack=${prevSelectedTextTrack} textTrackId=${textTrackId} isPlaying=${this._isPlaying} targetState=${this._targetSetSubtitlePlayingState}`);
1796
+
1869
1797
  this._abortSetSubtitleLanguage = false;
1870
1798
  this._isSetSubtitleByApplication = true;
1871
1799
 
1872
1800
  let state = SetSubtitleLanguageState.INIT;
1873
-
1874
- let previousPendingSubtitleLanguage = this._pendingSubtitleLanguage;
1875
- let initialSubtitleLanguage = this._pendingSubtitleLanguage;
1876
1801
  let res;
1877
1802
 
1878
1803
  while (!this._abortSetSubtitleLanguage && state !== SetSubtitleLanguageState.DONE) {
1879
1804
  try {
1880
1805
  switch(state) {
1881
1806
  case SetSubtitleLanguageState.INIT:
1882
- state = this._isPlaying ? SetSubtitleLanguageState.STOPPED : SetSubtitleLanguageState.SET;
1807
+ // always stop stream before changing language to flush current segments
1808
+ // because we cannot differentiate if player is paused/stopped
1809
+ state = SetSubtitleLanguageState.STOPPED;
1883
1810
  break;
1884
1811
  case SetSubtitleLanguageState.STOPPED:
1885
- sdkLogger.error("BEFORE STOP BEFORE SET SUBTITLE");
1886
- await this._stopSubtitle();
1887
- sdkLogger.error("AFTER STOP BEFORE SET SUBTITLE");
1812
+ await this._stop(StreamType.SUBTITLE);
1888
1813
  state = SetSubtitleLanguageState.SET;
1889
1814
  break;
1890
1815
  case SetSubtitleLanguageState.SET:
1891
- initialSubtitleLanguage = this._pendingSubtitleLanguage;
1892
- previousPendingSubtitleLanguage = this._selectedSubtitleTrack;
1893
- res = await this._selectTextTrackV3(initialSubtitleLanguage, previousPendingSubtitleLanguage);
1894
- sdkLogger.error("BEFORE PLAY AFTER SET SUBTITLE 1");
1816
+ res = await this._selectTextTrackV3(textTrackId);
1817
+ // check if we need to resume playback or leave player state as is
1818
+ state = this._targetSetSubtitlePlayingState !== TargetPlayingState.PAUSED ? SetSubtitleLanguageState.PLAYING: SetSubtitleLanguageState.DONE;
1819
+ sdkLogger.log(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} isPlaying=${this._isPlaying} targetState=${this._targetSetSubtitlePlayingState}`);
1820
+ break;
1821
+ case SetSubtitleLanguageState.PLAYING:
1822
+ if (!this._abortSetSubtitleLanguage) {
1823
+ await this._play(StreamType.SUBTITLE | StreamType.AUDIO);
1824
+ }
1895
1825
  state = SetSubtitleLanguageState.DONE;
1896
1826
  break;
1897
1827
  }
1898
1828
  } catch (error) {
1899
- sdkLogger.error(`Error during set subtitle process: ${error.message}`);
1829
+ sdkLogger.error(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} failed with error ${error.message}.`);
1900
1830
  state = SetSubtitleLanguageState.DONE;
1901
1831
  res = Promise.reject(error);
1902
1832
  }
1903
1833
  }
1904
1834
 
1905
- if (!this._abortSetSubtitleLanguage) {
1906
- sdkLogger.error("TARGET PLAYING STATE", this._targetSetSubtitlePlayingState);
1907
- sdkLogger.error("TEXT TRACK VISIBILITY", this._textTrackVisibility);
1908
- if (this._targetSetSubtitlePlayingState === TargetPlayingState.PLAYING_ABR && this._textTrackVisibility) {
1909
- sdkLogger.error("BEFORE PLAY AFTER SET SUBTITLE 2");
1910
- this._playSubtitle();
1911
- }
1912
- }
1913
1835
  this._isSetSubtitleByApplication = false;
1914
- sdkLogger.info("SetSubtitleLanguage: local video element set subtitle end");
1915
- return res
1836
+ sdkLogger.log(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} ended.`);
1837
+ return res;
1916
1838
  }
1917
1839
 
1918
- async _atomicSetAudioLanguage() {
1919
- sdkLogger.info("SetAudioLanguage: local video element set start while isPLaying=", this._isPlaying);
1920
-
1921
- this._targetSetAudioPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1922
- this._abortSetAudioLanguage = false;
1923
- this._isSetAudioByApplication = true;
1924
-
1925
- let state = SetAudioLanguageState.INIT;
1926
-
1927
- let previousPendingAudioLanguage = this._pendingAudioLanguage;
1928
- let initialAudioLanguage= this._pendingAudioLanguage;
1929
- let res;
1930
-
1931
- while (!this._abortSetAudioLanguage && state !== SetAudioLanguageState.DONE) {
1932
- try {
1933
-
1934
- switch(state) {
1935
- case SetAudioLanguageState.INIT:
1936
- state = this._isPlaying ? SetAudioLanguageState.STOPPED : SetAudioLanguageState.SET;
1937
- break;
1938
- case SetAudioLanguageState.STOPPED:
1939
- await this._stopAudio();
1940
- state = SetAudioLanguageState.SET;
1941
- break;
1942
- case SetAudioLanguageState.SET:
1943
- initialAudioLanguage = this._pendingAudioLanguage;
1944
- previousPendingAudioLanguage = this._selectedAudioTrack;
1945
- res = await this._selectAudioTrackV3(initialAudioLanguage, previousPendingAudioLanguage);
1946
- sdkLogger.error("BEFORE PLAY AFTER SET AUDIO 1");
1947
- state = SetAudioLanguageState.DONE;
1948
- break;
1949
- }
1950
- } catch (error) {
1951
- sdkLogger.error(`Error during set audio process: ${error.message}`);
1952
- state = SetAudioLanguageState.DONE;
1953
- res = Promise.reject(error);
1954
- }
1955
- }
1956
-
1957
- if (!this._abortSetAudioLanguage) {
1958
- sdkLogger.error("TARGET PLAYING STATE", this._targetSetAudioPlayingState);
1959
- if (this._targetSetAudioPlayingState === TargetPlayingState.PLAYING_UI) {
1960
- sdkLogger.error("BEFORE PLAY AFTER SET AUDIO 2");
1961
- this._play();
1962
- }
1963
- }
1964
-
1965
- this._isSetAudioByApplication = false;
1966
- sdkLogger.info("SetAudioLanguage: local video element set audio end");
1967
- return res
1968
- }
1969
1840
  }
1970
1841
  /**
1971
1842
  *
package/src/utils.js CHANGED
@@ -159,8 +159,7 @@ export const SetAudioLanguageState = Object.freeze({
159
159
  INIT: "init",
160
160
  STOPPED: "stopped",
161
161
  SET: "set",
162
- MULTI_SET: "multiSet",
163
- WAITING: "waiting",
162
+ PLAYING: "playing",
164
163
  DONE: "done"
165
164
  });
166
165
 
@@ -168,8 +167,7 @@ export const SetSubtitleLanguageState = Object.freeze({
168
167
  INIT: "init",
169
168
  STOPPED: "stopped",
170
169
  SET: "set",
171
- MULTI_SET: "multiSet",
172
- WAITING: "waiting",
170
+ PLAYING: "playing",
173
171
  DONE: "done"
174
172
  });
175
173