senza-sdk 4.2.55-3686561.0 → 4.2.55-5e1095e.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.55-3686561.0",
3
+ "version": "4.2.55-5e1095e.0",
4
4
  "main": "./src/api.js",
5
5
  "description": "API for Senza application",
6
6
  "license": "MIT",
package/src/lifecycle.js CHANGED
@@ -710,15 +710,24 @@ class Lifecycle extends EventTarget {
710
710
  * Failure to process the moveToBackground command will result in the promise being rejected.
711
711
  */
712
712
  moveToBackground() {
713
- if (remotePlayer._isSeekingByApplication) {
714
- if (window.cefQuery) {
715
- if (this._inTransition || this._state === this.UiState.BACKGROUND || this._state === this.UiState.IN_TRANSITION_TO_BACKGROUND) {
716
- sdkLogger.warn(`lifecycle moveToBackground: No need to transition to background, state: ${this._state} transition: ${this._inTransition}`);
717
- return Promise.resolve(false);
718
- }
713
+ if (window.cefQuery) {
714
+ if (this._inTransition || this._state === this.UiState.BACKGROUND || this._state === this.UiState.IN_TRANSITION_TO_BACKGROUND) {
715
+ sdkLogger.warn(`lifecycle moveToBackground: No need to transition to background, state: ${this._state} transition: ${this._inTransition}`);
716
+ return Promise.resolve(false);
717
+ }
718
+
719
+ if (remotePlayer._isSeekingByApplication) {
719
720
  remotePlayer._targetSeekPlayingState = TargetPlayingState.PLAYING_ABR;
720
721
  return Promise.resolve(true);
721
722
  }
723
+ if (remotePlayer._isSetSubtitlesInProgress) {
724
+ remotePlayer._targetSetSubtitlePlayingState = TargetPlayingState.PLAYING_ABR;
725
+ return Promise.resolve(true);
726
+ }
727
+ if (remotePlayer._isSetAudioInProgress) {
728
+ remotePlayer._targetSetAudioPlayingState = TargetPlayingState.PLAYING_ABR;
729
+ return Promise.resolve(true);
730
+ }
722
731
  }
723
732
  return this._moveToBackground();
724
733
  }
@@ -715,10 +715,8 @@ class RemotePlayer extends EventTarget {
715
715
  };
716
716
  let waitForResponse = false;
717
717
  if (this._remotePlayerApiVersion >= 2) {
718
- if (this._isAudioSyncEnabled()) {
719
- message.switchMode = SwitchMode.SEAMLESS;
720
- message.streamType = streamType;
721
- }
718
+ message.switchMode = this._isAudioSyncEnabled() ? SwitchMode.SEAMLESS : SwitchMode.NON_SEAMLESS;
719
+ message.streamType = streamType;
722
720
  waitForResponse = true;
723
721
  }
724
722
  const request = { target: "TC", waitForResponse: waitForResponse, message: JSON.stringify(message) };
@@ -1626,6 +1624,11 @@ class RemotePlayer extends EventTarget {
1626
1624
  * @private
1627
1625
  */
1628
1626
  async _startSeeking(playbackPosition) {
1627
+ if (this._isSetAudioInProgress || this._isSetSubtitlesInProgress) {
1628
+ sdkLogger.info("Seeking not supported while setAudioLanguage or setSubtitleLanguage are in progress.");
1629
+ return;
1630
+ }
1631
+
1629
1632
  if (!this._isSeekingByPlatform) {
1630
1633
  this._pendingSeekPosition = playbackPosition;
1631
1634
 
@@ -1756,6 +1759,10 @@ class RemotePlayer extends EventTarget {
1756
1759
  sdkLogger.warn(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} already in progress, ignoring.`);
1757
1760
  return Promise.resolve();
1758
1761
  }
1762
+ if (this._isSeekingByApplication) {
1763
+ sdkLogger.warn(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} ignored. seeking is already in progress.`);
1764
+ return Promise.resolve();
1765
+ }
1759
1766
 
1760
1767
  this._targetSetAudioPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1761
1768
  sdkLogger.log(`remotePlayer _atomicSetAudioLanguage: prevAudioTrack=${prevSelectedAudioTrack} audioTrackId=${audioTrackId} isPlaying=${this._isPlaying} targetState=${this._targetSetAudioPlayingState}`);
@@ -1763,48 +1770,54 @@ class RemotePlayer extends EventTarget {
1763
1770
  this._abortSetAudioLanguage = false;
1764
1771
  this._isSetAudioInProgress = true;
1765
1772
 
1766
- let res;
1767
- let isStopped = false; // flag to call play if selectAudioV3 fails
1768
-
1769
1773
  try {
1770
1774
  await this._stop(StreamType.AUDIO);
1771
1775
  if (this._abortSetAudioLanguage) {
1772
1776
  this._isSetAudioInProgress = false;
1773
1777
  sdkLogger.warn(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} aborted.`);
1774
- return res;
1778
+ return Promise.resolve();
1775
1779
  }
1776
- isStopped = true;
1777
1780
  } catch (error) {
1778
1781
  this._isSetAudioInProgress = false;
1779
1782
  sdkLogger.warn(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} failed on stop. aborting.`);
1780
1783
  return Promise.reject(error);
1781
1784
  }
1782
1785
 
1786
+ let setLanguageError;
1783
1787
  try {
1784
- res = await this._selectAudioTrackV3(audioTrackId);
1785
- if (this._abortSetAudioLanguage) {
1786
- this._isSetAudioInProgress = false;
1787
- sdkLogger.warn(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} aborted.`);
1788
- return res;
1789
- }
1788
+ await this._selectAudioTrackV3(audioTrackId);
1790
1789
  } catch (error) {
1791
1790
  sdkLogger.error(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} failed with error ${error.message}.`);
1792
- res = Promise.reject(error);
1791
+ if (!this._abortSetAudioLanguage) {
1792
+ setLanguageError = error;
1793
+ }
1793
1794
  }
1794
1795
 
1795
- if (this._targetSetAudioPlayingState !== TargetPlayingState.PAUSED && isStopped) {
1796
- try {
1796
+ // check if load/unload were called
1797
+ if (this._abortSetAudioLanguage) {
1798
+ this._isSetAudioInProgress = false;
1799
+ sdkLogger.warn(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} aborted.`);
1800
+ return Promise.resolve();
1801
+ }
1802
+
1803
+ try {
1804
+ if (this._targetSetAudioPlayingState === TargetPlayingState.PLAYING_UI) {
1805
+ if (!this._isAudioSyncEnabled()) {
1806
+ this._isSetAudioInProgress = false;
1807
+ return Promise.resolve(true);
1808
+ }
1809
+ // resume audio play only if _isAudioSyncEnabled
1797
1810
  await this._play(StreamType.AUDIO);
1798
- } catch (error) {
1799
- this._isSetAudioInProgress = false;
1800
- sdkLogger.error(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} failed to play with error ${error.message}.`);
1801
- return Promise.reject(error);
1811
+ } else if (this._targetSetAudioPlayingState === TargetPlayingState.PLAYING_ABR) {
1812
+ await lifecycle._moveToBackground();
1802
1813
  }
1814
+ } catch (error) {
1815
+ sdkLogger.error(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} play failed with error ${error.message}.`);
1803
1816
  }
1804
1817
 
1805
1818
  this._isSetAudioInProgress = false;
1806
1819
  sdkLogger.log(`remotePlayer _atomicSetAudioLanguage: audioTrackId=${audioTrackId} ended.`);
1807
- return res;
1820
+ return setLanguageError ? Promise.reject(setLanguageError) : Promise.resolve();
1808
1821
  }
1809
1822
 
1810
1823
  async _atomicSetSubtitleLanguage(textTrackId, prevSelectedTextTrack) {
@@ -1812,6 +1825,10 @@ class RemotePlayer extends EventTarget {
1812
1825
  sdkLogger.warn(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} already in progress., ignoring.`);
1813
1826
  return Promise.resolve();
1814
1827
  }
1828
+ if (this._isSeekingByApplication) {
1829
+ sdkLogger.warn(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} ignored. seeking is already in progress.`);
1830
+ return Promise.resolve();
1831
+ }
1815
1832
 
1816
1833
  this._targetSetSubtitlePlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1817
1834
  sdkLogger.log(`remotePlayer _atomicSetSubtitleLanguage: prevTextTrack=${prevSelectedTextTrack} textTrackId=${textTrackId} isPlaying=${this._isPlaying} targetState=${this._targetSetSubtitlePlayingState}`);
@@ -1819,47 +1836,54 @@ class RemotePlayer extends EventTarget {
1819
1836
  this._abortSetSubtitleLanguage = false;
1820
1837
  this._isSetSubtitlesInProgress = true;
1821
1838
 
1822
- let res;
1823
- let isStopped = false;
1824
1839
  try {
1825
1840
  await this._stop(StreamType.SUBTITLE);
1826
1841
  if (this._abortSetSubtitleLanguage) {
1827
1842
  this._isSetSubtitlesInProgress = false;
1828
1843
  sdkLogger.warn(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} aborted.`);
1829
- return res;
1844
+ return Promise.resolve();
1830
1845
  }
1831
- isStopped = true;
1832
1846
  } catch (error) {
1833
1847
  this._isSetSubtitlesInProgress = false;
1834
1848
  sdkLogger.warn(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} failed on stop. aborting.`);
1835
1849
  return Promise.reject(error);
1836
1850
  }
1837
1851
 
1852
+ let setLanguageError;
1838
1853
  try {
1839
- res = await this._selectTextTrackV3(textTrackId);
1840
- if (this._abortSetSubtitleLanguage) {
1841
- this._isSetSubtitlesInProgress = false;
1842
- sdkLogger.warn(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} aborted.`);
1843
- return res;
1844
- }
1854
+ await this._selectTextTrackV3(textTrackId);
1845
1855
  } catch (error) {
1846
1856
  sdkLogger.error(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} failed with error ${error.message}.`);
1847
- res = Promise.reject(error);
1857
+ if (!this._abortSetSubtitleLanguage) {
1858
+ setLanguageError = error;
1859
+ }
1848
1860
  }
1849
1861
 
1850
- if (this._targetSetSubtitlePlayingState !== TargetPlayingState.PAUSED && isStopped) {
1851
- try {
1852
- await this._play(StreamType.SUBTITLE | StreamType.AUDIO);
1853
- } catch (error) {
1854
- this._isSetSubtitlesInProgress = false;
1855
- sdkLogger.error(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} failed to play with error ${error.message}.`);
1856
- return Promise.reject(error);
1862
+ // check if load/unload were called
1863
+ if (this._abortSetSubtitleLanguage) {
1864
+ this._isSetSubtitlesInProgress = false;
1865
+ sdkLogger.warn(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} aborted.`);
1866
+ return Promise.resolve();
1867
+ }
1868
+
1869
+ try {
1870
+ if (this._targetSetSubtitlePlayingState === TargetPlayingState.PLAYING_UI) {
1871
+ if (!this._isAudioSyncEnabled()) {
1872
+ this._isSetSubtitlesInProgress = false;
1873
+ return Promise.resolve(true);
1874
+ }
1875
+ // resume audio play only if _isAudioSyncEnabled
1876
+ await this._play(StreamType.AUDIO);
1877
+ } else if (this._targetSetSubtitlePlayingState === TargetPlayingState.PLAYING_ABR) {
1878
+ await lifecycle._moveToBackground();
1857
1879
  }
1880
+ } catch (error) {
1881
+ sdkLogger.error(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} play failed with error ${error.message}.`);
1858
1882
  }
1859
1883
 
1860
1884
  this._isSetSubtitlesInProgress = false;
1861
1885
  sdkLogger.log(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} ended.`);
1862
- return res;
1886
+ return setLanguageError ? Promise.reject(setLanguageError) : Promise.resolve();
1863
1887
  }
1864
1888
 
1865
1889
  }