@livedigital/client 3.11.0 → 3.11.1

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.
Files changed (59) hide show
  1. package/README.md +8 -7
  2. package/dist/engine/media/streamEffects/video/virtual-background/TensorFlowLoader.d.ts +13 -0
  3. package/dist/engine/media/streamEffects/video/virtual-background/TrackProcessor.d.ts +16 -0
  4. package/dist/engine/media/streamEffects/video/virtual-background/constants.d.ts +7 -0
  5. package/dist/engine/media/streamEffects/video/virtual-background/helpers/buildTimerWorker.d.ts +5 -0
  6. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/canvas2d/canvas2dPipeline.d.ts +13 -0
  7. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/helpers/webglHelper.d.ts +8 -0
  8. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/backgroundBlurStage.d.ts +6 -0
  9. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/backgroundImageStage.d.ts +9 -0
  10. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/buildJointBilateralFilterStage.d.ts +7 -0
  11. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/buildLoadSegmentationStage.d.ts +5 -0
  12. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/buildResizingStage.d.ts +5 -0
  13. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/buildSoftmaxStage.d.ts +5 -0
  14. package/dist/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/webgl2Pipeline.d.ts +14 -0
  15. package/dist/engine/media/streamEffects/video/virtual-background/types.d.ts +81 -0
  16. package/dist/engine/media/tracks/DefaultVideoTrack.d.ts +3 -7
  17. package/dist/index.es.js +226 -2
  18. package/dist/index.js +226 -2
  19. package/dist/types/common.d.ts +0 -2
  20. package/dist/types/media.d.ts +2 -7
  21. package/package.json +2 -2
  22. package/src/engine/index.ts +2 -2
  23. package/src/engine/media/index.ts +2 -2
  24. package/src/engine/media/streamEffects/video/virtual-background/TensorFlowLoader.ts +89 -0
  25. package/src/engine/media/streamEffects/video/virtual-background/TrackProcessor.ts +161 -0
  26. package/src/engine/media/streamEffects/video/virtual-background/constants.ts +62 -0
  27. package/src/engine/media/streamEffects/video/virtual-background/helpers/buildTimerWorker.ts +42 -0
  28. package/src/engine/media/streamEffects/video/virtual-background/pipelines/canvas2d/canvas2dPipeline.ts +159 -0
  29. package/src/engine/media/streamEffects/video/virtual-background/pipelines/helpers/webglHelper.ts +133 -0
  30. package/src/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/backgroundBlurStage.ts +292 -0
  31. package/src/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/backgroundImageStage.ts +221 -0
  32. package/src/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/buildJointBilateralFilterStage.ts +158 -0
  33. package/src/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/buildLoadSegmentationStage.ts +103 -0
  34. package/src/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/buildResizingStage.ts +111 -0
  35. package/src/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/buildSoftmaxStage.ts +106 -0
  36. package/src/engine/media/streamEffects/video/virtual-background/pipelines/webgl2/webgl2Pipeline.ts +217 -0
  37. package/src/engine/media/streamEffects/video/virtual-background/types.ts +94 -0
  38. package/src/engine/media/tracks/DefaultVideoTrack.ts +35 -27
  39. package/src/types/common.ts +0 -2
  40. package/src/types/media.ts +2 -7
  41. package/dist/engine/media/streamEffects/video/esdk/TrackProcessor.d.ts +0 -47
  42. package/dist/engine/media/streamEffects/video/esdk/types.d.ts +0 -3
  43. package/src/engine/media/streamEffects/video/esdk/TrackProcessor.ts +0 -309
  44. package/src/engine/media/streamEffects/video/esdk/components/component.d.ts +0 -33
  45. package/src/engine/media/streamEffects/video/esdk/components/countdown/countdown.d.ts +0 -29
  46. package/src/engine/media/streamEffects/video/esdk/components/lower-third/collection/doubleSlideRect.d.ts +0 -34
  47. package/src/engine/media/streamEffects/video/esdk/components/lower-third/collection/horizontalMirror.d.ts +0 -30
  48. package/src/engine/media/streamEffects/video/esdk/components/lower-third/collection/leftTextbox.d.ts +0 -32
  49. package/src/engine/media/streamEffects/video/esdk/components/lower-third/collection/slideBold.d.ts +0 -42
  50. package/src/engine/media/streamEffects/video/esdk/components/lower-third/collection/twoSideRects/animatedBox.d.ts +0 -59
  51. package/src/engine/media/streamEffects/video/esdk/components/lower-third/collection/twoSideRects/twoSlideRects.d.ts +0 -28
  52. package/src/engine/media/streamEffects/video/esdk/components/lower-third/lowerThird.d.ts +0 -86
  53. package/src/engine/media/streamEffects/video/esdk/components/overlay-screen/overlayScreen.d.ts +0 -43
  54. package/src/engine/media/streamEffects/video/esdk/components/stickers/stickerSprite.d.ts +0 -49
  55. package/src/engine/media/streamEffects/video/esdk/components/stickers/stickers.d.ts +0 -59
  56. package/src/engine/media/streamEffects/video/esdk/components/waterMark/waterMark.d.ts +0 -17
  57. package/src/engine/media/streamEffects/video/esdk/tsvb.d.ts +0 -173
  58. package/src/engine/media/streamEffects/video/esdk/types.ts +0 -3
  59. package/src/engine/media/streamEffects/video/esdk/utils/errorBus.d.ts +0 -42
