declare interface AgoraApiExecutor { onSuccess: (result: T) => void; onError: (err: Error) => void; } export declare abstract class AudioExtension extends Extension implements IAudioExtension { } export declare abstract class AudioProcessor extends BaseProcessor implements IAudioProcessor { get kind(): Kind; protected inputNode?: AudioNode; protected outputNode?: AudioNode; protected destination?: IBaseProcessor; protected context?: IAudioProcessorContext; pipe(processor: IBaseProcessor): IBaseProcessor; unpipe(): void; protected output(output: MediaStreamTrack | AudioNode, context: IAudioProcessorContext): void; updateInput(inputOptions: { track?: MediaStreamTrack; node?: AudioNode; context: IAudioProcessorContext; }): void; reset(): void; /** * methods implemented by extension developer * */ protected onNode?(audioNode: AudioNode, context: IProcessorContext): void | Promise; } export declare type AutoAdjustConfig = { checkDuration: number; checkTimes: number; targetAverageTime: number; targetFps: number; }; declare abstract class BaseProcessor extends EventEmitter_2 implements IBaseProcessor { protected inputTrack?: MediaStreamTrack; protected outputTrack?: MediaStreamTrack; protected _enabled: boolean; _source?: BaseProcessor; readonly ID: string; abstract get kind(): Kind; get enabled(): boolean; protected output(track: MediaStreamTrack, context: IProcessorContext): void; protected destination?: IBaseProcessor; protected context?: IProcessorContext; constructor(); enable(): void | Promise; disable(): void | Promise; /** * methods/properties called by SDK/extension user * */ abstract pipe(processor: IBaseProcessor): IBaseProcessor; abstract unpipe(): void; abstract updateInput(inputOptions: { track?: MediaStreamTrack; node?: AudioNode; context: IProcessorContext; }): void; abstract reset(): void; /** * methods implemented by extension developer * */ abstract name: string; protected onTrack?(track: MediaStreamTrack, context: IProcessorContext): void | Promise; protected onEnableChange?(enabled: boolean): void | Promise; protected onPiped?(context: IProcessorContext): void; protected onUnpiped?(context?: IProcessorContext): void; } export declare function CreateAutoAdjuster(backend: 'cpu' | 'gpu', direction: 'local' | 'remote', procecssor: BaseProcessor, config: AutoAdjustConfig): IAutoAdjuster; declare interface EventEmitter { on(event: string, listener: Function): void; off(event: string, listener: Function): void; } /** * @ignore */ /** @en * @ignore */ declare class EventEmitter_2 { private _events; /** * 指定一个事件名,获取当前所有监听这个事件的回调函数。 * * @param event - 事件名称。 */ /** @en * Gets all the listeners for a specified event. * * @param event The event name. */ getListeners(event: string): Function[]; /** * 监听一个指定的事件,当事件触发时会调用传入的回调函数。 * * @param event - 指定事件的名称。 * @param listener - 传入的回调函数。 */ /** @en * Listens for a specified event. * * When the specified event happens, the SDK triggers the callback that you pass. * @param event The event name. * @param listener The callback to trigger. */ on(event: string, listener: Function): void; /** * 监听一个指定的事件,当事件触发时会调用传入的回调函数。 * * 当监听后事件第一次触发时,该监听和回调函数就会被立刻移除,也就是只监听一次指定事件。 * * @param event - 指定事件的名称。 * @param listener - 传入的回调函数。 */ /** @en * Listens for a specified event once. * * When the specified event happens, the SDK triggers the callback that you pass and then removes the listener. * @param event The event name. * @param listener The callback to trigger. */ once(event: string, listener: Function): void; /** * 取消一个指定事件的监听。 * * @param event - 指定事件的名称。 * @param listener - 监听事件时传入的回调函数。 */ /** @en * Removes the listener for a specified event. * * @param event The event name. * @param listener The callback that corresponds to the event listener. */ off(event: string, listener: Function): void; /** * 指定一个事件,取消其所有的监听。 * * @param event - 指定事件的名称,如果没有指定事件,则取消所有事件的所有监听。 */ /** @en * Removes all listeners for a specified event. * * @param event The event name. If left empty, all listeners for all events are removed. */ removeAllListeners(event?: string): void; private _indexOfListener; emitAsPromise(event: string, ...args: any[]): Promise; emitAsPromiseNoResponse(event: string, ...args: any[]): Promise; } export declare abstract class Extension implements IExtension { protected readonly __registered__: boolean; private logger; private reporter; protected parameters: IExtensionParameters; protected abstract _createProcessor(): T; checkCompatibility?(): boolean; createProcessor(): T; static setLogLevel(level: number): void; } export declare interface IAudioExtension extends IExtension { createProcessor(): T; } export declare interface IAudioProcessor extends IBaseProcessor { /** @ignore */ updateInput(inputOptions: { track?: MediaStreamTrack; node?: AudioNode; context: IAudioProcessorContext; }): void; } export declare interface IAudioProcessorContext extends IProcessorContext { getAudioContext(): AudioContext; } export declare interface IAutoAdjuster { setConfig(config: AutoAdjustConfig): void; reset(): void; setMediaStreamTrackInfo(id: string, framerate?: number): void; getTrackFramerate(): number; onProcessFrame(startTime: number, endTime: number): Promise; shouldDisableProcessor(startTime: number, endTime: number): Promise; disableProcessor(): Promise; } export declare interface IBaseProcessor extends EventEmitter { /** * 处理器的名称。 */ /** * @en * The name of this processor. */ readonly name: string; /** * 处理器的 ID。 */ /** * @en * The ID of this processor. */ readonly ID: string; /** * 处理器的类型,标识用于视频或者音频。 */ /** * @en * The type of processor, identify it is to process audio or video. */ kind: "video" | "audio"; /** * 标识处理器的状态。 */ /** * @en * The enabled state of processor. */ enabled: boolean; /** * 连接下一个处理器或者音频/视频输出。 * @param processor 下一个处理器或者音频/视频输出终点。 */ /** * @en * Pipe the next processor or audio/video destination. * @param processor The next processor or audio/video destination. */ pipe(processor: IBaseProcessor): IBaseProcessor; /** * 取消当前处理器到下一个的连接。 */ /** * @en * Unpipe this processor to the next one. */ unpipe(): void; /** * 禁用当前处理器,将当前处理器的输入作为输出。 */ /** * @en * Disable this processor, make the input of this processor as the output. */ disable(): void | Promise; /** * 启用当前处理器。 */ /** * @en * Enable the current processor. */ enable(): void | Promise; /** @ignore */ updateInput(inputOptions: { track?: MediaStreamTrack; node?: AudioNode; context: IProcessorContext; }): void; /** @ignore */ reset(): void; } export declare interface IExtension { createProcessor(): T; checkCompatibility?(): boolean; } export declare interface IExtensionLogger { debug(...args: any): void; info(...args: any): void; warning(...args: any): void; error(...args: any): void; setLogLevel(level: number): void; } declare interface IExtensionParameters { [key: string]: any; } export declare interface IExtensionReporter { reportApiInvoke(params: ReportApiInvokeParams, throttleTime?: number): AgoraApiExecutor; } export declare interface IProcessorContext { getConstraints(): Promise; requestApplyConstraints(constraints: MediaTrackConstraints, processor: IBaseProcessor): Promise; requestRevertConstraints(processor: IBaseProcessor): Promise; registerStats(processor: IBaseProcessor, type: string, cb: () => any): void; unregisterStats(processor: IBaseProcessor, type: string): void; gatherStats(): ProcessorStats[]; registerUsage(processor: IBaseProcessor, cb: () => Usage | Promise): void; unregisterUsage(processor: IBaseProcessor): void; getDirection(): "local" | "remote"; gatherUsage(): Promise; } export declare type Kind = "video" | "audio"; declare class Logger implements IExtensionLogger { private logLevel; private hookLog?; /** * 设置 SDK 的日志输出级别 * @param level - SDK 日志级别依次为 NONE(4),ERROR(3),WARNING(2),INFO(1),DEBUG(0)。选择一个级别, * 你就可以看到在该级别及该级别以上所有级别的日志信息。 * * 例如,如果你输入代码 Logger.setLogLevel(1);,就可以看到 INFO,ERROR 和 WARNING 级别的日志信息。 */ setLogLevel(level: number): void; debug(...args: any): void; info(...args: any): void; warning(...args: any): void; error(...args: any): void; private log; } export declare const logger: Logger; export declare interface ProcessorStats { processorID: string; processorName: string; type: string; stats: any; } export declare class PromiseMutex { private lockingPromise; private locks; private name; private lockId; constructor(name?: string); get isLocked(): boolean; lock(info?: string): Promise<() => void>; } declare interface ReportApiInvokeParams { name: string; options: any; reportResult?: boolean; timeout?: number; } declare class Reporter implements IExtensionReporter { private apiInvokeMsgQueue; private hookApiInvoke?; reportApiInvoke(params: ReportApiInvokeParams): AgoraApiExecutor; private sendApiInvoke; } export declare const reporter: Reporter; export declare class Ticker { type: TICKER_TYPE; interval: number; private fn?; private _running; get running(): boolean; private _osc?; constructor(type: TICKER_TYPE, interval: number); add(fn: Function): void; remove(): void; start(): void; stop(): void; } declare type TICKER_TYPE = "Timer" | "RAF" | "Oscillator"; export declare interface Usage { id: string; value: number; level: number; } export declare interface UsageWithDirection extends Usage { direction: "local" | "remote"; } export declare abstract class VideoProcessor extends BaseProcessor { get kind(): Kind; pipe(processor: IBaseProcessor): IBaseProcessor; unpipe(): void; updateInput(inputOptions: { track?: MediaStreamTrack; node?: AudioNode; context: IProcessorContext; }): void; reset(): void; } export { }