eyevinn-channel-engine 4.3.12 → 5.0.0-rc.2
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/engine/playhead_state.js +1 -1
- package/dist/engine/server.d.ts +1 -1
- package/dist/engine/server.js +128 -89
- package/dist/engine/session.d.ts +8 -2
- package/dist/engine/session.js +311 -98
- package/dist/engine/session_live.d.ts +72 -14
- package/dist/engine/session_live.js +1510 -420
- package/dist/engine/session_live_state.js +7 -4
- package/dist/engine/stream_switcher.d.ts +11 -1
- package/dist/engine/stream_switcher.js +455 -158
- package/dist/engine/util.d.ts +2 -0
- package/dist/engine/util.js +10 -0
- package/dist/examples/demux.js +26 -7
- package/dist/examples/livemix-demux.d.ts +1 -0
- package/dist/examples/livemix-demux.js +199 -0
- package/dist/examples/livemix.js +1 -1
- package/dist/package.json +4 -3
- package/engine/playhead_state.js +1 -1
- package/engine/server.ts +77 -55
- package/engine/session.js +221 -52
- package/engine/session_live.js +1569 -535
- package/engine/session_live_state.js +7 -4
- package/engine/stream_switcher.js +367 -89
- package/engine/util.js +10 -0
- package/examples/demux.ts +26 -7
- package/examples/livemix-demux.ts +215 -0
- package/examples/livemix.ts +2 -2
- package/examples/multicodec.ts +1 -0
- package/package.json +4 -3
- package/spec/engine/init_switching_spec.js +1 -1
- package/spec/engine/playhead_live_spec.js +1 -1
- package/spec/engine/stream_switcher_spec.js +265 -184
|
@@ -148,7 +148,7 @@ var PlayheadStateStore = /** @class */ (function (_super) {
|
|
|
148
148
|
function PlayheadStateStore(opts) {
|
|
149
149
|
return _super.call(this, "playhead", opts, {
|
|
150
150
|
state: PlayheadState.IDLE,
|
|
151
|
-
tickInterval: 3,
|
|
151
|
+
tickInterval: opts ? (opts.averageSegmentDuration / 1000) : 3,
|
|
152
152
|
mediaSeq: 0,
|
|
153
153
|
vodMediaSeqVideo: 0,
|
|
154
154
|
vodMediaSeqAudio: 0,
|
package/dist/engine/server.d.ts
CHANGED
|
@@ -171,11 +171,11 @@ export declare class ChannelEngine {
|
|
|
171
171
|
getSubtitleManifests(channelId: any): Promise<{}>;
|
|
172
172
|
_handleHeartbeat(req: any, res: any, next: any): void;
|
|
173
173
|
_handleMasterManifest(req: any, res: any, next: any): Promise<void>;
|
|
174
|
+
_handleMediaManifest(req: any, res: any, next: any): Promise<void>;
|
|
174
175
|
_handleAudioManifest(req: any, res: any, next: any): Promise<void>;
|
|
175
176
|
_handleSubtitleManifest(req: any, res: any, next: any): Promise<void>;
|
|
176
177
|
_handleDummySubtitleEndpoint(req: any, res: any, next: any): Promise<void>;
|
|
177
178
|
_handleSubtitleSliceEndpoint(req: any, res: any, next: any): Promise<void>;
|
|
178
|
-
_handleMediaManifest(req: any, res: any, next: any): Promise<void>;
|
|
179
179
|
_handleEventStream(req: any, res: any, next: any): void;
|
|
180
180
|
_handleStatus(req: any, res: any, next: any): Promise<void>;
|
|
181
181
|
_handleAggregatedSessionHealth(req: any, res: any, next: any): Promise<void>;
|
package/dist/engine/server.js
CHANGED
|
@@ -139,6 +139,7 @@ var ChannelEngine = /** @class */ (function () {
|
|
|
139
139
|
volatileKeyTTL: options.volatileKeyTTL,
|
|
140
140
|
}),
|
|
141
141
|
playheadStateStore: new PlayheadStateStore({
|
|
142
|
+
averageSegmentDuration: options.averageSegmentDuration,
|
|
142
143
|
redisUrl: options.redisUrl,
|
|
143
144
|
memcachedUrl: options.memcachedUrl,
|
|
144
145
|
cacheTTL: options.sharedStoreCacheTTL,
|
|
@@ -408,7 +409,7 @@ var ChannelEngine = /** @class */ (function () {
|
|
|
408
409
|
return [3 /*break*/, 4];
|
|
409
410
|
case 3:
|
|
410
411
|
err_2 = _a.sent();
|
|
411
|
-
debug('Problem
|
|
412
|
+
debug('Problem occurred when updating streamSwitchers');
|
|
412
413
|
throw new Error(err_2);
|
|
413
414
|
case 4: return [2 /*return*/];
|
|
414
415
|
}
|
|
@@ -463,12 +464,14 @@ var ChannelEngine = /** @class */ (function () {
|
|
|
463
464
|
useDemuxedAudio: options.useDemuxedAudio,
|
|
464
465
|
dummySubtitleEndpoint: this.dummySubtitleEndpoint,
|
|
465
466
|
subtitleSliceEndpoint: this.subtitleSliceEndpoint,
|
|
466
|
-
useVTTSubtitles:
|
|
467
|
+
useVTTSubtitles: false,
|
|
467
468
|
cloudWatchMetrics: this.logCloudWatchMetrics,
|
|
468
469
|
profile: channel.profile,
|
|
470
|
+
audioTracks: channel.audioTracks
|
|
469
471
|
}, this.sessionLiveStore);
|
|
470
472
|
sessionSwitchers[channel.id] = new StreamSwitcher({
|
|
471
473
|
sessionId: channel.id,
|
|
474
|
+
useDemuxedAudio: options.useDemuxedAudio,
|
|
472
475
|
streamSwitchManager: this.streamSwitchManager ? this.streamSwitchManager : null
|
|
473
476
|
});
|
|
474
477
|
return [4 /*yield*/, sessions[channel.id].initAsync()];
|
|
@@ -929,21 +932,55 @@ var ChannelEngine = /** @class */ (function () {
|
|
|
929
932
|
});
|
|
930
933
|
});
|
|
931
934
|
};
|
|
932
|
-
ChannelEngine.prototype.
|
|
935
|
+
ChannelEngine.prototype._handleMediaManifest = function (req, res, next) {
|
|
933
936
|
return __awaiter(this, void 0, void 0, function () {
|
|
934
|
-
var session, body, err_5, err;
|
|
937
|
+
var session, sessionLive, ts1, body, err_5, err;
|
|
935
938
|
return __generator(this, function (_a) {
|
|
936
939
|
switch (_a.label) {
|
|
937
940
|
case 0:
|
|
938
|
-
debug("req.url=".concat(req.url));
|
|
939
|
-
|
|
940
|
-
|
|
941
|
+
debug("x-playback-session-id=".concat(req.headers["x-playback-session-id"], " req.url=").concat(req.url));
|
|
942
|
+
debug(req.params);
|
|
943
|
+
session = sessions[req.params[1]];
|
|
944
|
+
sessionLive = sessionsLive[req.params[1]];
|
|
945
|
+
if (!(session && sessionLive)) return [3 /*break*/, 13];
|
|
941
946
|
_a.label = 1;
|
|
942
947
|
case 1:
|
|
943
|
-
_a.trys.push([1,
|
|
944
|
-
|
|
948
|
+
_a.trys.push([1, 11, , 12]);
|
|
949
|
+
ts1 = Date.now();
|
|
950
|
+
body = null;
|
|
951
|
+
if (!!this.streamSwitchManager) return [3 /*break*/, 3];
|
|
952
|
+
debug("[".concat(req.params[1], "]: Responding with VOD2Live manifest"));
|
|
953
|
+
return [4 /*yield*/, session.getCurrentMediaManifestAsync(req.params[0], req.headers["x-playback-session-id"])];
|
|
945
954
|
case 2:
|
|
946
955
|
body = _a.sent();
|
|
956
|
+
return [3 /*break*/, 10];
|
|
957
|
+
case 3:
|
|
958
|
+
if (!(switcherStatus[req.params[1]] === null || switcherStatus[req.params[1]] === undefined)) return [3 /*break*/, 5];
|
|
959
|
+
debug("[".concat(req.params[1], "]: (").concat(switcherStatus[req.params[1]], ") Waiting for streamSwitcher to respond"));
|
|
960
|
+
return [4 /*yield*/, timer(500)];
|
|
961
|
+
case 4:
|
|
962
|
+
_a.sent();
|
|
963
|
+
return [3 /*break*/, 3];
|
|
964
|
+
case 5:
|
|
965
|
+
debug("switcherStatus[".concat(req.params[1], "]=[").concat(switcherStatus[req.params[1]], "]"));
|
|
966
|
+
if (!switcherStatus[req.params[1]]) return [3 /*break*/, 7];
|
|
967
|
+
debug("[".concat(req.params[1], "]: Responding with Live-stream manifest"));
|
|
968
|
+
return [4 /*yield*/, sessionLive.getCurrentMediaManifestAsync(req.params[0])];
|
|
969
|
+
case 6:
|
|
970
|
+
body = _a.sent();
|
|
971
|
+
return [3 /*break*/, 9];
|
|
972
|
+
case 7:
|
|
973
|
+
debug("[".concat(req.params[1], "]: Responding with VOD2Live manifest"));
|
|
974
|
+
return [4 /*yield*/, session.getCurrentMediaManifestAsync(req.params[0], req.headers["x-playback-session-id"])];
|
|
975
|
+
case 8:
|
|
976
|
+
body = _a.sent();
|
|
977
|
+
_a.label = 9;
|
|
978
|
+
case 9:
|
|
979
|
+
debug("[".concat(req.params[1], "]: Media Manifest Request Took (").concat(Date.now() - ts1, ")ms"));
|
|
980
|
+
_a.label = 10;
|
|
981
|
+
case 10:
|
|
982
|
+
//verbose(`[${session.sessionId}] body=`);
|
|
983
|
+
//verbose(body);
|
|
947
984
|
res.sendRaw(200, Buffer.from(body, 'utf8'), {
|
|
948
985
|
"Content-Type": "application/vnd.apple.mpegurl",
|
|
949
986
|
"Access-Control-Allow-Origin": "*",
|
|
@@ -951,24 +988,93 @@ var ChannelEngine = /** @class */ (function () {
|
|
|
951
988
|
"X-Instance-Id": this.instanceId + "<".concat(version, ">"),
|
|
952
989
|
});
|
|
953
990
|
next();
|
|
954
|
-
return [3 /*break*/,
|
|
955
|
-
case
|
|
991
|
+
return [3 /*break*/, 12];
|
|
992
|
+
case 11:
|
|
956
993
|
err_5 = _a.sent();
|
|
957
994
|
next(this._gracefulErrorHandler(err_5));
|
|
958
|
-
return [3 /*break*/,
|
|
959
|
-
case
|
|
995
|
+
return [3 /*break*/, 12];
|
|
996
|
+
case 12: return [3 /*break*/, 14];
|
|
997
|
+
case 13:
|
|
998
|
+
err = new errs.NotFoundError('Invalid session(s)');
|
|
999
|
+
next(err);
|
|
1000
|
+
_a.label = 14;
|
|
1001
|
+
case 14: return [2 /*return*/];
|
|
1002
|
+
}
|
|
1003
|
+
});
|
|
1004
|
+
});
|
|
1005
|
+
};
|
|
1006
|
+
ChannelEngine.prototype._handleAudioManifest = function (req, res, next) {
|
|
1007
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
1008
|
+
var session, sessionLive, body, ts1, err_6, err;
|
|
1009
|
+
return __generator(this, function (_a) {
|
|
1010
|
+
switch (_a.label) {
|
|
1011
|
+
case 0:
|
|
1012
|
+
debug("x-playback-session-id=".concat(req.headers["x-playback-session-id"], " req.url=").concat(req.url));
|
|
1013
|
+
debug(req.params);
|
|
1014
|
+
session = sessions[req.params[2]];
|
|
1015
|
+
sessionLive = sessionsLive[req.params[2]];
|
|
1016
|
+
if (!(session && sessionLive)) return [3 /*break*/, 13];
|
|
1017
|
+
_a.label = 1;
|
|
1018
|
+
case 1:
|
|
1019
|
+
_a.trys.push([1, 11, , 12]);
|
|
1020
|
+
body = null;
|
|
1021
|
+
ts1 = Date.now();
|
|
1022
|
+
if (!!this.streamSwitchManager) return [3 /*break*/, 3];
|
|
1023
|
+
debug("[".concat(req.params[2], "]: Responding with VOD2Live manifest"));
|
|
1024
|
+
return [4 /*yield*/, session.getCurrentAudioManifestAsync(req.params[0], req.params[1], req.headers["x-playback-session-id"])];
|
|
1025
|
+
case 2:
|
|
1026
|
+
body = _a.sent();
|
|
1027
|
+
return [3 /*break*/, 10];
|
|
1028
|
+
case 3:
|
|
1029
|
+
if (!(switcherStatus[req.params[2]] === null || switcherStatus[req.params[2]] === undefined)) return [3 /*break*/, 5];
|
|
1030
|
+
debug("[".concat(req.params[2], "]: (").concat(switcherStatus[req.params[1]], ") Waiting for streamSwitcher to respond"));
|
|
1031
|
+
return [4 /*yield*/, timer(500)];
|
|
1032
|
+
case 4:
|
|
1033
|
+
_a.sent();
|
|
1034
|
+
return [3 /*break*/, 3];
|
|
960
1035
|
case 5:
|
|
961
|
-
|
|
1036
|
+
debug("switcherStatus[".concat(req.params[1], "]=[").concat(switcherStatus[req.params[2]], "]"));
|
|
1037
|
+
if (!switcherStatus[req.params[2]]) return [3 /*break*/, 7];
|
|
1038
|
+
debug("[".concat(req.params[2], "]: Responding with Live-stream manifest"));
|
|
1039
|
+
return [4 /*yield*/, sessionLive.getCurrentAudioManifestAsync(req.params[0], req.params[1])];
|
|
1040
|
+
case 6:
|
|
1041
|
+
body = _a.sent();
|
|
1042
|
+
return [3 /*break*/, 9];
|
|
1043
|
+
case 7:
|
|
1044
|
+
debug("[".concat(req.params[2], "]: Responding with VOD2Live manifest"));
|
|
1045
|
+
return [4 /*yield*/, session.getCurrentAudioManifestAsync(req.params[0], req.params[1], req.headers["x-playback-session-id"])];
|
|
1046
|
+
case 8:
|
|
1047
|
+
body = _a.sent();
|
|
1048
|
+
_a.label = 9;
|
|
1049
|
+
case 9:
|
|
1050
|
+
debug("[".concat(req.params[2], "]: Audio Manifest Request Took (").concat(Date.now() - ts1, ")ms"));
|
|
1051
|
+
_a.label = 10;
|
|
1052
|
+
case 10:
|
|
1053
|
+
res.sendRaw(200, Buffer.from(body, 'utf8'), {
|
|
1054
|
+
"Content-Type": "application/vnd.apple.mpegurl",
|
|
1055
|
+
"Access-Control-Allow-Origin": "*",
|
|
1056
|
+
"Cache-Control": "max-age=".concat(this.streamerOpts.cacheTTL || '4'),
|
|
1057
|
+
"X-Instance-Id": this.instanceId + "<".concat(version, ">"),
|
|
1058
|
+
});
|
|
1059
|
+
next();
|
|
1060
|
+
return [3 /*break*/, 12];
|
|
1061
|
+
case 11:
|
|
1062
|
+
err_6 = _a.sent();
|
|
1063
|
+
next(this._gracefulErrorHandler(err_6));
|
|
1064
|
+
return [3 /*break*/, 12];
|
|
1065
|
+
case 12: return [3 /*break*/, 14];
|
|
1066
|
+
case 13:
|
|
1067
|
+
err = new errs.NotFoundError('Invalid session(s)');
|
|
962
1068
|
next(err);
|
|
963
|
-
_a.label =
|
|
964
|
-
case
|
|
1069
|
+
_a.label = 14;
|
|
1070
|
+
case 14: return [2 /*return*/];
|
|
965
1071
|
}
|
|
966
1072
|
});
|
|
967
1073
|
});
|
|
968
1074
|
};
|
|
969
1075
|
ChannelEngine.prototype._handleSubtitleManifest = function (req, res, next) {
|
|
970
1076
|
return __awaiter(this, void 0, void 0, function () {
|
|
971
|
-
var session, body,
|
|
1077
|
+
var session, body, err_7, err;
|
|
972
1078
|
return __generator(this, function (_a) {
|
|
973
1079
|
switch (_a.label) {
|
|
974
1080
|
case 0:
|
|
@@ -990,8 +1096,8 @@ var ChannelEngine = /** @class */ (function () {
|
|
|
990
1096
|
next();
|
|
991
1097
|
return [3 /*break*/, 4];
|
|
992
1098
|
case 3:
|
|
993
|
-
|
|
994
|
-
next(this._gracefulErrorHandler(
|
|
1099
|
+
err_7 = _a.sent();
|
|
1100
|
+
next(this._gracefulErrorHandler(err_7));
|
|
995
1101
|
return [3 /*break*/, 4];
|
|
996
1102
|
case 4: return [3 /*break*/, 6];
|
|
997
1103
|
case 5:
|
|
@@ -1027,7 +1133,7 @@ var ChannelEngine = /** @class */ (function () {
|
|
|
1027
1133
|
};
|
|
1028
1134
|
ChannelEngine.prototype._handleSubtitleSliceEndpoint = function (req, res, next) {
|
|
1029
1135
|
return __awaiter(this, void 0, void 0, function () {
|
|
1030
|
-
var slicer, body,
|
|
1136
|
+
var slicer, body, err_8;
|
|
1031
1137
|
return __generator(this, function (_a) {
|
|
1032
1138
|
switch (_a.label) {
|
|
1033
1139
|
case 0:
|
|
@@ -1048,77 +1154,10 @@ var ChannelEngine = /** @class */ (function () {
|
|
|
1048
1154
|
next();
|
|
1049
1155
|
return [3 /*break*/, 4];
|
|
1050
1156
|
case 3:
|
|
1051
|
-
err_7 = _a.sent();
|
|
1052
|
-
next(this._gracefulErrorHandler(err_7));
|
|
1053
|
-
return [3 /*break*/, 4];
|
|
1054
|
-
case 4: return [2 /*return*/];
|
|
1055
|
-
}
|
|
1056
|
-
});
|
|
1057
|
-
});
|
|
1058
|
-
};
|
|
1059
|
-
ChannelEngine.prototype._handleMediaManifest = function (req, res, next) {
|
|
1060
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1061
|
-
var session, sessionLive, body, err_8, err;
|
|
1062
|
-
return __generator(this, function (_a) {
|
|
1063
|
-
switch (_a.label) {
|
|
1064
|
-
case 0:
|
|
1065
|
-
debug("x-playback-session-id=".concat(req.headers["x-playback-session-id"], " req.url=").concat(req.url));
|
|
1066
|
-
debug(req.params);
|
|
1067
|
-
session = sessions[req.params[1]];
|
|
1068
|
-
sessionLive = sessionsLive[req.params[1]];
|
|
1069
|
-
if (!(session && sessionLive)) return [3 /*break*/, 12];
|
|
1070
|
-
_a.label = 1;
|
|
1071
|
-
case 1:
|
|
1072
|
-
_a.trys.push([1, 10, , 11]);
|
|
1073
|
-
body = null;
|
|
1074
|
-
if (!!this.streamSwitchManager) return [3 /*break*/, 3];
|
|
1075
|
-
debug("[".concat(req.params[1], "]: Responding with VOD2Live manifest"));
|
|
1076
|
-
return [4 /*yield*/, session.getCurrentMediaManifestAsync(req.params[0], req.headers["x-playback-session-id"])];
|
|
1077
|
-
case 2:
|
|
1078
|
-
body = _a.sent();
|
|
1079
|
-
return [3 /*break*/, 9];
|
|
1080
|
-
case 3:
|
|
1081
|
-
if (!(switcherStatus[req.params[1]] === null || switcherStatus[req.params[1]] === undefined)) return [3 /*break*/, 5];
|
|
1082
|
-
debug("[".concat(req.params[1], "]: (").concat(switcherStatus[req.params[1]], ") Waiting for streamSwitcher to respond"));
|
|
1083
|
-
return [4 /*yield*/, timer(500)];
|
|
1084
|
-
case 4:
|
|
1085
|
-
_a.sent();
|
|
1086
|
-
return [3 /*break*/, 3];
|
|
1087
|
-
case 5:
|
|
1088
|
-
debug("switcherStatus[".concat(req.params[1], "]=[").concat(switcherStatus[req.params[1]], "]"));
|
|
1089
|
-
if (!switcherStatus[req.params[1]]) return [3 /*break*/, 7];
|
|
1090
|
-
debug("[".concat(req.params[1], "]: Responding with Live-stream manifest"));
|
|
1091
|
-
return [4 /*yield*/, sessionLive.getCurrentMediaManifestAsync(req.params[0])];
|
|
1092
|
-
case 6:
|
|
1093
|
-
body = _a.sent();
|
|
1094
|
-
return [3 /*break*/, 9];
|
|
1095
|
-
case 7:
|
|
1096
|
-
debug("[".concat(req.params[1], "]: Responding with VOD2Live manifest"));
|
|
1097
|
-
return [4 /*yield*/, session.getCurrentMediaManifestAsync(req.params[0], req.headers["x-playback-session-id"])];
|
|
1098
|
-
case 8:
|
|
1099
|
-
body = _a.sent();
|
|
1100
|
-
_a.label = 9;
|
|
1101
|
-
case 9:
|
|
1102
|
-
//verbose(`[${session.sessionId}] body=`);
|
|
1103
|
-
//verbose(body);
|
|
1104
|
-
res.sendRaw(200, Buffer.from(body, 'utf8'), {
|
|
1105
|
-
"Content-Type": "application/vnd.apple.mpegurl",
|
|
1106
|
-
"Access-Control-Allow-Origin": "*",
|
|
1107
|
-
"Cache-Control": "max-age=".concat(this.streamerOpts.cacheTTL || '4'),
|
|
1108
|
-
"X-Instance-Id": this.instanceId + "<".concat(version, ">"),
|
|
1109
|
-
});
|
|
1110
|
-
next();
|
|
1111
|
-
return [3 /*break*/, 11];
|
|
1112
|
-
case 10:
|
|
1113
1157
|
err_8 = _a.sent();
|
|
1114
1158
|
next(this._gracefulErrorHandler(err_8));
|
|
1115
|
-
return [3 /*break*/,
|
|
1116
|
-
case
|
|
1117
|
-
case 12:
|
|
1118
|
-
err = new errs.NotFoundError('Invalid session(s)');
|
|
1119
|
-
next(err);
|
|
1120
|
-
_a.label = 13;
|
|
1121
|
-
case 13: return [2 /*return*/];
|
|
1159
|
+
return [3 /*break*/, 4];
|
|
1160
|
+
case 4: return [2 /*return*/];
|
|
1122
1161
|
}
|
|
1123
1162
|
});
|
|
1124
1163
|
});
|
package/dist/engine/session.d.ts
CHANGED
|
@@ -45,6 +45,10 @@ declare class Session {
|
|
|
45
45
|
discSeq: any;
|
|
46
46
|
mediaSeqOffset: any;
|
|
47
47
|
transitionSegments: any;
|
|
48
|
+
audioSeq: any;
|
|
49
|
+
discAudioSeq: any;
|
|
50
|
+
audioSeqOffset: any;
|
|
51
|
+
transitionAudioSegments: any;
|
|
48
52
|
reloadBehind: any;
|
|
49
53
|
};
|
|
50
54
|
isAllowedToClearVodCache: boolean;
|
|
@@ -87,9 +91,11 @@ declare class Session {
|
|
|
87
91
|
resetAsync(id: any): Promise<void>;
|
|
88
92
|
getSessionState(): Promise<any>;
|
|
89
93
|
getTruncatedVodSegments(vodUri: any, duration: any): Promise<any>;
|
|
90
|
-
|
|
94
|
+
getTruncatedVodAudioSegments(vodUri: any, duration: any): Promise<any>;
|
|
95
|
+
setCurrentMediaSequenceSegments(segments: any, mSeqOffset: any, reloadBehind: any, audioSegments: any, aSeqOffset: any): Promise<void>;
|
|
91
96
|
getCurrentMediaSequenceSegments(opts: any): Promise<any>;
|
|
92
|
-
|
|
97
|
+
getCurrentAudioSequenceSegments(opts: any): Promise<any>;
|
|
98
|
+
setCurrentMediaAndDiscSequenceCount(_mediaSeq: any, _discSeq: any, _audioSeq: any, _discAudioSeq: any): Promise<void>;
|
|
93
99
|
getCurrentMediaAndDiscSequenceCount(): Promise<{
|
|
94
100
|
mediaSeq: any;
|
|
95
101
|
discSeq: any;
|