UNPKG

yirtc-sdk-web

Version:

基于WebRTC的实时音视频SDK

164 lines (163 loc) 5.53 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; /** * Web 平台的 RTC 适配器实现 */ import { Logger } from '../../utils/logger'; /** * Web RTC适配器 * 实现Web平台的WebRTC功能 */ export class WebRTCAdapter { /** * 构造函数 */ constructor() { this.logger = new Logger('WebRTCAdapter'); } /** * 创建对等连接 * @param config RTC配置 * @returns RTCPeerConnection */ createPeerConnection(config) { try { const peerConnection = new RTCPeerConnection(config); this.logger.debug('创建RTCPeerConnection成功', config); return peerConnection; } catch (error) { this.logger.error('创建RTCPeerConnection失败', error); throw error; } } /** * 创建SDP offer * @param peerConnection 对等连接 * @param options offer选项 * @returns Promise<RTCSessionDescriptionInit> */ createOffer(peerConnection, options) { return __awaiter(this, void 0, void 0, function* () { try { const offer = yield peerConnection.createOffer(options); this.logger.debug('创建offer成功', offer); return offer; } catch (error) { this.logger.error('创建offer失败', error); throw error; } }); } /** * 创建SDP answer * @param peerConnection 对等连接 * @param options answer选项 * @returns Promise<RTCSessionDescriptionInit> */ createAnswer(peerConnection, options) { return __awaiter(this, void 0, void 0, function* () { try { const answer = yield peerConnection.createAnswer(options); this.logger.debug('创建answer成功', answer); return answer; } catch (error) { this.logger.error('创建answer失败', error); throw error; } }); } /** * 设置本地描述 * @param peerConnection 对等连接 * @param description 会话描述 * @returns Promise<void> */ setLocalDescription(peerConnection, description) { return __awaiter(this, void 0, void 0, function* () { try { yield peerConnection.setLocalDescription(description); this.logger.debug('设置本地描述成功', description); } catch (error) { this.logger.error('设置本地描述失败', error); throw error; } }); } /** * 设置远程描述 * @param peerConnection 对等连接 * @param description 会话描述 * @returns Promise<void> */ setRemoteDescription(peerConnection, description) { return __awaiter(this, void 0, void 0, function* () { try { yield peerConnection.setRemoteDescription(description); this.logger.debug('设置远程描述成功', description); } catch (error) { this.logger.error('设置远程描述失败', error); throw error; } }); } /** * 添加ICE候选 * @param peerConnection 对等连接 * @param candidate ICE候选 * @returns Promise<void> */ addIceCandidate(peerConnection, candidate) { return __awaiter(this, void 0, void 0, function* () { try { yield peerConnection.addIceCandidate(candidate); this.logger.debug('添加ICE候选成功', candidate); } catch (error) { this.logger.error('添加ICE候选失败', error); throw error; } }); } /** * 获取统计信息 * @param peerConnection 对等连接 * @returns Promise<RTCStatsReport> */ getStats(peerConnection) { return __awaiter(this, void 0, void 0, function* () { try { const stats = yield peerConnection.getStats(); return stats; } catch (error) { this.logger.error('获取统计信息失败', error); throw error; } }); } /** * 关闭对等连接 * @param peerConnection 对等连接 */ closePeerConnection(peerConnection) { try { peerConnection.close(); this.logger.debug('关闭RTCPeerConnection成功'); } catch (error) { this.logger.error('关闭RTCPeerConnection失败', error); } } }