@zoom/videosdk
Version:
Zoom Web Video SDK
845 lines (826 loc) • 15.6 kB
TypeScript
/**
* Definition of error types for operations.
* - INVALID_OPERATION: The operation is invalid, perhaps caused by duplicated operations.
* - INTERNAL_ERROR: The remote service is temporarily unavailable.
* - INSUFFICIENT_PRIVILEGES: The operation is only applicable for a host or manager.
* - OPERATION_TIMEOUT: The operation timed out, try again later.
* - IMPROPER_MEETING_STATE: The user is not in a meeting, see the reason for details.
* - `closed`: The meeting is not joined.
* - `on hold`: The user is on hold.
* - `reconnecting`: The meeting is reconnecting.
* - INVALID_PARAMETERS: The parameters passed to the method are invalid, perhaps the wrong user ID or value, see the reason for details.
* - OPERATION_LOCKED: The operation can not be completed because the relevant property is locked, see the reason for details.
*/
export type ErrorTypes =
| 'INVALID_OPERATION'
| 'INTERNAL_ERROR'
| 'OPERATION_TIMEOUT'
| 'INSUFFICIENT_PRIVILEGES'
| 'IMPROPER_MEETING_STATE'
| 'INVALID_PARAMETERS'
| 'OPRATION_LOCKED';
/**
* Failure reason for async operation.
*/
interface ExecutedFailure {
/**
* Error type.
*/
type: ErrorTypes;
/**
* Error reason.
*/
reason: string;
/**
* Error code.
*/
errorCode: number;
}
/**
* The result of an asynchronous operation. It is a promise object.
* - '': Success
* - ExecutedFailure: Failure. Use `.catch(error=>{})` or `try{ *your code* }catch(error){}` to handle the errors.
*/
export type ExecutedResult = Promise<'' | ExecutedFailure>;
/**
* The participant interface.
*/
interface Participant {
/**
* User ID.
*/
userId: number;
/**
* User's display name.
*/
displayName: string;
/**
* User's audio state.
* - `''`: No audio.
* - `computer`: Joined by computer audio.
* - `phone`: Joined by phone.
*/
audio: '' | 'computer' | 'phone';
/**
* Whether audio is muted.
* If the user is not joined to audio (not connected to the microphone), the value is undefined
*/
muted?: boolean;
/**
* Whether the user is the host.
*/
isHost: boolean;
/**
* Whether the user is a manager.
*/
isManager: boolean;
/**
* User's avatar.
* Users can set their avatar in their [web profile](https://zoom.us/profile).
*/
avatar?: string;
/**
* Whether the user started video.
*/
bVideoOn: boolean;
/**
* Whether the user started sharing.
*/
sharerOn: boolean;
/**
* Whether the share is paused.
*/
sharerPause: boolean;
/**
* Whether the share is optimized for video.
*/
bVideoShare?: boolean;
/**
* Whether the sharer is also sharing the tab audio.
*/
bShareAudioOn?: boolean;
/**
* Whether the sharer is also sharing to the subsession.
*/
bShareToSubsession?: boolean;
/**
* Whether the user connected via the phone.
*/
isPhoneUser?: boolean;
/**
* The unified ID of a user among the main session or subsession.
*/
userGuid?: string;
/**
* Whether to allow individual recording.
*/
isAllowIndividualRecording: boolean;
/*
* Whether the user has a camera connected to the device.
*/
isVideoConnect: boolean;
/**
* The `user_identity` from the JWT payload.
*/
userIdentity?: string;
/**
* Whether the user is only connected to the audio speaker, not the microphone.
*/
isSpeakerOnly?: boolean;
/**
* The phone number if the user is a public switched telephone network (PSTN) call out user.
* For privacy concerns, only the calling user has this property.
*/
phoneNumber?: string;
/**
* Whether the user is in a failover process.
*/
isInFailover?: boolean;
/**
* Subsession ID.
* Available if the user is in a subsession.
*/
subsessionId?: string;
}
/**
* Subsession's status.
*/
export enum SubsessionStatus {
/**
* Subsession is not open.
*/
NotStarted = 1,
/**
* Subsession is open.
*/
InProgress = 2,
/**
* Subsession is closing, there may be a closing countdown.
*/
Closing = 3,
/**
* Subsession is closed.
*/
Closed = 4,
}
/**
* Dial out state.
*
* Normal process: Calling-> Ringing->Accepted->Success
*
* Busy process: Calling->Busy
*/
export enum DialoutState {
/**
* Calling.
*/
Calling = 1,
/**
* Ringing.
*/
Ringing = 2,
/**
* User accepted the call.
*/
Accepted = 3,
/**
* Busy.
*/
Busy = 4,
/**
* Service unavailable.
*/
NotAvailable = 5,
/**
* User hung up the call.
*/
HangUp = 6,
/**
* Call failed.
*/
Fail = 7,
/**
* Call succeeded.
*/
Success = 8,
/**
* Timeout.
*/
Timeout = 9,
/**
* Canceling the call.
*/
Canceling = 10,
/**
* Canceled the call.
*/
Canceled = 11,
/**
* Failed to cancel the call.
*/
CancelFailed = 12,
}
/**
* Payload audio muted source type for current-audio-change event.
*/
export enum MutedSource {
/**
* User actively muted.
*/
Active = 'active',
/**
* The host muted the user.
*/
PassiveByMuteOne = 'passive(mute one)',
/**
* The host muted all users.
*/
PassiveByMuteAll = 'passive(mute all)',
}
/**
* The reason for leaving audio for the current-audio-change event.
* @enum
*/
export enum LeaveAudioSource {
/**
* User actively left audio.
*/
Active = 'active',
/**
* Left audio due to failover.
*/
Failover = 'failover',
/**
* Left audio due to system ending audio stream.
*/
EndedBySystem = 'audio stream is ended by system',
/**
* Left audio as audio was connected to a phone call.
*/
Pstn = 'pstn',
/**
* Left audio due to microphone error.
*/
MicrophoneError = 'microphone error',
}
/**
* Payload for action type of current audio change.
*/
export enum AudioChangeAction {
/**
* Join the audio.
*/
Join = 'join',
/**
* Leave the audio.
*/
Leave = 'leave',
/**
* Muted.
*/
Muted = 'muted',
/**
* Unmuted.
*/
Unmuted = 'unmuted',
}
/**
* The reconnecting reason for the connection-change payload.
*/
export enum ReconnectReason {
/**
* Meeting failover.
*/
Failover = 'failover',
/**
* Join the breakout subsession.
*/
JoinSubsession = 'join breakout room',
/**
* Move among the breakout subsessions.
*/
MoveToSubsession = 'move to breakout room',
/**
* Back to the main session.
*/
BackToMainSession = 'back to main session',
}
/**
* Enumeration of video quality.
* @enum
*/
export enum VideoQuality {
/**
* 90P
*/
Video_90P = 0,
/**
* 180P
*/
Video_180P = 1,
/**
* 360P
*/
Video_360P = 2,
/**
* 720P
*/
Video_720P = 3,
/**
* 1080P
*/
Video_1080P = 4,
}
/**
* `facingMode` for mobile browser, see https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/facingMode.
*/
export enum MobileVideoFacingMode {
/**
* The video source is facing toward the user, such as a front-facing camera on a mobile device.
*/
User = 'user',
/**
* The video source is facing away from the user, such as the back camera on a mobile device facing the user's environment.
*/
Environment = 'environment',
/**
* The video source is facing toward the user but to their left, such as a camera aimed toward the user but over their left shoulder.
*/
Left = 'left',
/**
* The video source is facing toward the user but to their right, such as a camera aimed toward the user but over their right shoulder.
*/
Right = 'right',
}
/**
* Enumeration of camera control command.
* @enum
*/
export enum CameraControlCmd {
/**
* Zoom in.
*/
ZoomIn = 2,
/**
* Zoom out.
*/
ZoomOut = 3,
/**
* Pan left.
*/
Left = 4,
/**
* Pan right.
*/
Right = 5,
/**
* Tilt up.
*/
Up = 6,
/**
* Tilt down.
*/
Down = 7,
/**
* Switch camera.
*/
SwitchCamera = 8,
}
/**
* Capability of camera.
*/
export interface PTZCameraCapability {
/**
* Pan
*/
pan: boolean;
/**
* Tilt
*/
tilt: boolean;
/**
* Zoom
*/
zoom: boolean;
}
/**
* Reasons for refusal to control far-end camera.
*/
export enum FarEndCameraControlDeclinedReason {
/**
* Normal.
*/
None = 0,
/**
* Approved another user.
*/
ApproveAnother = 3,
/**
* User withdrew the control.
*/
Stop = 5,
}
/**
* Log level
*/
type LogLevelLabel = 'debug' | 'log' | 'info' | 'print' | 'warn' | 'error';
/**
* Log level object
*/
export type LogLevelDetail = {
/**
* debug
*/
debug: boolean;
/**
* log
*/
log: boolean;
/**
* info
*/
info: boolean;
/**
* print
*/
print: boolean;
/**
* warn
*/
warn: boolean;
/**
* error
*/
error: boolean;
};
/**
* Logger init option
*/
export interface LoggerInitOption {
/**
* Whether in debug mode or not. In debug mode, the log prints to console.
*/
debugMode?: boolean;
/**
* The external tracking ID.
*/
trackingId?: string;
}
/**
* Media playback file for audio or video input
*/
export interface MediaPlaybackFile {
/**
* Media playback file URL.
*/
url: string;
/**
* Start time of file playback.
*/
currentTime?: number;
/**
* Is loop
*/
loop?: boolean;
/**
* Whether to play the audio file locally
*/
playback?: boolean;
}
/**
* File transfer upload status
*/
export enum ChatFileUploadStatus {
/**
* Init
*/
Init = 0,
/**
* InProgress
*/
InProgress = 1,
/**
* Success
*/
Success = 2,
/**
* Fail
*/
Fail = 3,
/**
* Cancel
*/
Cancel = 4,
/**
* Complete
*/
Complete = 5,
}
/**
* File transfer download status
*/
export enum ChatFileDownloadStatus {
/**
* InProgress
*/
InProgress = 1,
/**
* Success
*/
Success = 2,
/**
* Fail
*/
Fail = 3,
/**
* Cancel
*/
Cancel = 4,
}
/**
* Summary status.
*/
export enum SummaryStatus {
/**
* Summary started.
*/
Start = 'Start',
/**
* Summary paused.
*/
Paused = 'Paused',
/**
* Summary stopped.
*/
Stopped = 'Stopped',
/**
* default
*/
Default = '',
}
/**
* Meeting query status.
*/
export enum MeetingQueryStatus {
/**
* Meeting query started.
*/
Start = 'Start',
/**
* Meeting query paused.
*/
Paused = 'Paused',
/**
* Meeting query stopped.
*/
Stopped = 'Stopped',
/**
* default
*/
Default = '',
}
/**
* The parent class of all source video stream processors.
* > ***Note***: Only available in the video processor worker.
*
* @category Global
*/
export abstract class VideoProcessor {
/**
* constructor
* @param port message port
* @param options customised options
*/
public constructor(port: MessagePort, options?: any);
/**
* The communication port used for messaging between the processor and the main thread.
*/
protected port: MessagePort;
/**
* Function to retrieve an OffscreenCanvas that renders the current output frame or processed result.
*/
public getOutput(): OffscreenCanvas | null;
/**
* Callback triggered during the initialization of the processor.
*/
public onInit(): void;
/**
* Callback triggered during the uninitialization of the processor.
*/
public onUninit(): void;
/**
* Processes a video frame and optionally applies effects or modifications.
*/
public abstract processFrame(
/**
* The input video frame to be processed.
*/
input: VideoFrame,
/**
* The canvas where the processed frame is rendered.
*/
output: OffscreenCanvas,
): boolean | Promise<boolean>;
}
/**
* The parent class of all source audio stream processors.
* > ***Note***: AudioProcessor inherits from AudioWorkletProcessor and only available in audio worklet processors.
*
* @category Global
*/
export abstract class AudioProcessor extends AudioWorkletProcessor {
/**
* constructor
* @param port message port
* @param options customised options
*/
public constructor(port: MessagePort, options?: any);
/**
* The communication port used for messaging between the processor and the main thread.
*/
public port: MessagePort;
/**
* Callback triggered during the initialization of the processor.
*/
public onInit(): void;
/**
* Callback triggered during the uninitialization of the processor.
*/
public onUninit(): void;
}
/**
* Registers a custom processor class.
*> ***Note***: Only available in the processor worker.
* @param name The name of the processor
* @param processor The processor class
*
* @category Global
*/
export function registerProcessor(
name: string,
processor: typeof VideoProcessor | typeof AudioProcessor,
): void;
/**
* Custom web component for video render
*
* @category Global
*/
export declare class VideoPlayer extends HTMLElement {
['node-id']: string;
['video-quality']: string;
}
/**
* Custom web component for video render container
*
* @category Global
*/
export declare class VideoPlayerContainer extends HTMLElement {}
/**
* CRC device call out return code
*/
export enum CRCReturnCode {
/**
* Success
*/
Success = 0,
/**
* Ringing
*/
Ringing = 1,
/**
* Timeout
*/
Timeout = 2,
/**
* Busy
*/
Busy = 101,
/**
* Fail
*/
Fail = 104,
/**
* Unreachable
*/
Unreachable = 111,
}
/**
* CRC device protocol
*/
export enum CRCProtocol {
/**
* H323
*/
H323 = 1,
/**
* SIP
*/
SIP = 2,
}
/**
* Active media failed error code
*/
export enum ActiveMediaFailedCode {
/**
* Failed to establish the audio data channel.
*/
AudioConnectionFailed = 101,
/**
* Audio track ended.
*/
AudioStreamEnded = 102,
/**
* Microphone permission denied.
*/
MicrophonePermissionReset = 103,
/**
* Failed to get audio data from the stream.
*/
AudioStreamFailed = 104,
/**
* Microphone muted in the system.
*/
MicrophoneMuted = 105,
/**
* Sent audio playback was interrupted.
*/
AudioStreamMuted = 106,
/**
* Remote audio playback was interrupted.
*/
AudioPlaybackInterrupted = 107,
/**
* Failed to establish the video data channel.
*/
VideoConnectionFailed = 201,
/**
* Video track ended.
*/
VideoStreamEnded = 202,
/**
* Camera permission denied.
*/
CameraPermissionReset = 203,
/**
* WebGL context invalid.
*/
WebGlContextInvalid = 204,
/**
* Out of memory
*/
WasmOutOfMemory = 205,
/**
* Failed to get video data from the stream.
*/
VideoStreamFailed = 206,
/**
* Video stream was interrupted.
*/
VideoStreamMuted = 207,
/**
* Failed to get sharing data from the stream.
*/
SharingStreamFailed = 301,
}
/**
* Processor type
*/
type MediaType = 'audio' | 'video' | 'share';
/**
* Processor instance
*/
export interface Processor {
/**
* Processor name
*/
name: string;
/**
* Processor type, currently only supports video
*/
type: MediaType;
/**
* Communication interface with processor
*/
port: MessagePort;
}
/**
* Processor construction parameters
*/
export interface ProcessorParams {
/**
* Load the processor script from the absolute URL (the processor script must be from the same origin or CORS must be enabled).
*/
url: string;
/**
* Processor name
*/
name: string;
/**
* Processor type, currently only supports video
*/
type: MediaType;
/**
* Parameters to pass into the processor constructor
*/
options?: any;
}