package/README.md CHANGED
@@ -19,9 +19,10 @@ const client = new Client();
19
19
 
20
20
  ## Plugins
21
21
  Now you can use the noise reduction and virtual backgrounds functionality. To do this, copy all the files from the
22
- /files directory to the root directory of your project, and add tsvb-web.js scripts to your index.html
22
+ /files directory to the root directory of your project, and add tflite loader scripts to your index.html
23
23
  ```
24
- <script src="%PUBLIC_URL%/esdk/2.7.4/tsvb-web.js"></script>
24
+ <script src="%PUBLIC_URL%/tflite/tflite.js"></script>
25
+ <script src="%PUBLIC_URL%/tflite/tflite-simd.js"></script>
25
26
  ```
26
27
 
27
28
  ## Debugging
@@ -30,17 +31,17 @@ LiveDigital client uses the [debug](https://www.npmjs.com/package/debug) module
30
31
 
31
32
  There are three log severities:
32
33
 
33
- - **debug**: verbose information logged to console.info
34
- - **warn**: warning messages logged to console.warn
35
- - **error**: error messages logged to console.error
34
+ - **debug**: verbose information logged to console.info
35
+ - **warn**: warning messages logged to console.warn
36
+ - **error**: error messages logged to console.error
36
37
 
37
38
  All the logs generated by LiveDigital client have a namespace starting with “LiveDigital”
38
39
  plus colon, followed by the log severity in upper case plus colon (just if “warn” or “error”),
39
- and followed by the internal component name (if any) and the log message.
40
+ and followed by the internal component name (if any) and the log message.
40
41
 
41
42
  ### Enable Logging
42
43
  By default, logging is turned off. In order to enable it, the debug key in the browser's
43
- localStorage must be set.
44
+ localStorage must be set.
44
45
  >Check the [debug](https://www.npmjs.com/package/debug) module documentation for further information regarding how to filter specific log messages based on namespace matching rules.
45
46
 
46
47
  ### Example
@@ -0,0 +1,13 @@
1
+ import { LogLevel } from '../../../../../types/common';
2
+ import { SegmentationConfig, TFLite } from './types';
3
+ export default class TensorFlowLoader {
4
+ #private;
5
+ constructor(logLevel: LogLevel);
6
+ get isLoaded(): boolean;
7
+ get tfliteModule(): TFLite | undefined;
8
+ loadTFLite(): Promise<void>;
9
+ loadTFLiteModel(segmentationConfig: SegmentationConfig): Promise<void>;
10
+ private loadTFLiteRegular;
11
+ private loadTFLiteSIMD;
12
+ private static getTFLiteModelFileName;
13
+ }
@@ -0,0 +1,16 @@
1
+ import { GetProcessedTrackParams } from './types';
2
+ import { LogLevel } from '../../../../../types/common';
3
+ interface VideoTrackProcessorParams {
4
+ logLevel: LogLevel;
5
+ }
6
+ export default class TrackProcessor {
7
+ #private;
8
+ constructor(params: VideoTrackProcessorParams);
9
+ get isProcessing(): boolean;
10
+ processTrack(params: GetProcessedTrackParams): Promise<MediaStreamTrack>;
11
+ stopProcessing(): void;
12
+ private static buildWebGL2Pipeline;
13
+ private static buildCanvas2dPipeline;
14
+ private static buildSourcePlayback;
15
+ }
16
+ export {};
@@ -0,0 +1,7 @@
1
+ import { InputResolution, PipeLineConfig } from './types';
2
+ export declare const INPUT_RESOLUTIONS: {
3
+ [resolution in InputResolution]: [number, number];
4
+ };
5
+ export declare const BLUR_PIPELINE_CONFIG: PipeLineConfig;
6
+ export declare const BLUR_IN_BACKGROUND_TASK_PIPELINE_CONFIG: PipeLineConfig;
7
+ export declare const SAFARI_BLUR_PIPELINE_CONFIG: PipeLineConfig;
@@ -0,0 +1,5 @@
1
+ export default function buildTimerWorker(): {
2
+ setTimeout: (callback: () => void, timeoutMs: number) => number;
3
+ clearTimeout: (callbackId: number) => void;
4
+ terminate: () => void;
5
+ };
@@ -0,0 +1,13 @@
1
+ import { BackgroundConfig, SourcePlayback, PostProcessingConfig, SegmentationConfig, TFLite } from '../../types';
2
+ export interface BuildCanvas2dPipeLineParams {
3
+ sourcePlayback: SourcePlayback;
4
+ backgroundConfig: BackgroundConfig;
5
+ segmentationConfig: SegmentationConfig;
6
+ canvas: HTMLCanvasElement;
7
+ tflite: TFLite;
8
+ }
9
+ export default function buildCanvas2dPipeline({ sourcePlayback, backgroundConfig, segmentationConfig, canvas, tflite, }: BuildCanvas2dPipeLineParams): {
10
+ render: () => Promise<void>;
11
+ updatePostProcessingConfig: (newPostProcessingConfig: PostProcessingConfig) => void;
12
+ cleanUp: () => void;
13
+ };
@@ -0,0 +1,8 @@
1
+ export declare const glsl: (template: {
2
+ raw: readonly string[] | ArrayLike<string>;
3
+ }, ...substitutions: any[]) => string;
4
+ export declare function createProgram(gl: WebGL2RenderingContext, vertexShader: WebGLShader, fragmentShader: WebGLShader): WebGLProgram;
5
+ export declare function compileShader(gl: WebGL2RenderingContext, shaderType: number, shaderSource: string): WebGLShader;
6
+ export declare function createTexture(gl: WebGL2RenderingContext, internalformat: number, width: number, height: number, minFilter?: number, magFilter?: number): WebGLTexture | null;
7
+ export declare function readPixelsAsync(gl: WebGL2RenderingContext, x: number, y: number, width: number, height: number, format: number, type: number, dest: ArrayBufferView): Promise<ArrayBufferView>;
8
+ export declare function createPiplelineStageProgram(gl: WebGL2RenderingContext, vertexShader: WebGLShader, fragmentShader: WebGLShader, positionBuffer: WebGLBuffer, texCoordBuffer: WebGLBuffer): WebGLProgram;
@@ -0,0 +1,6 @@
1
+ export declare type BackgroundBlurStage = {
2
+ render(): void;
3
+ updateCoverage(coverage: [number, number]): void;
4
+ cleanUp(): void;
5
+ };
6
+ export declare function buildBackgroundBlurStage(gl: WebGL2RenderingContext, vertexShader: WebGLShader, positionBuffer: WebGLBuffer, texCoordBuffer: WebGLBuffer, personMaskTexture: WebGLTexture, canvas: HTMLCanvasElement): BackgroundBlurStage;
@@ -0,0 +1,9 @@
1
+ import { BlendMode } from '../../types';
2
+ export declare type BackgroundImageStage = {
3
+ render(): void;
4
+ updateCoverage(coverage: [number, number]): void;
5
+ updateLightWrapping(lightWrapping: number): void;
6
+ updateBlendMode(blendMode: BlendMode): void;
7
+ cleanUp(): void;
8
+ };
9
+ export declare function buildBackgroundImageStage(gl: WebGL2RenderingContext, positionBuffer: WebGLBuffer, texCoordBuffer: WebGLBuffer, personMaskTexture: WebGLTexture, backgroundImage: HTMLImageElement | null, canvas: HTMLCanvasElement): BackgroundImageStage;
@@ -0,0 +1,7 @@
1
+ import { SegmentationConfig } from '../../types';
2
+ export default function buildJointBilateralFilterStage(gl: WebGL2RenderingContext, vertexShader: WebGLShader, positionBuffer: WebGLBuffer, texCoordBuffer: WebGLBuffer, inputTexture: WebGLTexture, segmentationConfig: SegmentationConfig, outputTexture: WebGLTexture, canvas: HTMLCanvasElement): {
3
+ render: () => void;
4
+ updateSigmaSpace: (sigmaSpace: number) => void;
5
+ updateSigmaColor: (sigmaColor: number) => void;
6
+ cleanUp: () => void;
7
+ };
@@ -0,0 +1,5 @@
1
+ import { SegmentationConfig, TFLite } from '../../types';
2
+ export default function buildLoadSegmentationStage(gl: WebGL2RenderingContext, vertexShader: WebGLShader, positionBuffer: WebGLBuffer, texCoordBuffer: WebGLBuffer, segmentationConfig: SegmentationConfig, tflite: TFLite, outputTexture: WebGLTexture): {
3
+ render: () => void;
4
+ cleanUp: () => void;
5
+ };
@@ -0,0 +1,5 @@
1
+ import { SegmentationConfig, TFLite } from '../../types';
2
+ export default function buildResizingStage(gl: WebGL2RenderingContext, vertexShader: WebGLShader, positionBuffer: WebGLBuffer, texCoordBuffer: WebGLBuffer, segmentationConfig: SegmentationConfig, tflite: TFLite): {
3
+ render: () => Promise<void>;
4
+ cleanUp: () => void;
5
+ };
@@ -0,0 +1,5 @@
1
+ import { SegmentationConfig, TFLite } from '../../types';
2
+ export default function buildSoftmaxStage(gl: WebGL2RenderingContext, vertexShader: WebGLShader, positionBuffer: WebGLBuffer, texCoordBuffer: WebGLBuffer, segmentationConfig: SegmentationConfig, tflite: TFLite, outputTexture: WebGLTexture): {
3
+ render: () => void;
4
+ cleanUp: () => void;
5
+ };
@@ -0,0 +1,14 @@
1
+ import { SourcePlayback, BackgroundConfig, PostProcessingConfig, SegmentationConfig, TFLite } from '../../types';
2
+ export interface BuildWebGL2PipeLineParams {
3
+ sourcePlayback: SourcePlayback;
4
+ backgroundImage: HTMLImageElement | null;
5
+ backgroundConfig: BackgroundConfig;
6
+ segmentationConfig: SegmentationConfig;
7
+ canvas: HTMLCanvasElement;
8
+ tflite: TFLite;
9
+ }
10
+ export default function buildWebGL2Pipeline({ sourcePlayback, backgroundImage, backgroundConfig, segmentationConfig, canvas, tflite, }: BuildWebGL2PipeLineParams): {
11
+ render: () => Promise<void>;
12
+ updatePostProcessingConfig: (postProcessingConfig: PostProcessingConfig) => void;
13
+ cleanUp: () => void;
14
+ };
@@ -0,0 +1,81 @@
1
+ /// <reference types="emscripten" />
2
+ export interface TFLite extends EmscriptenModule {
3
+ _getModelBufferMemoryOffset(): number;
4
+ _getInputMemoryOffset(): number;
5
+ _getInputHeight(): number;
6
+ _getInputWidth(): number;
7
+ _getInputChannelCount(): number;
8
+ _getOutputMemoryOffset(): number;
9
+ _getOutputHeight(): number;
10
+ _getOutputWidth(): number;
11
+ _getOutputChannelCount(): number;
12
+ _loadModel(bufferSize: number): number;
13
+ _runInference(): number;
14
+ }
15
+ export declare type BlendMode = 'screen' | 'linearDodge';
16
+ export interface TimerWorker {
17
+ setTimeout: (callback: () => void, timeoutMs: number) => number;
18
+ clearTimeout: (callbackId: number) => void;
19
+ terminate: () => void;
20
+ }
21
+ export declare type PostProcessingConfig = {
22
+ smoothSegmentationMask: boolean;
23
+ jointBilateralFilter: JointBilateralFilterConfig;
24
+ coverage: [number, number];
25
+ lightWrapping: number;
26
+ blendMode: BlendMode;
27
+ };
28
+ export declare type JointBilateralFilterConfig = {
29
+ sigmaSpace: number;
30
+ sigmaColor: number;
31
+ };
32
+ export declare type SourcePlayback = {
33
+ htmlElement: HTMLImageElement | HTMLVideoElement;
34
+ width: number;
35
+ height: number;
36
+ };
37
+ export declare type BackgroundConfig = {
38
+ type: 'none' | 'blur' | 'image';
39
+ url?: string;
40
+ imageSource: HTMLImageElement | null;
41
+ };
42
+ export declare type PipelineType = 'canvas2dCpu' | 'webgl2';
43
+ export declare type SegmentationModel = 'meet' | 'mlkit';
44
+ export declare type SegmentationBackend = 'webgl' | 'wasm' | 'wasmSimd';
45
+ export declare type InputResolution = '640x360' | '256x256' | '256x144' | '160x96';
46
+ export declare type SegmentationConfig = {
47
+ model: SegmentationModel;
48
+ backend: SegmentationBackend;
49
+ inputResolution: InputResolution;
50
+ pipeline: PipelineType;
51
+ targetFps: number;
52
+ deferInputResizing: boolean;
53
+ };
54
+ export interface PipeLine {
55
+ render: () => Promise<void>;
56
+ updatePostProcessingConfig: (postProcessingConfig: PostProcessingConfig) => void;
57
+ cleanUp: () => void;
58
+ }
59
+ export interface PipeLineConfig {
60
+ backgroundConfig: BackgroundConfig;
61
+ segmentationConfig: SegmentationConfig;
62
+ postprocessingConfig: PostProcessingConfig;
63
+ }
64
+ export interface BuildPipeLineConfig {
65
+ config: PipeLineConfig;
66
+ sourcePlayback: SourcePlayback;
67
+ destinationPlayback: HTMLCanvasElement;
68
+ tflite: TFLite;
69
+ }
70
+ export interface TrackProcessingContext {
71
+ pipeline: PipeLine;
72
+ source: HTMLVideoElement | HTMLImageElement;
73
+ destination: HTMLCanvasElement;
74
+ track: MediaStreamTrack;
75
+ timerWorker: TimerWorker;
76
+ timerId: number;
77
+ }
78
+ export declare type GetProcessedTrackParams = {
79
+ track: MediaStreamTrack;
80
+ pipelineConfig: PipeLineConfig;
81
+ };
@@ -2,7 +2,6 @@ import { ProducerCodecOptions } from 'mediasoup-client/lib/Producer';
2
2
  import { RtpEncodingParameters } from 'mediasoup-client/lib/RtpParameters';
3
3
  import { VideoCodec, VideoEncoderConfig } from '../../../types/common';
4
4
  import DefaultBaseTrack from './DefaultBaseTrack';
5
- import type { Effects } from '../streamEffects/video/esdk/TrackProcessor';
6
5
  import { BaseTrackParams, VideoTrack, VideoTrackPublishParams } from '../../../types/media';
7
6
  declare class DefaultVideoTrack extends DefaultBaseTrack implements VideoTrack {
8
7
  #private;
@@ -16,13 +15,10 @@ declare class DefaultVideoTrack extends DefaultBaseTrack implements VideoTrack {
16
15
  setTransformParams(transformParams: {}): void;
17
16
  setMaxSpatialLayer(spatialLayer: number): Promise<void>;
18
17
  getMaxSpatialLayer(): number | undefined;
19
- enableEffects(): Promise<void>;
20
- disableEffects(): Promise<void>;
18
+ enableBlur(): Promise<void>;
19
+ disableBlur(): Promise<void>;
21
20
  publish(params?: VideoTrackPublishParams): Promise<void>;
22
21
  private watchOrientation;
23
- applyEffects(effects: Effects): Promise<void>;
24
- resetEffects(): Promise<void>;
25
- onEffectReady(callback: () => void): void;
26
- get effectReadyProgress(): number;
22
+ private watchDocumentVisibility;
27
23
  }
28
24
  export default DefaultVideoTrack;