UNPKG

yirtc-sdk-web

Version:

基于WebRTC的实时音视频SDK

250 lines (249 loc) 7.06 kB
/** * 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; }