@microsoft/teams-js
Version:
Microsoft Client SDK for building app for Microsoft hosts
251 lines (250 loc) • 8.38 kB
TypeScript
/**
* @hidden
* Extended video API
* @internal
* Limited to Microsoft-internal use
* @beta
* @module
*/
import { DefaultVideoEffectCallBack as VideoEffectCallBack } from '../internal/videoEffectsUtils';
import * as videoEffects from '../public/videoEffects';
export declare const frameProcessingTimeoutInMs = 2000;
/**
* @hidden
* Error level when notifying errors to the host, the host will decide what to do acording to the error level.
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
export declare enum ErrorLevel {
Fatal = "fatal",
Warn = "warn"
}
/**
* @hidden
* Video frame configuration supplied to the host to customize the generated video frame parameters
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
export interface VideoFrameConfig extends videoEffects.VideoFrameConfig {
/**
* @hidden
* Flag to indicate use camera stream to synthesize video frame or not.
* Default value is true.
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
requireCameraStream?: boolean;
/**
* @hidden
* Machine learning model to run in the host to do audio inference for you
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
audioInferenceModel?: ArrayBuffer;
/**
* @hidden
* Specifies additional capabilities that should be applied to the video frame
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
requiredCapabilities?: string[];
}
/**
* @hidden
* Represents a video frame
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
export interface VideoBufferData extends videoEffects.VideoBufferData {
/**
* @hidden
* The model output if you passed in an {@linkcode VideoFrameConfig.audioInferenceModel}
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
audioInferenceResult?: Uint8Array;
}
/**
* @hidden
* The callback will be called on every frame when running on the supported host.
* We require the frame rate of the video to be at least 22fps for 720p, thus the callback should process a frame timely.
* The video app should call `notifyVideoFrameProcessed` to notify a successfully processed video frame.
* The video app should call `notifyError` to notify a failure. When the failures accumulate to a certain number(determined by the host), the host will see the app is "frozen" and give the user the option to close the app.
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
export type VideoBufferHandler = (videoBufferData: VideoBufferData, notifyVideoFrameProcessed: () => void, notifyError: (errorMessage: string) => void) => void;
/**
* @hidden
* Video frame data extracted from the media stream. More properties may be added in the future.
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
export type VideoFrameData = videoEffects.VideoFrameData & {
/**
* @hidden
* The model output if you passed in an {@linkcode VideoFrameConfig.audioInferenceModel}
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
audioInferenceResult?: Uint8Array;
/**
* @hidden
* Additional metadata determined by capabilities specified in {@linkcode VideoFrameConfig.requiredCapabilities}
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
attributes?: ReadonlyMap<string, Uint8Array>;
};
/**
* @hidden
* The callback will be called on every frame when running on the supported host.
* We require the frame rate of the video to be at least 22fps for 720p, thus the callback should process a frame timely.
* The video app should resolve the promise to notify a successfully processed video frame.
* The video app should reject the promise to notify a failure. When the failures accumulate to a certain number(determined by the host), the host will see the app is "frozen" and give the user the option to close the app.
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
export type VideoFrameHandler = (receivedVideoFrame: VideoFrameData) => Promise<videoEffects.VideoFrame>;
/**
* @hidden
* @beta
* Callbacks and configuration supplied to the host to process the video frames.
* @internal
* Limited to Microsoft-internal use
*/
export type RegisterForVideoFrameParameters = {
/**
* Callback function to process the video frames extracted from a media stream.
*/
videoFrameHandler: VideoFrameHandler;
/**
* Callback function to process the video frames shared by the host.
*/
videoBufferHandler: VideoBufferHandler;
/**
* Video frame configuration supplied to the host to customize the generated video frame parameters, like format
*/
config: VideoFrameConfig;
};
/**
* @hidden
* Register to process video frames
* @beta
*
* @param parameters - Callbacks and configuration to process the video frames. A host may support either {@link VideoFrameHandler} or {@link VideoBufferHandler}, but not both.
* To ensure the video effect works on all supported hosts, the video app must provide both {@link VideoFrameHandler} and {@link VideoBufferHandler}.
* The host will choose the appropriate callback based on the host's capability.
*
* @internal
* Limited to Microsoft-internal use
*/
export declare function registerForVideoFrame(parameters: RegisterForVideoFrameParameters): void;
/**
* @hidden
* Video extension should call this to notify host that the current selected effect parameter changed.
* If it's pre-meeting, host will call videoEffectCallback immediately then use the videoEffect.
* If it's the in-meeting scenario, we will call videoEffectCallback when apply button clicked.
* @beta
* @param effectChangeType - the effect change type.
* @param effectId - Newly selected effect id. {@linkcode VideoEffectCallBack}
* @param effectParam Variant for the newly selected effect. {@linkcode VideoEffectCallBack}
*
* @internal
* Limited to Microsoft-internal use
*/
export declare function notifySelectedVideoEffectChanged(effectChangeType: videoEffects.EffectChangeType, effectId: string | undefined, effectParam?: string): void;
/**
* @hidden
* Register the video effect callback, host uses this to notify the video extension the new video effect will by applied
* @beta
* @param callback - The VideoEffectCallback to invoke when registerForVideoEffect has completed
*
* @internal
* Limited to Microsoft-internal use
*/
export declare function registerForVideoEffect(callback: VideoEffectCallBack): void;
/**
* @hidden
* Personalized video effect
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
export interface PersonalizedEffect {
/**
* Personalized effect id
*/
id: string;
/**
* Display name
*/
name: string;
/**
* Effect type defined by app
*/
type: string;
/**
* Data URI of the thumbnail image content encoded in ASCII format using the base64 scheme
*/
thumbnail: string;
}
/**
* @hidden
* Send personalized effects to Teams client
* @beta
*
* @internal
* Limited to Microsoft-internal use
*/
export declare function updatePersonalizedEffects(effects: PersonalizedEffect[]): void;
/**
* @hidden
*
* Checks if video capability is supported by the host
* @beta
*
* @throws Error if {@linkcode app.initialize} has not successfully completed
*
* @returns boolean to represent whether the video capability is supported
*
* @internal
* Limited to Microsoft-internal use
*/
export declare function isSupported(): boolean;
/**
* @hidden
* Sending fatal error notification to host. Call this function only when your app meets fatal error and can't continue.
* The host will stop the video pipeline and terminate this session, and optionally, show an error message to the user.
* @beta
* @param errorMessage - The error message that will be sent to the host
*
* @internal
* Limited to Microsoft-internal use
*/
export declare function notifyFatalError(errorMessage: string): void;