/// <reference types="node" />
import { ApplicationCall } from "../ApplicationCall";
import { CameraOrientation } from "../options/CameraOrientation";
import { CallStatus } from "../CallStatus";
import { EventEmitter } from "events";
import { InfobipGateway } from "../../gateway/InfobipGateway";
import { Logger } from "../../log/Logger";
import { Device } from "../../device/Device";
import MonitoredPeerConnection from "../../log/monitor/MonitoredPeerConnection";
import LocalMedia from "../../util/LocalMedia";
import { EmptyAudioStream } from "./EmptyAudioStream";
import { VideoFilter } from "../options/filters/video/VideoFilter";
import { AudioFilter } from "../options/filters/audio/AudioFilter";
import { CustomData } from "../CustomDataType";
import { AnyCallsApiEvent } from "../event/CallsApiEvents";
import { CallsEventHandlers } from "../event/CallsEventHandlers";
import { ApplicationCallOptions } from "../options/ApplicationCallOptions";
import { LocalCapturer } from "../LocalCapturer";
import { ServerCapturer } from "../ServerCapturer";
import { DataChannel } from "../DataChannel";
import { AudioQualityMode } from "../options/AudioQualityMode";
import { DisplayOptions } from "../options/DisplayOptions";
import { RecordingState } from "../RecordingState";
import { ManagedEventEmitter } from "../../util/ManagedEventEmitter";
export declare abstract class DefaultApplicationCall implements ApplicationCall {
    protected gateway: InfobipGateway;
    protected logger: Logger;
    protected rtcConfig: any;
    private device;
    protected _callsConfigurationId: string;
    protected applicationCallOptions: ApplicationCallOptions;
    currentUserIdentity: string;
    private token;
    private apiUrl;
    protected callId: string;
    protected conferenceId: string;
    protected dialogId: string;
    protected audioPC: MonitoredPeerConnection;
    protected localAudio: LocalMedia;
    protected emptyAudioStream: EmptyAudioStream;
    protected localCameraVideo: LocalMedia;
    protected localAudioStream?: MediaStream;
    protected callStatus: CallStatus;
    protected defaultLocalCaputuer: LocalCapturer;
    protected defaultServerCapturer: ServerCapturer;
    protected eventEmitter: ManagedEventEmitter;
    private videoPublisherPC;
    private videoSubscriberPC;
    private localScreenShare;
    private remoteAudioStream?;
    private localCameraVideoStream?;
    private localScreenShareStream?;
    private hasRemoteDescription;
    private mediaUpdateStatus;
    private remoteCandidates;
    private apiEventEmitter;
    private isEarlyMedia;
    private callStartTime;
    private callEstablishTime;
    private callEndTime;
    private joinedConference;
    private joinedDialog;
    private participants;
    private remoteVideos;
    private videoFilterManager;
    private audioFilterManager;
    private networkQualityMonitor;
    private _dataChannel;
    private reconnecting;
    private _audioQualityMode;
    private _recordingState;
    private videoRemovalReason;
    private cameraVideoEncodings;
    protected constructor(eventEmitter: EventEmitter, gateway: InfobipGateway, logger: Logger, rtcConfig: any, device: Device, _callsConfigurationId: string, applicationCallOptions: ApplicationCallOptions, currentUserIdentity: string, token: string, apiUrl: string, callId?: string);
    on(name: AnyCallsApiEvent, handler: CallsEventHandlers.Any): void;
    id(): string;
    options(): ApplicationCallOptions;
    customData(): CustomData;
    callsConfigurationId(): string;
    duration(): number;
    endTime(): Date;
    establishTime(): Date;
    hangup(): void;
    startTime(): Date;
    status(): CallStatus;
    mute(shouldMute: boolean): Promise<void>;
    muted(): boolean;
    sendDTMF(dtmf: string): Promise<void>;
    pauseIncomingVideo(): void;
    resumeIncomingVideo(): void;
    setAudioInputDevice(deviceId: string): Promise<void>;
    audioFilter(): AudioFilter;
    setAudioFilter(audioFilter: AudioFilter): Promise<void>;
    clearAudioFilter(): Promise<void>;
    videoFilter(): VideoFilter;
    setVideoFilter(videoFilter: VideoFilter): Promise<void>;
    clearVideoFilter(): Promise<void>;
    setVideoInputDevice(deviceId: string): Promise<void>;
    cameraOrientation(): CameraOrientation;
    setCameraOrientation(cameraOrientation: CameraOrientation): Promise<void>;
    localCapturer(): LocalCapturer;
    serverCapturer(): ServerCapturer;
    dataChannel(): DataChannel;
    setAudioQualityMode(audioQualityMode: AudioQualityMode): void;
    audioQualityMode(): AudioQualityMode;
    hasCameraVideo(): boolean;
    hasScreenShare(): boolean;
    cameraVideo(localVideo: boolean): Promise<void>;
    screenShare(screenShare: boolean): Promise<void>;
    startScreenShare(displayOptions?: DisplayOptions): Promise<void>;
    stopScreenShare(): Promise<void>;
    recordingState(): RecordingState;
    protected createDataChannel(): void;
    protected createAudioPeerConnection(): void;
    protected setLocalAudioStream(audioStream: MediaStream): void;
    protected createAudioTransceiver(): void;
    protected setLocalDescription(pc: RTCPeerConnection, localDescription: RTCSessionDescriptionInit): Promise<RTCSessionDescriptionInit>;
    protected abstract negotiateAudio(options?: ApplicationCallOptions): Promise<void>;
    protected setRemoteCandidates(): void;
    protected addCameraVideo(): Promise<void>;
    protected addScreenShareVideo(displayOptions?: DisplayOptions): Promise<void>;
    protected handleCallFlowError(error: string, sendHangup?: boolean): void;
    protected validateMediaUpdateStatus(): void;
    protected getLocalAudioStream(audio: boolean, requestVideo: boolean, cameraOrientation?: CameraOrientation, cameraVideoFrameRate?: number): Promise<MediaStream>;
    protected isFinished(): boolean;
    private getMidByIdentityAndVideoType;
    private validateMediaActionAllowed;
    private setAudioStream;
    private sendMute;
    private removeScreenShareVideoWithReason;
    private initEventHandlers;
    private handleDeviceChange;
    private switchToDefaultDevice;
    private updateVideoBitrate;
    private onVideoPublisherConnectionStateChanged;
    private onAudioConnectionStateChanged;
    private ringingHandler;
    private responseHandler;
    private acceptedHandler;
    private videoCallJoinedHandler;
    private changeMonitorConferenceId;
    private handleSetupDataChannel;
    private handleJoinedApplicationConference;
    private handleDialogCreated;
    private createParticipantMap;
    private handleDialogEstablished;
    private handleParticipantJoining;
    private handleParticipantJoined;
    private handleParticipantMediaChanged;
    private emitDeafEvent;
    private emitMutedEvent;
    private emitDisconnectedEvent;
    private handleParticipantStartedTalking;
    private handleParticipantStoppedTalking;
    private emitTalkingEvent;
    private handleParticipantLeft;
    private handleJoinedVideoConference;
    private subscribedVideoHandler;
    private handleSubscribeVideoFlowError;
    private updatedVideoHandler;
    private emitParticipantVideoRemovedEvent;
    private updateCameraStream;
    private handleLeftApplicationConference;
    private handleDialogFinished;
    private handleReconnecting;
    private handleReconnected;
    private handleCallReconnected;
    private handleDialogFailed;
    private videoSubscriberCleanup;
    private dataChannelCleanup;
    private handleJoinVideoCallError;
    private handleJoinVideoConferenceError;
    private handleCallRecordingStarted;
    private handleCallRecordingStopped;
    private handleDialogRecordingStarted;
    private handleDialogRecordingStopped;
    private handleConferenceRecordingStarted;
    private handleConferenceRecordingStopped;
    private subscribeVideoConferenceError;
    private setupDataChannelError;
    private handleParticipantNetworkQuality;
    private handleParticipantDisconnected;
    private handleParticipantReconnected;
    private updateParticipant;
    private mapStreamEvent;
    private createVideoSubscriberPC;
    private onVideoPcTrack;
    private videoMediaReceivingHandler;
    private videoCallPublishedHandler;
    private videoConferencePublishedHandler;
    private publishVideoCallErrorHandler;
    private publishVideoConferenceErrorHandler;
    private videoCallUnpublishedHandler;
    private videoConferenceUnpublishedHandler;
    private hangupHandler;
    private errorHandler;
    private cleanup;
    private handleTrickleIce;
    private addIceCandidate;
    private publishVideo;
    private updateTransceiver;
    private migrateLocalVideos;
    private addTransceiver;
    private negotiateVideoPublisher;
    private removeCameraVideo;
    private removeScreenShareVideo;
    private disableLocalMedia;
    private disableTransceiver;
    private replaceTrack;
    private throwMediaError;
    private getDurationInSeconds;
    private onIceCandidate;
    private emitEstablished;
    private emitEarlyMedia;
    private onAudioPcTrack;
    private scheduleHangup;
    private createVideoPublisherPC;
    private handlePublishVideoFlowError;
    private handleGetUserMediaError;
    private getCameraVideoStream;
    private getScreenShareVideoStream;
    private checkAllowedDisplaySurface;
    private checkDisplaySurfaceSupported;
    private setScreenShareInactive;
    private audioCleanup;
    private onNetworkQualityStatisticsChanged;
    private emitNetworkQualityChanged;
    private currentNetworkQuality;
    private videoPublisherCleanup;
    private loadParticipant;
    private getEndpoint;
    private sendDTMFInfo;
    private emitVideoRemovedEvent;
    private emitVideoAddedEvent;
    private resolveCurrentCallState;
    private resolveCallStateAfterReconnect;
    private handleApplicationCallChanges;
    private handleCallReconnectedToSameState;
    private handleCallReconnectedToNewState;
    private handleCallRecordingTypeChangeOnCallReconnected;
    private handleDialogRecordingTypeChangeOnCallReconnected;
    private handleConferenceRecordingTypeChangeOnCallReconnected;
    private handleParticipantChangesOnCallReconnected;
    private renegotiateMedia;
    private handleParticipantLeftDuringReconnect;
    private handleParticipantJoinedDuringReconnect;
    private handleParticipantChangesDuringReconnect;
}
