eyevinn-channel-engine 4.3.4 → 4.3.5

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.
@@ -16,6 +16,7 @@ export interface ChannelEngineOpts {
16
16
  dummySubtitleEndpoint?: string;
17
17
  subtitleSliceEndpoint?: string;
18
18
  useVTTSubtitles?: boolean;
19
+ vttBasePath?: string;
19
20
  alwaysNewSegments?: boolean;
20
21
  partialStoreHLSVod?: boolean;
21
22
  alwaysMapBandwidthByNearest?: boolean;
@@ -30,6 +31,7 @@ export interface ChannelEngineOpts {
30
31
  volatileKeyTTL?: number;
31
32
  autoCreateSession?: boolean;
32
33
  sessionResetKey?: string;
34
+ keepAliveTimeout?: number;
33
35
  }
34
36
  export interface VodRequest {
35
37
  sessionId: string;
@@ -59,8 +59,8 @@ var sessionsLive = {}; // Should be a persistent store...
59
59
  var sessionSwitchers = {}; // Should be a persistent store...
60
60
  var switcherStatus = {}; // Should be a persistent store...
61
61
  var eventStreams = {};
62
- var DefaultDummySubtitleEndpointPath = "/vtt/dummyUrl";
63
- var DefaultSubtitleSpliceEndpointPath = "/vtt/sliceUrl";
62
+ var DefaultDummySubtitleEndpointPath = "/dummyUrl";
63
+ var DefaultSubtitleSpliceEndpointPath = "/sliceUrl";
64
64
  var ScheduleStreamType;
65
65
  (function (ScheduleStreamType) {
66
66
  ScheduleStreamType[ScheduleStreamType["LIVE"] = 1] = "LIVE";
@@ -84,8 +84,9 @@ var ChannelEngine = /** @class */ (function () {
84
84
  this.useDemuxedAudio = true;
85
85
  }
86
86
  this.useVTTSubtitles = (options && options.useVTTSubtitles) ? options.useVTTSubtitles : false;
87
- this.dummySubtitleEndpoint = (options && options.dummySubtitleEndpoint) ? options.dummySubtitleEndpoint : DefaultDummySubtitleEndpointPath;
88
- this.subtitleSliceEndpoint = (options && options.subtitleSliceEndpoint) ? options.subtitleSliceEndpoint : DefaultSubtitleSpliceEndpointPath;
87
+ var vttBasePath = (options && options.vttBasePath) ? options.vttBasePath : '/vtt';
88
+ this.dummySubtitleEndpoint = (options && options.dummySubtitleEndpoint) ? options.dummySubtitleEndpoint : vttBasePath + DefaultDummySubtitleEndpointPath;
89
+ this.subtitleSliceEndpoint = (options && options.subtitleSliceEndpoint) ? options.subtitleSliceEndpoint : vttBasePath + DefaultSubtitleSpliceEndpointPath;
89
90
  this.sessionResetKey = "";
90
91
  if (options && options.sessionResetKey) {
91
92
  this.sessionResetKey = options.sessionResetKey;
@@ -116,6 +117,11 @@ var ChannelEngine = /** @class */ (function () {
116
117
  this.assetMgr = assetMgr;
117
118
  this.monitorTimer = {};
118
119
  this.server = restify.createServer();
120
+ if (options && options.keepAliveTimeout) {
121
+ this.server.server.keepAliveTimeout = options.keepAliveTimeout;
122
+ this.server.server.headersTimeout = options.keepAliveTimeout + 1000;
123
+ }
124
+ console.log(this.server);
119
125
  this.server.use(restify.plugins.queryParser());
120
126
  this.serverStartTime = Date.now();
121
127
  this.instanceId = uuidv4();
@@ -269,8 +275,8 @@ var ChannelEngine = /** @class */ (function () {
269
275
  this.server.get('/health/:sessionId', this._handleSessionHealth.bind(this));
270
276
  this.server.get('/reset', this._handleSessionsReset.bind(this));
271
277
  this.server.get('/reset/:sessionId', this._handleSessionReset.bind(this));
272
- this.server.get(DefaultDummySubtitleEndpointPath, this._handleDummySubtitleEndpoint.bind(this));
273
- this.server.get(DefaultSubtitleSpliceEndpointPath, this._handleSubtitleSliceEndpoint.bind(this));
278
+ this.server.get(vttBasePath + DefaultDummySubtitleEndpointPath, this._handleDummySubtitleEndpoint.bind(this));
279
+ this.server.get(vttBasePath + DefaultSubtitleSpliceEndpointPath, this._handleSubtitleSliceEndpoint.bind(this));
274
280
  this.server.on('NotFound', function (req, res, err, next) {
275
281
  res.header("X-Instance-Id", _this.instanceId + "<".concat(version, ">"));
276
282
  return next();
@@ -94,6 +94,7 @@ var engineOptions = {
94
94
  defaultSlateUri: "https://maitv-vod.lab.eyevinn.technology/slate-consuo.mp4/master.m3u8",
95
95
  slateRepetitions: 10,
96
96
  redisUrl: process.env.REDIS_URL,
97
+ keepAliveTimeout: process.env.KEEP_ALIVE_TIMEOUT ? parseInt(process.env.KEEP_ALIVE_TIMEOUT) * 1000 : undefined
97
98
  };
98
99
  var engine = new index_1.ChannelEngine(refAssetManager, engineOptions);
99
100
  engine.start();
@@ -100,7 +100,8 @@ var engineOptions = {
100
100
  redisUrl: process.env.REDIS_URL,
101
101
  useDemuxedAudio: true,
102
102
  alwaysNewSegments: false,
103
- useVTTSubtitles: true
103
+ useVTTSubtitles: true,
104
+ vttBasePath: '/subtitles'
104
105
  };
105
106
  var engine = new index_1.ChannelEngine(refAssetManager, engineOptions);
106
107
  engine.start();
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eyevinn-channel-engine",
3
- "version": "4.3.4",
3
+ "version": "4.3.5",
4
4
  "description": "OTT TV Channel Engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/engine/server.ts CHANGED
@@ -24,8 +24,8 @@ const sessionsLive = {}; // Should be a persistent store...
24
24
  const sessionSwitchers = {}; // Should be a persistent store...
25
25
  const switcherStatus = {}; // Should be a persistent store...
26
26
  const eventStreams = {};
27
- const DefaultDummySubtitleEndpointPath = "/vtt/dummyUrl"
28
- const DefaultSubtitleSpliceEndpointPath = "/vtt/sliceUrl"
27
+ const DefaultDummySubtitleEndpointPath = "/dummyUrl"
28
+ const DefaultSubtitleSpliceEndpointPath = "/sliceUrl"
29
29
 
30
30
  export interface ChannelEngineOpts {
31
31
  defaultSlateUri?: string;
@@ -45,6 +45,7 @@ export interface ChannelEngineOpts {
45
45
  dummySubtitleEndpoint?: string;
46
46
  subtitleSliceEndpoint?: string;
47
47
  useVTTSubtitles?: boolean;
48
+ vttBasePath?: string;
48
49
  alwaysNewSegments?: boolean;
49
50
  partialStoreHLSVod?: boolean;
50
51
  alwaysMapBandwidthByNearest?: boolean;
@@ -58,7 +59,8 @@ export interface ChannelEngineOpts {
58
59
  noSessionDataTags?: boolean;
59
60
  volatileKeyTTL?: number;
60
61
  autoCreateSession?: boolean;
61
- sessionResetKey?:string;
62
+ sessionResetKey?: string;
63
+ keepAliveTimeout?: number;
62
64
  }
63
65
 
64
66
  interface StreamerOpts {
@@ -220,8 +222,9 @@ export class ChannelEngine {
220
222
  }
221
223
 
222
224
  this.useVTTSubtitles = (options && options.useVTTSubtitles) ? options.useVTTSubtitles : false ;
223
- this.dummySubtitleEndpoint = (options && options.dummySubtitleEndpoint) ? options.dummySubtitleEndpoint : DefaultDummySubtitleEndpointPath;
224
- this.subtitleSliceEndpoint = (options && options.subtitleSliceEndpoint) ? options.subtitleSliceEndpoint : DefaultSubtitleSpliceEndpointPath;
225
+ const vttBasePath = (options && options.vttBasePath) ? options.vttBasePath : '/vtt';
226
+ this.dummySubtitleEndpoint = (options && options.dummySubtitleEndpoint) ? options.dummySubtitleEndpoint : vttBasePath + DefaultDummySubtitleEndpointPath;
227
+ this.subtitleSliceEndpoint = (options && options.subtitleSliceEndpoint) ? options.subtitleSliceEndpoint : vttBasePath + DefaultSubtitleSpliceEndpointPath;
225
228
 
226
229
  this.sessionResetKey = "";
227
230
  if (options && options.sessionResetKey) {
@@ -253,6 +256,11 @@ export class ChannelEngine {
253
256
  this.assetMgr = assetMgr;
254
257
  this.monitorTimer = {};
255
258
  this.server = restify.createServer();
259
+ if (options && options.keepAliveTimeout) {
260
+ this.server.server.keepAliveTimeout = options.keepAliveTimeout;
261
+ this.server.server.headersTimeout = options.keepAliveTimeout + 1000;
262
+ }
263
+ console.log(this.server);
256
264
  this.server.use(restify.plugins.queryParser());
257
265
  this.serverStartTime = Date.now();
258
266
  this.instanceId = uuidv4();
@@ -369,8 +377,8 @@ export class ChannelEngine {
369
377
  this.server.get('/health/:sessionId', this._handleSessionHealth.bind(this));
370
378
  this.server.get('/reset', this._handleSessionsReset.bind(this));
371
379
  this.server.get('/reset/:sessionId', this._handleSessionReset.bind(this));
372
- this.server.get(DefaultDummySubtitleEndpointPath, this._handleDummySubtitleEndpoint.bind(this));
373
- this.server.get(DefaultSubtitleSpliceEndpointPath, this._handleSubtitleSliceEndpoint.bind(this));
380
+ this.server.get(vttBasePath + DefaultDummySubtitleEndpointPath, this._handleDummySubtitleEndpoint.bind(this));
381
+ this.server.get(vttBasePath + DefaultSubtitleSpliceEndpointPath, this._handleSubtitleSliceEndpoint.bind(this));
374
382
 
375
383
  this.server.on('NotFound', (req, res, err, next) => {
376
384
  res.header("X-Instance-Id", this.instanceId + `<${version}>`);
@@ -106,6 +106,7 @@ const engineOptions: ChannelEngineOpts = {
106
106
  "https://maitv-vod.lab.eyevinn.technology/slate-consuo.mp4/master.m3u8",
107
107
  slateRepetitions: 10,
108
108
  redisUrl: process.env.REDIS_URL,
109
+ keepAliveTimeout: process.env.KEEP_ALIVE_TIMEOUT ? parseInt(process.env.KEEP_ALIVE_TIMEOUT) * 1000: undefined
109
110
  };
110
111
 
111
112
  const engine = new ChannelEngine(refAssetManager, engineOptions);
package/examples/demux.ts CHANGED
@@ -112,7 +112,8 @@ const engineOptions: ChannelEngineOpts = {
112
112
  redisUrl: process.env.REDIS_URL,
113
113
  useDemuxedAudio: true,
114
114
  alwaysNewSegments: false,
115
- useVTTSubtitles: true
115
+ useVTTSubtitles: true,
116
+ vttBasePath: '/subtitles'
116
117
  };
117
118
 
118
119
  const engine = new ChannelEngine(refAssetManager, engineOptions);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eyevinn-channel-engine",
3
- "version": "4.3.4",
3
+ "version": "4.3.5",
4
4
  "description": "OTT TV Channel Engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",