/**
 * YiRTC SDK 客户端类
 */
import { EventEmitter } from './utils/eventEmitter';
import { Stream } from './stream';
import { ClientConfig, ConnectionState, ClientRole, ChannelProfile, JoinOptions, LocalAudioStats, LocalVideoStats, RemoteAudioStats, RemoteVideoStats, NetworkStats, MediaType, SubscribeOptions, UnsubscribeOptions } from './types';
/**
 * 客户端类，负责管理房间连接和流发布/订阅
 */
export declare class Client extends EventEmitter {
    private logger;
    private config;
    private connectionState;
    private channelName;
    private uid;
    private role;
    private channelProfile;
    private localStream;
    private remoteStreams;
    private peerConnections;
    private signalConnection;
    /**
     * 创建客户端实例
     * @param config 客户端配置
     */
    constructor(config: ClientConfig);
    /**
     * 加入频道
     * @param options 加入选项
     * @returns Promise<void>
     */
    join(options: JoinOptions): Promise<void>;
    /**
     * 离开频道
     * @returns Promise<void>
     */
    leave(): Promise<void>;
    /**
     * 发布本地流
     * @param stream 本地流实例
     * @param mediaType 媒体类型，不填写则默认为 'all'
     * @returns Promise<void>
     */
    publish(stream: Stream, mediaType?: MediaType | 'all'): Promise<void>;
    /**
     * 取消发布本地流
     * @returns Promise<void>
     */
    unpublish(): Promise<void>;
    /**
     * 订阅远程流
     * @param remoteUserId 远程用户ID
     * @param streamId 流ID
     * @param options 订阅选项，可选
     * @returns Promise<void>
     */
    subscribe(remoteUserId: string, streamId: string, options?: SubscribeOptions): Promise<void>;
    /**
     * 取消订阅远程流
     * @param stream 远程流实例
     * @param options 取消订阅选项，可选
     * @returns Promise<void>
     */
    unsubscribe(stream: Stream, options?: UnsubscribeOptions): Promise<void>;
    /**
     * 设置频道模式
     * @param profile 频道模式
     */
    setChannelProfile(profile: ChannelProfile): void;
    /**
     * 设置客户端角色
     * @param role 客户端角色
     */
    setClientRole(role: ClientRole): void;
    /**
     * 获取连接状态
     * @returns ConnectionState
     */
    getConnectionState(): ConnectionState;
    /**
     * 获取用户ID
     * @returns string | number
     */
    getUid(): string | number;
    /**
     * 销毁客户端实例
     */
    destroy(): void;
    /**
     * 获取本地音频统计信息
     * @returns LocalAudioStats
     */
    getLocalAudioStats(): LocalAudioStats;
    /**
     * 获取本地视频统计信息
     * @returns LocalVideoStats
     */
    getLocalVideoStats(): LocalVideoStats;
    /**
     * 获取远程音频统计信息
     * @returns Record<string, RemoteAudioStats>
     */
    getRemoteAudioStats(): Record<string, RemoteAudioStats>;
    /**
     * 获取远程视频统计信息
     * @returns Record<string, RemoteVideoStats>
     */
    getRemoteVideoStats(): Record<string, RemoteVideoStats>;
    /**
     * 获取网络统计信息
     * @returns NetworkStats
     */
    getNetworkStats(): NetworkStats;
    /**
     * 设置远程视频流类型（大小流）
     * @param uid 远程用户ID
     * @param streamType 流类型（0: 大流, 1: 小流）
     */
    setRemoteVideoStreamType(uid: string | number, streamType: number): void;
    /**
     * 启用双流模式
     */
    enableDualStream(): void;
    /**
     * 禁用双流模式
     */
    disableDualStream(): void;
    /**
     * 设置播放音量
     * @param volume 音量值 (0-100)
     */
    setPlaybackVolume(volume: number): void;
    /**
     * 创建 WebRTC 对等连接
     * @param remoteUserId 远程用户ID
     * @returns Promise<RTCPeerConnection>
     */
    private _createPeerConnection;
    /**
     * 清理指定用户的WebRTC连接
     * @param remoteUserId 远程用户ID
     */
    private _cleanupPeerConnection;
    /**
     * 创建信令连接
     * @param options 加入选项
     * @returns Promise<void>
     */
    private _createSignalConnection;
    /**
     * 创建Socket.io连接
     * @param resolve Promise resolve回调
     * @param reject Promise reject回调
     */
    private _createSocketIOConnection;
    /**
     * 设置Socket监听器
     * @param socket Socket.io实例
     */
    private _setupSocketListeners;
    /**
     * 处理 WebRTC 信令消息
     * @param message 信令消息
     */
    private _handleWebRTCSignaling;
    /**
     * 处理 Offer 信令
     * @param remoteUserId 远程用户ID
     * @param offer Offer 对象
     */
    private _handleOffer;
    /**
     * 处理 Answer 信令
     * @param remoteUserId 远程用户ID
     * @param answer Answer 对象
     */
    private _handleAnswer;
    /**
     * 处理 ICE Candidate 信令
     * @param remoteUserId 远程用户ID
     * @param candidate ICE Candidate 对象
     */
    private _handleCandidate;
    /**
     * 加入房间
     * @param socket Socket.io实例
     */
    private _joinRoom;
    /**
     * 更新连接状态
     * @param state 新状态
     */
    private _updateConnectionState;
    /**
     * 开始监控WebRTC统计信息
     * @param remoteUserId 远程用户ID
     * @param peerConnection RTCPeerConnection实例
     */
    private _startStatsMonitoring;
    /**
     * 处理WebRTC统计信息
     * @param remoteUserId 远程用户ID
     * @param stats RTCStatsReport
     */
    private _processWebRTCStats;
    /**
     * 全面检测WebRTC延迟问题并提供智能提示
     * @param stats 统计数据
     */
    private _detectLatencyIssues;
    /**
     * 检查是否为高分辨率
     * @param resolution 分辨率字符串
     */
    private _isHighResolution;
    /**
     * 分析ICE候选并检测延迟问题
     * @param candidate ICE候选
     */
    private _analyzeICECandidate;
    /**
     * 检查是否为私有IP地址
     * @param ip IP地址
     */
    private _isPrivateIP;
    /**
     * 使用RTCRtpSender.setCodecPreferences强制H.264编解码器
     * @param peerConnection RTCPeerConnection实例
     */
    private _setH264CodecPreferences;
    /**
     * 在添加轨道后设置编解码器偏好
     * @param peerConnection RTCPeerConnection实例
     * @param stream 媒体流
     */
    private _addStreamWithH264Preference;
    /**
     * 强制使用H.264编解码器（SDP修改方式）
     * @param sessionDescription SDP描述
     * @returns 修改后的SDP描述
     */
    private _forceH264CodecViaSDP;
    /**
     * 提取SDP中的视频编解码器信息
     * @param sdp SDP字符串
     * @returns 编解码器列表
     */
    private _extractVideoCodecs;
}
