UNPKG

@100mslive/hms-video-store

Version:

@100mslive Core SDK which abstracts the complexities of webRTC while providing a reactive store for data management with a unidirectional data flow

82 lines (71 loc) 3.32 kB
import { HMSPluginSupportResult } from '../audio'; /** * A plugin implementing this interface can be registered with HMSLocalVideoTrack to transform, process or * analyze the local video track.These can include applications like video filters, virtual background, live * analysis of video etc. The below functions are required for the sdk to properly use the plugin, usually * the plugin would also be exposing some public functions of its own for the UI to control its working. */ export interface HMSVideoPlugin { /** * The name is meant to uniquely specify a plugin instance. This will be used to track number of plugins * added to the track, and same name won't be allowed twice. */ getName(): string; /** * This function will be called before the call to init, it is used to check whether the plugin supports current * OS and device or not. An error will be thrown back to the user if they try to use an unsupported plugin. */ checkSupport(): HMSPluginSupportResult; /** * @deprecated. Will be deleted in future updates. Use checkSupport instead. */ isSupported(): boolean; /** * This function will be called in the beginning for initialization which may include tasks like setting up * variables, loading ML models etc. This can be used by a plugin to ensure it's prepared at the time * processVideoFrame is called. */ init(): Promise<void>; /** * @see HMSVideoPluginType */ getPluginType(): HMSVideoPluginType; getContextType?(): HMSVideoPluginCanvasContextType; /** * This function will be called by the SDK for every video frame which the plugin needs to process. * PluginFrameRate - the rate at which the plugin is expected to process the video frames. This is not necessarily * equal to the capture frame rate. The user can specify this rate, and the sdk might also change it on basis of * device type, or CPU usage. * For an analyzing plugin, the below function will be called at plugin framerate. * For a transforming plugin, the sdk will pass in the input and output at real frame rate with an additional boolean * pass. The expectation is that the plugin should use results of previous runs instead of doing a complex processing * again when pass is set to true. This helps in maintaining the framerate of the video as well as bringing down * CPU usage in case of complex processing. * @param input input canvas containing the input frame * @param output the output canvas which should contain the output frame * @param skipProcessing use results from previous run if true */ processVideoFrame( input: HTMLCanvasElement, output?: HTMLCanvasElement, skipProcessing?: boolean, ): Promise<void> | void; /** * the plugin can use this function to dispose off its resources. It'll be called when the processor instance is * no longer needed at the end. */ stop(): void; } /** * Specifies the type of the plugin a transforming plugin will get an output canvas to give the resulting * transformation. While an analyzing plugin will only be passed the input canvas. */ export enum HMSVideoPluginType { TRANSFORM = 'TRANSFORM', ANALYZE = 'ANALYZE', } export enum HMSVideoPluginCanvasContextType { '2D' = '2d', WEBGL = 'webgl', 'WEBGL2' = 'webgl2', }