senza-sdk 4.2.51-90a45e8.0 → 4.2.51-9f586bc.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/dist/bundle.js +1 -1
- package/package.json +1 -1
- package/src/remotePlayer.js +100 -5
- package/src/utils.js +18 -0
package/package.json
CHANGED
package/src/remotePlayer.js
CHANGED
|
@@ -9,7 +9,9 @@ import {
|
|
|
9
9
|
SeekState,
|
|
10
10
|
TargetPlayingState,
|
|
11
11
|
isSubtitlesTranslationAllowed,
|
|
12
|
-
isSubtitlesTranslationPattern
|
|
12
|
+
isSubtitlesTranslationPattern,
|
|
13
|
+
SetAudioLanguageState,
|
|
14
|
+
SetSubtitleLanguageState
|
|
13
15
|
} from "./utils";
|
|
14
16
|
import { lifecycle } from "./lifecycle";
|
|
15
17
|
import { writeLicenseResponse } from "./api";
|
|
@@ -890,6 +892,8 @@ class RemotePlayer extends EventTarget {
|
|
|
890
892
|
if (this._loadMode === this.LoadMode.LOADING || this._loadMode === this.LoadMode.UNLOADING) {
|
|
891
893
|
throw new RemotePlayerError(6501, "Cannot call load() while previous load/unload is still in progress");
|
|
892
894
|
}
|
|
895
|
+
this._abortSetAudioLanguage = true;
|
|
896
|
+
this._abortSetSubtitleLanguage = true;
|
|
893
897
|
this._abortSeeking = true;
|
|
894
898
|
if (reset) {
|
|
895
899
|
this._reset();
|
|
@@ -1209,7 +1213,8 @@ class RemotePlayer extends EventTarget {
|
|
|
1209
1213
|
case 2:
|
|
1210
1214
|
return this._selectAudioTrackV2(audioTrackId, prevSelectedAudioTrack);
|
|
1211
1215
|
default:
|
|
1212
|
-
|
|
1216
|
+
this._pendingAudioLanguage = audioTrackId;
|
|
1217
|
+
return this._atomicSetAudioLanguage();
|
|
1213
1218
|
}
|
|
1214
1219
|
}
|
|
1215
1220
|
|
|
@@ -1271,7 +1276,6 @@ class RemotePlayer extends EventTarget {
|
|
|
1271
1276
|
action: "setAudioLanguage",
|
|
1272
1277
|
fcid: FCID,
|
|
1273
1278
|
language: audioTrackId,
|
|
1274
|
-
playbackPosition: this.currentTime
|
|
1275
1279
|
};
|
|
1276
1280
|
const request = { target: "TC", waitForResponse: true, message: JSON.stringify(message) };
|
|
1277
1281
|
return new Promise((resolve, reject) => {
|
|
@@ -1303,6 +1307,7 @@ class RemotePlayer extends EventTarget {
|
|
|
1303
1307
|
}, timeout, queryId);
|
|
1304
1308
|
});
|
|
1305
1309
|
}
|
|
1310
|
+
|
|
1306
1311
|
sdkLogger.error("remotePlayer _selectAudioTrackV3: window.cefQuery is undefined");
|
|
1307
1312
|
return Promise.resolve(undefined);
|
|
1308
1313
|
}
|
|
@@ -1346,7 +1351,8 @@ class RemotePlayer extends EventTarget {
|
|
|
1346
1351
|
case 2:
|
|
1347
1352
|
return this._selectTextTrackV2(textTrackId, prevSelectedTextTrack);
|
|
1348
1353
|
default:
|
|
1349
|
-
|
|
1354
|
+
this._pendingSubtitleLanguage = textTrackId;
|
|
1355
|
+
return this._atomicSetSubtitleLanguage();
|
|
1350
1356
|
}
|
|
1351
1357
|
}
|
|
1352
1358
|
|
|
@@ -1408,7 +1414,6 @@ class RemotePlayer extends EventTarget {
|
|
|
1408
1414
|
action: "setSubtitleLanguage",
|
|
1409
1415
|
fcid: FCID,
|
|
1410
1416
|
language: textTrackId,
|
|
1411
|
-
playbackPosition: this.currentTime
|
|
1412
1417
|
};
|
|
1413
1418
|
const request = { target: "TC", waitForResponse: true, message: JSON.stringify(message) };
|
|
1414
1419
|
return new Promise((resolve, reject) => {
|
|
@@ -1673,6 +1678,96 @@ class RemotePlayer extends EventTarget {
|
|
|
1673
1678
|
this._isSeekingByApplication = false;
|
|
1674
1679
|
sdkLogger.info("Seeking: local video element seeking end");
|
|
1675
1680
|
}
|
|
1681
|
+
|
|
1682
|
+
async _atomicSetSubtitleLanguage() {
|
|
1683
|
+
sdkLogger.info("SetSubtitleLanguage: local video element set start while isPLaying=", this._isPlaying);
|
|
1684
|
+
|
|
1685
|
+
this._abortSetSubtitleLanguage = false;
|
|
1686
|
+
this._isSetSubtitleByApplication = true;
|
|
1687
|
+
|
|
1688
|
+
let state = SetSubtitleLanguageState.INIT;
|
|
1689
|
+
|
|
1690
|
+
let previousPendingSubtitleLanguage = this._pendingSubtitleLanguage;
|
|
1691
|
+
let initialSubtitleLanguage= this._pendingSubtitleLanguage;
|
|
1692
|
+
let res;
|
|
1693
|
+
|
|
1694
|
+
while (!this._abortSetSubtitleLanguage && state !== SetSubtitleLanguageState.DONE) {
|
|
1695
|
+
try {
|
|
1696
|
+
// TODO - Implement the logic for setting audio language
|
|
1697
|
+
switch(state) {
|
|
1698
|
+
case SetSubtitleLanguageState.INIT:
|
|
1699
|
+
state = this._isPlaying ? SetSubtitleLanguageState.STOPPED : SetSubtitleLanguageState.SET;
|
|
1700
|
+
break;
|
|
1701
|
+
case SetSubtitleLanguageState.STOPPED:
|
|
1702
|
+
await lifecycle.moveToForeground();
|
|
1703
|
+
state = SetSubtitleLanguageState.SET;
|
|
1704
|
+
break;
|
|
1705
|
+
case SetSubtitleLanguageState.SET:
|
|
1706
|
+
initialSubtitleLanguage = this._pendingSubtitleLanguage;
|
|
1707
|
+
previousPendingSubtitleLanguage = this._selectedSubtitleTrack;
|
|
1708
|
+
res = await this._selectTextTrackV3(initialSubtitleLanguage, previousPendingSubtitleLanguage);
|
|
1709
|
+
state = SetSubtitleLanguageState.DONE;
|
|
1710
|
+
break;
|
|
1711
|
+
}
|
|
1712
|
+
} catch (error) {
|
|
1713
|
+
sdkLogger.error(`Error during set subtitle process: ${error.message}`);
|
|
1714
|
+
state = SetSubtitleLanguageState.DONE;
|
|
1715
|
+
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
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
return res
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
async _atomicSetAudioLanguage() {
|
|
1728
|
+
sdkLogger.info("SetAudioLanguage: local video element set start while isPLaying=", this._isPlaying);
|
|
1729
|
+
|
|
1730
|
+
this._abortSetAudioLanguage = false;
|
|
1731
|
+
this._isSetAudioByApplication = true;
|
|
1732
|
+
|
|
1733
|
+
let state = SetAudioLanguageState.INIT;
|
|
1734
|
+
|
|
1735
|
+
let previousPendingAudioLanguage = this._pendingAudioLanguage;
|
|
1736
|
+
let initialAudioLanguage= this._pendingAudioLanguage;
|
|
1737
|
+
let res;
|
|
1738
|
+
|
|
1739
|
+
while (!this._abortSetAudioLanguage && state !== SetAudioLanguageState.DONE) {
|
|
1740
|
+
try {
|
|
1741
|
+
// TODO - Implement the logic for setting audio language
|
|
1742
|
+
switch(state) {
|
|
1743
|
+
case SetAudioLanguageState.INIT:
|
|
1744
|
+
state = this._isPlaying ? SetAudioLanguageState.STOPPED : SetAudioLanguageState.SET;
|
|
1745
|
+
break;
|
|
1746
|
+
case SetAudioLanguageState.STOPPED:
|
|
1747
|
+
await lifecycle.moveToForeground();
|
|
1748
|
+
state = SetAudioLanguageState.SET;
|
|
1749
|
+
break;
|
|
1750
|
+
case SetAudioLanguageState.SET:
|
|
1751
|
+
initialAudioLanguage = this._pendingAudioLanguage;
|
|
1752
|
+
previousPendingAudioLanguage = this._selectedAudioTrack;
|
|
1753
|
+
res = await this._selectAudioTrackV3(initialAudioLanguage, previousPendingAudioLanguage);
|
|
1754
|
+
state = SetAudioLanguageState.DONE;
|
|
1755
|
+
break;
|
|
1756
|
+
}
|
|
1757
|
+
} catch (error) {
|
|
1758
|
+
sdkLogger.error(`Error during set audio process: ${error.message}`);
|
|
1759
|
+
state = SetAudioLanguageState.DONE;
|
|
1760
|
+
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
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
return res
|
|
1770
|
+
}
|
|
1676
1771
|
}
|
|
1677
1772
|
/**
|
|
1678
1773
|
*
|
package/src/utils.js
CHANGED
|
@@ -155,6 +155,24 @@ 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
|
+
|
|
167
|
+
export const SetSubtitleLanguageState = Object.freeze({
|
|
168
|
+
INIT: "init",
|
|
169
|
+
STOPPED: "stopped",
|
|
170
|
+
SET: "set",
|
|
171
|
+
MULTI_SET: "multiSet",
|
|
172
|
+
WAITING: "waiting",
|
|
173
|
+
DONE: "done"
|
|
174
|
+
});
|
|
175
|
+
|
|
158
176
|
export const iso6393to1 = {
|
|
159
177
|
"aar": "aa",
|
|
160
178
|
"abk": "ab",
|