senza-sdk 4.2.51-aaec443.0 → 4.2.51-b73b1af.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-aaec443.0",
3
+ "version": "4.2.51-b73b1af.0",
4
4
  "main": "./src/api.js",
5
5
  "description": "API for Senza application",
6
6
  "license": "MIT",
@@ -1701,28 +1701,190 @@ class RemotePlayer extends EventTarget {
1701
1701
  sdkLogger.info("Seeking: local video element seeking end");
1702
1702
  }
1703
1703
 
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
+ }
1749
+
1750
+ }
1751
+
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
+ }
1798
+
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);
1856
+ }
1857
+ });
1858
+ }
1859
+
1860
+ }
1861
+ sdkLogger.error("remotePlayer play subtitle: window.cefQuery is undefined");
1862
+ return Promise.resolve(undefined);
1863
+ }
1864
+
1704
1865
  async _atomicSetSubtitleLanguage() {
1705
1866
  sdkLogger.info("SetSubtitleLanguage: local video element set start while isPLaying=", this._isPlaying);
1706
1867
 
1707
- this._targetSeekPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1868
+ this._targetSetSubtitlePlayingState = lifecycle._state === lifecycle.UiState.BACKGROUND ? TargetPlayingState.PLAYING_ABR : TargetPlayingState.PAUSED;
1708
1869
  this._abortSetSubtitleLanguage = false;
1709
1870
  this._isSetSubtitleByApplication = true;
1710
1871
 
1711
1872
  let state = SetSubtitleLanguageState.INIT;
1712
1873
 
1713
1874
  let previousPendingSubtitleLanguage = this._pendingSubtitleLanguage;
1714
- let initialSubtitleLanguage= this._pendingSubtitleLanguage;
1875
+ let initialSubtitleLanguage = this._pendingSubtitleLanguage;
1715
1876
  let res;
1716
1877
 
1717
1878
  while (!this._abortSetSubtitleLanguage && state !== SetSubtitleLanguageState.DONE) {
1718
1879
  try {
1719
- // TODO - Implement the logic for setting audio language
1720
1880
  switch(state) {
1721
1881
  case SetSubtitleLanguageState.INIT:
1722
- state = this._isPlaying ? SetSubtitleLanguageState.STOPPED : SetSubtitleLanguageState.SET;
1882
+ state = lifecycle._state === lifecycle.UiState.BACKGROUND ? SetSubtitleLanguageState.STOPPED : SetSubtitleLanguageState.SET;
1723
1883
  break;
1724
1884
  case SetSubtitleLanguageState.STOPPED:
1725
- await lifecycle.moveToForeground();
1885
+ sdkLogger.error("BEFORE STOP BEFORE SET SUBTITLE");
1886
+ await this._stopSubtitle();
1887
+ sdkLogger.error("AFTER STOP BEFORE SET SUBTITLE");
1726
1888
  state = SetSubtitleLanguageState.SET;
1727
1889
  break;
1728
1890
  case SetSubtitleLanguageState.SET:
@@ -1737,27 +1899,26 @@ class RemotePlayer extends EventTarget {
1737
1899
  sdkLogger.error(`Error during set subtitle process: ${error.message}`);
1738
1900
  state = SetSubtitleLanguageState.DONE;
1739
1901
  res = Promise.reject(error);
1740
- } finally {
1741
- if (!this._abortSetSubtitleLanguage) {
1742
- if (this._targetSeekPlayingState === TargetPlayingState.PLAYING_UI) {
1743
- console.log("BEFORE PLAY AFTER SET SUBTITLE 2");
1744
- await this._play();
1745
- } else if (this._targetSeekPlayingState === TargetPlayingState.PLAYING_ABR) {
1746
- console.log("BEFORE MOVE_TO_BACKGROUND AFTER SET SUBTITLE");
1747
- await lifecycle._moveToBackground();
1748
- }
1749
- }
1750
- this._isSetSubtitleByApplication = false;
1751
- sdkLogger.info("SetSubtitleLanguage: local video element set subtitle end");
1752
1902
  }
1753
1903
  }
1904
+
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) {
1909
+ sdkLogger.error("BEFORE PLAY AFTER SET SUBTITLE 2");
1910
+ this._playSubtitle();
1911
+ }
1912
+ }
1913
+ this._isSetSubtitleByApplication = false;
1914
+ sdkLogger.info("SetSubtitleLanguage: local video element set subtitle end");
1754
1915
  return res
1755
1916
  }
1756
1917
 
1757
1918
  async _atomicSetAudioLanguage() {
1758
1919
  sdkLogger.info("SetAudioLanguage: local video element set start while isPLaying=", this._isPlaying);
1759
1920
 
1760
- this._targetSeekPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1921
+ this._targetSetAudioPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1761
1922
  this._abortSetAudioLanguage = false;
1762
1923
  this._isSetAudioByApplication = true;
1763
1924
 
@@ -1769,13 +1930,13 @@ class RemotePlayer extends EventTarget {
1769
1930
 
1770
1931
  while (!this._abortSetAudioLanguage && state !== SetAudioLanguageState.DONE) {
1771
1932
  try {
1772
- // TODO - Implement the logic for setting audio language
1933
+
1773
1934
  switch(state) {
1774
1935
  case SetAudioLanguageState.INIT:
1775
1936
  state = this._isPlaying ? SetAudioLanguageState.STOPPED : SetAudioLanguageState.SET;
1776
1937
  break;
1777
1938
  case SetAudioLanguageState.STOPPED:
1778
- await lifecycle.moveToForeground();
1939
+ await this._stopAudio();
1779
1940
  state = SetAudioLanguageState.SET;
1780
1941
  break;
1781
1942
  case SetAudioLanguageState.SET:
@@ -1790,20 +1951,19 @@ class RemotePlayer extends EventTarget {
1790
1951
  sdkLogger.error(`Error during set audio process: ${error.message}`);
1791
1952
  state = SetAudioLanguageState.DONE;
1792
1953
  res = Promise.reject(error);
1793
- } finally {
1794
- if (!this._abortSetAudioLanguage) {
1795
- if (this._targetSeekPlayingState === TargetPlayingState.PLAYING_UI) {
1796
- sdkLogger.error("BEFORE PLAY AFTER SET AUDIO 2");
1797
- this._play();
1798
- } else if (this._targetSeekPlayingState === TargetPlayingState.PLAYING_ABR) {
1799
- sdkLogger.error("BEFORE MOVE_TO_BACKGROUND AFTER SET AUDIO");
1800
- lifecycle._moveToBackground();
1801
- }
1802
- }
1803
- this._isSetAudioByApplication = false;
1804
- sdkLogger.info("SetAudioLanguage: local video element set audio end");
1805
1954
  }
1806
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");
1807
1967
  return res
1808
1968
  }
1809
1969
  }