import { WebRtcDataPeer, ConnectionId, PeerConfig, SLogger } from "../network/index";
import { BrowserMediaStream } from "./BrowserMediaStream";
import { IFrameData } from "../media/RawFrame";
import { MediaConfig } from "../media/MediaConfig";
export interface RTCMediaStreamEvent extends Event {
    stream: MediaStream;
}
export interface RTCPeerConnectionObsolete extends RTCPeerConnection {
    onaddstream: ((this: RTCPeerConnection, streamEvent: RTCMediaStreamEvent) => any) | null;
    addStream(stream: MediaStream): void;
}
export declare class MediaPeer extends WebRtcDataPeer {
    private DEBUG_QUALITY;
    static MUNGE_SDP: boolean;
    protected DEBUG_preferredCodec: any;
    private DEBUG_IosWorkaround;
    private mMediaConfig;
    private mRemoteStream;
    private mAudioSender;
    private mVideoSender;
    InternalStreamAdded: (peer: MediaPeer, stream: BrowserMediaStream) => void;
    protected get UseDataChannels(): boolean;
    constructor(connectionId: ConnectionId, peerConfig: PeerConfig, mediaConfig: MediaConfig, baseLogger: SLogger);
    protected OnSetup(): void;
    private getTransceiverByKind;
    private static ReorderList;
    /**Called when the transceiver for video is first accessed
     *
     * TODO: Watch out when implementing codecs. If the old
     * offerToReceive option is used this is only called after
     * createOffer/createAnswer. Likely too late to change the codec order
     *
     * @param sender
     * @returns
     */
    SetVideoParams(sender: RTCRtpSender): Promise<void>;
    setVideoTransceiver(transceiver: RTCRtpTransceiver): void;
    protected CreateOfferImpl(): Promise<RTCSessionDescriptionInit>;
    protected CreateAnswerImpl(): Promise<RTCSessionDescriptionInit>;
    protected OnCleanup(): void;
    private OnTrack;
    private UpdateRemoteStream;
    TryGetRemoteFrame(): IFrameData;
    PeekFrame(): IFrameData;
    SetLocalStream(stream_container: BrowserMediaStream, config: MediaConfig): Promise<void>;
    Update(): void;
    SetVolume(volume: number): void;
    SetVolumePan(volume: number, pan: number): void;
    HasAudioTrack(): boolean;
    HasVideoTrack(): boolean;
    private EditCodecs;
    private EditProfileLevel;
    private FilterFeatures;
    protected ProcessLocalSdp(desc: RTCSessionDescription): RTCSessionDescription;
    protected ProcessRemoteSdp(desc: RTCSessionDescription): RTCSessionDescription;
}
