UNPKG

pixelstream-cn

Version:

基于虚幻引擎的像素流平台

103 lines (100 loc) 3.52 kB
import wsSocket from "./websocket.js"; import webRtc from "./webrtc.js"; /** * 通过设定信令服务地址和进度条对象 * 获得一个Promise对象 * 在then方法中获取webrtc对象 */ export default class{ constructor(){ this.socket=null; this.rtc=null; } message(messageHandel){ this.messageHandel=messageHandel; return this; } start(sws,encodeKey,progress){ return new Promise((resolve,reject)=>{ progress.to(10); let rtc = new webRtc(); this.rtc = rtc; rtc.setDataChannelOpenHandel(e=>{ progress.to(90); console.log("data channel open success"); resolve(rtc); }) rtc.setDataChannelCloseHandel(e=>{ console.log("data channel close"); }) this.socket = new wsSocket(); this.socket.setMessageError(message=>{ if(this.messageHandel && this.messageHandel.errorHandel){ this.messageHandel.errorHandel(message); } progress.error(message); reject(message); }); this.socket.setMessageWait(num=>{ if(this.messageHandel && this.messageHandel.waitHandel){ this.messageHandel.waitHandel(num); } progress.wait(num); }); this.socket.setMessageConfig(async msg=>{ progress.to(20); let config = msg.peerConnectionOptions //If this is true in Chrome 89+ SDP is sent that is incompatible with UE WebRTC and breaks. config.offerExtmapAllowMixed = false; config.sdpSemantics = 'unified-plan' let offer = await rtc.init(config); if(this.socket){ this.socket.send(offer) } }) //设置发送ice数据事件 rtc.setIceCandidateHandel(candidate=>{ if(this.socket){ this.socket.send({ type: 'iceCandidate', candidate: candidate, }) } }) //设置websocket获取sdp answer处理事件 this.socket.setMessageAnswer(answer=>{ progress.to(50); rtc.setAnswer(answer); }) //设置websocket获取ice处理事件 this.socket.setMessageIceCandidate(msg=>{ rtc.setIceCandidate(msg.candidate); }) rtc.setSpeedHandel(speed=>{ if(this.messageHandel && this.messageHandel.errorHandel){ this.messageHandel.speedHandel(speed); } // socket.send({ // type: 'speed', // speed: speed, // }) }) try { this.socket.setHost(sws).setEncodeKey(encodeKey).run(); } catch (error) { reject("信令服务连接失败") return ; } }); } close(){ if(this.socket){ this.socket.close(); this.socket=null; } if(this.rtc){ this.rtc.close(); this.rtc=null; } } }