UNPKG

pixelstream-cn

Version:

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

90 lines (87 loc) 3.17 kB
import wsSocket from "./websocket.js" import webRtc from "./webrtc.js" /** * 通过设定信令服务地址和进度条对象 * 获得一个Promise对象 * 在then方法中获取webrtc对象 */ export default class{ constructor(){ this.socket=null; } message(messageHandel){ this.messageHandel=messageHandel; return this; } start(sws,encodeKey,progress){ return new Promise((resolve,reject)=>{ progress.to(10); let rtc = new webRtc(); 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); this.socket.send(offer) }) //设置发送ice数据事件 rtc.setIceCandidateHandel(candidate=>{ 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(){ this.socket.close(); } }