senza-sdk 4.2.51-9f586bc.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-9f586bc.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",
@@ -1067,6 +1067,18 @@ class RemotePlayer extends EventTarget {
1067
1067
  }
1068
1068
  }
1069
1069
 
1070
+ if (this._isSetAudioByApplication) {
1071
+ sdkLogger.info("application requesting play during setAudioLanguage");
1072
+ this._targetSetAudioPlayingState = TargetPlayingState.PLAYING_UI;
1073
+ return Promise.resolve(true);
1074
+ }
1075
+
1076
+ if (this._isSetSubtitleByApplication) {
1077
+ sdkLogger.info("application requesting play during setSubtitleLanguage");
1078
+ this._targetSetSubtitlePlayingState = TargetPlayingState.PLAYING_UI;
1079
+ return Promise.resolve(true);
1080
+ }
1081
+
1070
1082
  // If seeking in progress, wait for seek to complete before playing
1071
1083
  if (this._isSeekingByApplication) {
1072
1084
  sdkLogger.info("application requesting play during seek");
@@ -1106,6 +1118,16 @@ class RemotePlayer extends EventTarget {
1106
1118
  this._targetSeekPlayingState = TargetPlayingState.PAUSED;
1107
1119
  return Promise.resolve(true);
1108
1120
  }
1121
+ if (this._isSetAudioByApplication) {
1122
+ sdkLogger.info("application requesting pause during setAudioLanguage");
1123
+ this._targetSetAudioPlayingState = TargetPlayingState.PAUSED;
1124
+ return Promise.resolve(true);
1125
+ }
1126
+ if (this._isSetSubtitleByApplication) {
1127
+ sdkLogger.info("application requesting pause during setSubtitleLanguage");
1128
+ this._targetSetSubtitlePlayingState = TargetPlayingState.PAUSED;
1129
+ return Promise.resolve(true);
1130
+ }
1109
1131
  return this._pause();
1110
1132
  }
1111
1133
 
@@ -1679,33 +1701,197 @@ class RemotePlayer extends EventTarget {
1679
1701
  sdkLogger.info("Seeking: local video element seeking end");
1680
1702
  }
1681
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
+
1682
1865
  async _atomicSetSubtitleLanguage() {
1683
1866
  sdkLogger.info("SetSubtitleLanguage: local video element set start while isPLaying=", this._isPlaying);
1684
1867
 
1868
+ this._targetSetSubtitlePlayingState = lifecycle._state === lifecycle.UiState.BACKGROUND ? TargetPlayingState.PLAYING_ABR : TargetPlayingState.PAUSED;
1685
1869
  this._abortSetSubtitleLanguage = false;
1686
1870
  this._isSetSubtitleByApplication = true;
1687
1871
 
1688
1872
  let state = SetSubtitleLanguageState.INIT;
1689
1873
 
1690
1874
  let previousPendingSubtitleLanguage = this._pendingSubtitleLanguage;
1691
- let initialSubtitleLanguage= this._pendingSubtitleLanguage;
1875
+ let initialSubtitleLanguage = this._pendingSubtitleLanguage;
1692
1876
  let res;
1693
-
1877
+
1694
1878
  while (!this._abortSetSubtitleLanguage && state !== SetSubtitleLanguageState.DONE) {
1695
1879
  try {
1696
- // TODO - Implement the logic for setting audio language
1697
1880
  switch(state) {
1698
1881
  case SetSubtitleLanguageState.INIT:
1699
- state = this._isPlaying ? SetSubtitleLanguageState.STOPPED : SetSubtitleLanguageState.SET;
1882
+ state = lifecycle._state === lifecycle.UiState.BACKGROUND ? SetSubtitleLanguageState.STOPPED : SetSubtitleLanguageState.SET;
1700
1883
  break;
1701
1884
  case SetSubtitleLanguageState.STOPPED:
1702
- await lifecycle.moveToForeground();
1885
+ sdkLogger.error("BEFORE STOP BEFORE SET SUBTITLE");
1886
+ await this._stopSubtitle();
1887
+ sdkLogger.error("AFTER STOP BEFORE SET SUBTITLE");
1703
1888
  state = SetSubtitleLanguageState.SET;
1704
1889
  break;
1705
1890
  case SetSubtitleLanguageState.SET:
1706
1891
  initialSubtitleLanguage = this._pendingSubtitleLanguage;
1707
1892
  previousPendingSubtitleLanguage = this._selectedSubtitleTrack;
1708
1893
  res = await this._selectTextTrackV3(initialSubtitleLanguage, previousPendingSubtitleLanguage);
1894
+ sdkLogger.error("BEFORE PLAY AFTER SET SUBTITLE 1");
1709
1895
  state = SetSubtitleLanguageState.DONE;
1710
1896
  break;
1711
1897
  }
@@ -1713,20 +1899,26 @@ class RemotePlayer extends EventTarget {
1713
1899
  sdkLogger.error(`Error during set subtitle process: ${error.message}`);
1714
1900
  state = SetSubtitleLanguageState.DONE;
1715
1901
  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
1902
  }
1723
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");
1724
1915
  return res
1725
1916
  }
1726
1917
 
1727
1918
  async _atomicSetAudioLanguage() {
1728
1919
  sdkLogger.info("SetAudioLanguage: local video element set start while isPLaying=", this._isPlaying);
1729
1920
 
1921
+ this._targetSetAudioPlayingState = this._isPlaying ? TargetPlayingState.PLAYING_UI : TargetPlayingState.PAUSED;
1730
1922
  this._abortSetAudioLanguage = false;
1731
1923
  this._isSetAudioByApplication = true;
1732
1924
 
@@ -1738,19 +1930,20 @@ class RemotePlayer extends EventTarget {
1738
1930
 
1739
1931
  while (!this._abortSetAudioLanguage && state !== SetAudioLanguageState.DONE) {
1740
1932
  try {
1741
- // TODO - Implement the logic for setting audio language
1933
+
1742
1934
  switch(state) {
1743
1935
  case SetAudioLanguageState.INIT:
1744
1936
  state = this._isPlaying ? SetAudioLanguageState.STOPPED : SetAudioLanguageState.SET;
1745
1937
  break;
1746
1938
  case SetAudioLanguageState.STOPPED:
1747
- await lifecycle.moveToForeground();
1939
+ await this._stopAudio();
1748
1940
  state = SetAudioLanguageState.SET;
1749
1941
  break;
1750
1942
  case SetAudioLanguageState.SET:
1751
1943
  initialAudioLanguage = this._pendingAudioLanguage;
1752
1944
  previousPendingAudioLanguage = this._selectedAudioTrack;
1753
1945
  res = await this._selectAudioTrackV3(initialAudioLanguage, previousPendingAudioLanguage);
1946
+ sdkLogger.error("BEFORE PLAY AFTER SET AUDIO 1");
1754
1947
  state = SetAudioLanguageState.DONE;
1755
1948
  break;
1756
1949
  }
@@ -1758,14 +1951,19 @@ class RemotePlayer extends EventTarget {
1758
1951
  sdkLogger.error(`Error during set audio process: ${error.message}`);
1759
1952
  state = SetAudioLanguageState.DONE;
1760
1953
  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
1954
  }
1768
- }
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");
1769
1967
  return res
1770
1968
  }
1771
1969
  }