yirtc-sdk-web
Version:
基于WebRTC的实时音视频SDK
164 lines (163 loc) • 5.53 kB
JavaScript
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);
}
}
}