import { Participant } from "../model/Participant";
import { Track } from "../model/Track";
import { WebSocketMessageBody } from "../websocket-handler/WebsocketHandler";
import { BaseVideoCallHandler } from "./BaseVideoCallHandler";
import { PeerConnection } from "../model/PeerConnection";
export declare class WebrtcHandler extends BaseVideoCallHandler {
    private dynamicLibHelper;
    private rtcPeerConnections;
    private adaptationManager;
    onParticipantUpdated(): void;
    onParticipantStartMeetingCalled(participant: Participant): Promise<void>;
    resumeIncomingTrack(track: Track): void;
    pauseIncomingTrack(track: Track): void;
    onSocketMessage(websocketCallHandler: WebSocketMessageBody): void;
    addTransceiverifRequired: (peerConnection: PeerConnection) => Promise<void>;
    addTransceiverToEachTrackKind: (eachKind: string, peerConnection: PeerConnection, shouldReplaceIfExist?: boolean) => Promise<void>;
    private checkIfCanSendOffer;
    loopSendOffer: (peerConnectionObject: PeerConnection, participant: Participant, mungedOffer: any, count?: number) => Promise<void>;
    onNewOffer: (data: {
        sdp: string;
        type: string;
        sender: Participant;
    }) => Promise<void>;
    onNewAnswer: (data: {
        sdp: string;
        type: string;
        sender: Participant;
    }) => Promise<void>;
    onRemoteNegotiationNeeded: (data: {
        sender: Participant;
        negotiationId: string;
        shouldRestartIce: boolean;
        isVideoAdded: boolean;
        isAudioAdded: boolean;
    }) => Promise<void>;
    onIceCandidate: (data: {
        candidate: any;
        type: string;
        sender: Participant;
    }) => Promise<void>;
    onRTCConnectionChanged: (remoteParticipant: Participant, count?: number) => Promise<void>;
    subToConnectionState: (remoteParticipant: Participant) => Promise<void>;
    onNegotiationNeeded: (remoteParticipant: Participant, shouldRestartIce?: boolean, count?: number, shouldForceFullyCreateOffer?: boolean) => Promise<void>;
    onAllParticipants(participants: Participant[]): Promise<void>;
    onUserLeft(participant: Participant): Promise<void>;
    onUserJoined(participant: Participant): Promise<void>;
    startSendTrackToPartiipant: (participant: Participant) => Promise<void>;
    sendTrackToParticipant: (track: Track, participant: Participant) => Promise<void>;
    private sendWebrtcMessage;
    init(isForceFully?: boolean): Promise<void>;
    onReconnect(): Promise<void>;
    stopTrack(track: Track): void;
    pauseTrack(track: Track): void;
    resumeTrack(track: Track): void;
    sendTrack(track: Track): void;
    createDataChannel(): Promise<void>;
    sendMessageViaDataChannel(messagePayload: any): void;
    private isOfferInitParticipant;
    private printLogIfRequired;
    setOpusSdpParams: (sdp: string) => string;
    setOpusParams: (transceiver: RTCRtpTransceiver) => void;
    setOpusParamsForSender: (sender: RTCRtpSender) => void;
    applyAudioPriority: (transceiver: RTCRtpTransceiver) => void;
    onPing(): Promise<void>;
    cleanup(shouldStopTracks?: boolean): Promise<void>;
    onNewTrack: (track: MediaStreamTrack, receiver: RTCRtpReceiver, transceiver: RTCRtpTransceiver, remoteParticipant: Participant) => Promise<void>;
    participantAudioVideoStatusUpdated(participant: Participant): void;
    private registerTrack;
    private watchForRealTrack;
    private isPhantomTrack;
}
