eyevinn-channel-engine 4.0.0-rc.0 → 4.0.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/README.md +25 -1
- package/dist/engine/chaos_monkey.js +1 -1
- package/dist/engine/memcached_state_store.js +1 -1
- package/dist/engine/memory_state_store.js +1 -1
- package/dist/engine/playhead_state.d.ts +3 -3
- package/dist/engine/playhead_state.js +1 -1
- package/dist/engine/redis_state_store.js +1 -1
- package/dist/engine/server.d.ts +1 -0
- package/dist/engine/server.js +1 -1
- package/dist/engine/session.d.ts +2 -1
- package/dist/engine/session.js +421 -291
- package/dist/engine/session_live.d.ts +1 -1
- package/dist/engine/session_live.js +1 -1
- package/dist/engine/session_live_state.js +1 -1
- package/dist/engine/session_state.js +3 -1
- package/dist/engine/shared_state_store.js +1 -1
- package/dist/engine/stream_switcher.js +1 -1
- package/dist/engine/util.js +1 -1
- package/dist/package.json +8 -7
- package/dist/server-demux.js +8 -9
- package/package.json +3 -2
- package/server-demux.ts +7 -53
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Eyevinn Channel Engine
|
|
2
|
-
> *Open Source FAST Channel Engine based on VOD2Live technology*
|
|
2
|
+
> *Open Source FAST Channel Engine library based on VOD2Live technology*
|
|
3
3
|
|
|
4
4
|
[](http://slack.streamingtech.se)
|
|
5
5
|
|
|
@@ -29,12 +29,36 @@ Supported Node.js Versions
|
|
|
29
29
|
| 16.x | Yes |
|
|
30
30
|
| 18.x | No |
|
|
31
31
|
|
|
32
|
+
## Supported Source Formats
|
|
33
|
+
|
|
34
|
+
| HLS Format | Muxed | Demuxed | Mix w. Live | Subtitles | DRM |
|
|
35
|
+
| ---------- | ----- | ------- | ----------- | --------- | --- |
|
|
36
|
+
| HLS + TS | Yes | Yes | Yes* | TBD | No |
|
|
37
|
+
| HLS + CMAF | No | Yes | TBD | TBD | TBD |
|
|
38
|
+
|
|
39
|
+
*\* not supported with demuxed sources*
|
|
40
|
+
|
|
32
41
|
## Usage
|
|
33
42
|
|
|
34
43
|
Follow [this tutorial](https://vod2live.docs.eyevinn.technology/getting-started.html) to get started building your own FAST channel engine.
|
|
35
44
|
|
|
45
|
+
You can also use prebuilt [Eyevinn FAST Engine Docker Container](https://github.com/Eyevinn/docker-fast) based on this library. To try it out you can start an instance with 50 demo channels by running this command:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
docker run -d -p 8000:8000 -p 8001:8001 \
|
|
49
|
+
-e DEMO_NUM_CHANNELS=50 \
|
|
50
|
+
eyevinntechnology/fast-engine
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Open the URL http://localhost:8001/ in your browser for a multiview of all 50 channels, and to playback one of the 50 channels point your HLS video player to the URL: http://localhost:8000/channels/<N>/master.m3u8 where <N> is a number between 1 and 50.
|
|
54
|
+
|
|
36
55
|
## Migration
|
|
37
56
|
|
|
57
|
+
### Upgrading from 3.4.x to >= 4.0.0
|
|
58
|
+
|
|
59
|
+
Support for HLS-CMAF and handling audio and video segments of different durations was added to v4
|
|
60
|
+
and this means that it is not possible to mix muxed TS with demuxed CMAF.
|
|
61
|
+
|
|
38
62
|
### Upgrading from 3.3.x to >= 3.4.x
|
|
39
63
|
|
|
40
64
|
A breaking change was introduced in v3.4.0 when Typescript types were introduced. The library no longer exports a default. This means that you need to change `const ChannelEngine = require('eyevinn-channel-engine')` to `const { ChannelEngine } = require('eyevinn-channel-engine')`;
|
|
@@ -13,7 +13,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
13
13
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
14
|
function step(op) {
|
|
15
15
|
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (_) try {
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
17
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
18
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
19
|
switch (op[0]) {
|
|
@@ -13,7 +13,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
13
13
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
14
|
function step(op) {
|
|
15
15
|
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (_) try {
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
17
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
18
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
19
|
switch (op[0]) {
|
|
@@ -13,7 +13,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
13
13
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
14
|
function step(op) {
|
|
15
15
|
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (_) try {
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
17
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
18
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
19
|
switch (op[0]) {
|
|
@@ -13,14 +13,14 @@ declare class SharedPlayheadState {
|
|
|
13
13
|
constructor(store: any, sessionId: any, opts: any);
|
|
14
14
|
sessionId: any;
|
|
15
15
|
store: any;
|
|
16
|
-
state:
|
|
16
|
+
state: 4;
|
|
17
17
|
lastM3u8: any;
|
|
18
18
|
get(key: any): Promise<any>;
|
|
19
|
-
getState(): Promise<
|
|
19
|
+
getState(): Promise<4>;
|
|
20
20
|
getLastM3u8(): Promise<any>;
|
|
21
21
|
getValues(keys: any): Promise<any>;
|
|
22
22
|
set(key: any, value: any): Promise<any>;
|
|
23
|
-
setState(newState: any): Promise<
|
|
23
|
+
setState(newState: any): Promise<4>;
|
|
24
24
|
setLastM3u8(m3u8: any): Promise<any>;
|
|
25
25
|
}
|
|
26
26
|
export {};
|
|
@@ -28,7 +28,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
28
28
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
29
29
|
function step(op) {
|
|
30
30
|
if (f) throw new TypeError("Generator is already executing.");
|
|
31
|
-
while (_) try {
|
|
31
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
32
32
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
33
33
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
34
34
|
switch (op[0]) {
|
|
@@ -13,7 +13,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
13
13
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
14
|
function step(op) {
|
|
15
15
|
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (_) try {
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
17
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
18
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
19
|
switch (op[0]) {
|
package/dist/engine/server.d.ts
CHANGED
package/dist/engine/server.js
CHANGED
|
@@ -14,7 +14,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
18
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
19
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
20
|
switch (op[0]) {
|
package/dist/engine/session.d.ts
CHANGED
|
@@ -86,7 +86,7 @@ declare class Session {
|
|
|
86
86
|
}>;
|
|
87
87
|
getCurrentMediaManifestAsync(bw: any, playbackSessionId: any): Promise<any>;
|
|
88
88
|
getCurrentAudioManifestAsync(audioGroupId: any, audioLanguage: any, playbackSessionId: any): Promise<any>;
|
|
89
|
-
incrementAsync(): Promise<any>;
|
|
89
|
+
incrementAsync(incOpts: any): Promise<any>;
|
|
90
90
|
getMediaManifestAsync(bw: any, opts: any): Promise<any>;
|
|
91
91
|
getAudioManifestAsync(audioGroupId: any, audioLanguage: any, opts: any): Promise<any>;
|
|
92
92
|
getMasterManifestAsync(filter: any): Promise<string>;
|
|
@@ -104,6 +104,7 @@ declare class Session {
|
|
|
104
104
|
_getFirstDuration(manifest: any): Promise<any>;
|
|
105
105
|
_getCurrentDeltaTime(): Promise<any>;
|
|
106
106
|
_getCurrentPlayheadPosition(): Promise<any>;
|
|
107
|
+
_getAudioPlayheadPosition(seqIdx: any): Promise<any>;
|
|
107
108
|
_getLastDuration(manifest: any): Promise<any>;
|
|
108
109
|
_getPlayheadDiffCompesationValue(diffMs: any, thresholdMs: any): number;
|
|
109
110
|
}
|