yirtc-sdk-web
Version:
基于WebRTC的实时音视频SDK
250 lines (249 loc) • 7.06 kB
TypeScript
/**
* 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;
}