|  |  |  | 
|---|
|  |  |  | WEBRTC_ICE_CANDIDATE_ERROR: 'WEBRTC_ICE_CANDIDATE_ERROR', | 
|---|
|  |  |  | WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED: 'WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED', | 
|---|
|  |  |  | WEBRTC_ON_REMOTE_STREAMS: 'WEBRTC_ON_REMOTE_STREAMS', | 
|---|
|  |  |  | WEBRTC_ON_LOCAL_STREAM: 'WEBRTC_ON_LOCAL_STREAM' | 
|---|
|  |  |  | WEBRTC_ON_LOCAL_STREAM: 'WEBRTC_ON_LOCAL_STREAM', | 
|---|
|  |  |  | WEBRTC_ON_CONNECTION_STATE_CHANGE: 'WEBRTC_ON_CONNECTION_STATE_CHANGE', | 
|---|
|  |  |  | WEBRTC_ON_DATA_CHANNEL_OPEN: 'WEBRTC_ON_DATA_CHANNEL_OPEN', | 
|---|
|  |  |  | WEBRTC_ON_DATA_CHANNEL_CLOSE: 'WEBRTC_ON_DATA_CHANNEL_CLOSE', | 
|---|
|  |  |  | WEBRTC_ON_DATA_CHANNEL_ERR: 'WEBRTC_ON_DATA_CHANNEL_ERR', | 
|---|
|  |  |  | WEBRTC_ON_DATA_CHANNEL_MSG: 'WEBRTC_ON_DATA_CHANNEL_MSG', | 
|---|
|  |  |  | CAPTURE_STREAM_FAILED: 'CAPTURE_STREAM_FAILED' | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const VERSION = '1.0.1'; | 
|---|
|  |  |  | const BUILD_DATE = 'Mon Apr 05 2021 10:22:48 GMT+0800 (中国标准时间)'; | 
|---|
|  |  |  | const BUILD_DATE = 'Thu Mar 24 2022 17:42:57 GMT+0800 (China Standard Time)'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // Copyright (C) <2018> Intel Corporation | 
|---|
|  |  |  | // | 
|---|
|  |  |  | 
|---|
|  |  |  | debug: false, | 
|---|
|  |  |  | // if output debug log | 
|---|
|  |  |  | zlmsdpUrl: '', | 
|---|
|  |  |  | simulecast: false, | 
|---|
|  |  |  | simulcast: false, | 
|---|
|  |  |  | useCamera: true, | 
|---|
|  |  |  | audioEnable: true, | 
|---|
|  |  |  | videoEnable: true, | 
|---|
|  |  |  | recvOnly: false | 
|---|
|  |  |  | recvOnly: false, | 
|---|
|  |  |  | resolution: { | 
|---|
|  |  |  | w: 0, | 
|---|
|  |  |  | h: 0 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | usedatachannel: false | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.options = Object.assign({}, defaults, options); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | this.e = { | 
|---|
|  |  |  | onicecandidate: this._onIceCandidate.bind(this), | 
|---|
|  |  |  | ontrack: this._onTrack.bind(this), | 
|---|
|  |  |  | onicecandidateerror: this._onIceCandidateError.bind(this) | 
|---|
|  |  |  | onicecandidateerror: this._onIceCandidateError.bind(this), | 
|---|
|  |  |  | onconnectionstatechange: this._onconnectionstatechange.bind(this), | 
|---|
|  |  |  | ondatachannelopen: this._onDataChannelOpen.bind(this), | 
|---|
|  |  |  | ondatachannelmsg: this._onDataChannelMsg.bind(this), | 
|---|
|  |  |  | ondatachannelerr: this._onDataChannelErr.bind(this), | 
|---|
|  |  |  | ondatachannelclose: this._onDataChannelClose.bind(this) | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this._remoteStream = null; | 
|---|
|  |  |  | this._localStream = null; | 
|---|
|  |  |  | 
|---|
|  |  |  | this.pc.onicecandidate = this.e.onicecandidate; | 
|---|
|  |  |  | this.pc.onicecandidateerror = this.e.onicecandidateerror; | 
|---|
|  |  |  | this.pc.ontrack = this.e.ontrack; | 
|---|
|  |  |  | this.pc.onconnectionstatechange = this.e.onconnectionstatechange; | 
|---|
|  |  |  | this.datachannel = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (this.options.usedatachannel) { | 
|---|
|  |  |  | this.datachannel = this.pc.createDataChannel('chat'); | 
|---|
|  |  |  | this.datachannel.onclose = this.e.ondatachannelclose; | 
|---|
|  |  |  | this.datachannel.onerror = this.e.ondatachannelerr; | 
|---|
|  |  |  | this.datachannel.onmessage = this.e.ondatachannelmsg; | 
|---|
|  |  |  | this.datachannel.onopen = this.e.ondatachannelopen; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!this.options.recvOnly && (this.options.audioEnable || this.options.videoEnable)) this.start();else this.receive(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (this.options.resolution.w != 0 && this.options.resolution.h != 0 && typeof videoConstraints == 'object') { | 
|---|
|  |  |  | videoConstraints.resolution = new Resolution(this.options.resolution.w, this.options.resolution.h); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MediaStreamFactory.createMediaStream(new StreamConstraints(audioConstraints, videoConstraints)).then(stream => { | 
|---|
|  |  |  | this._localStream = stream; | 
|---|
|  |  |  | this.dispatch(Events$1.WEBRTC_ON_LOCAL_STREAM, stream); | 
|---|
|  |  |  | 
|---|
|  |  |  | sendEncodings: [] | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (this.options.simulecast && stream.getVideoTracks().length > 0) { | 
|---|
|  |  |  | if (this.options.simulcast && stream.getVideoTracks().length > 0) { | 
|---|
|  |  |  | VideoTransceiverInit.sendEncodings = [{ | 
|---|
|  |  |  | rid: 'q', | 
|---|
|  |  |  | active: true, | 
|---|
|  |  |  | scaleResolutionDownBy: 4.0 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | rid: 'h', | 
|---|
|  |  |  | active: true, | 
|---|
|  |  |  | scaleResolutionDownBy: 2.0 | 
|---|
|  |  |  | maxBitrate: 1000000 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | rid: 'f', | 
|---|
|  |  |  | active: true | 
|---|
|  |  |  | rid: 'm', | 
|---|
|  |  |  | active: true, | 
|---|
|  |  |  | maxBitrate: 500000, | 
|---|
|  |  |  | scaleResolutionDownBy: 2 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | rid: 'l', | 
|---|
|  |  |  | active: true, | 
|---|
|  |  |  | maxBitrate: 200000, | 
|---|
|  |  |  | scaleResolutionDownBy: 4 | 
|---|
|  |  |  | }]; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (stream.getAudioTracks().length > 0) { | 
|---|
|  |  |  | this.pc.addTransceiver(stream.getAudioTracks()[0], AudioTransceiverInit); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | AudioTransceiverInit.direction = 'recvonly'; | 
|---|
|  |  |  | this.pc.addTransceiver('audio', AudioTransceiverInit); | 
|---|
|  |  |  | if (this.options.audioEnable) { | 
|---|
|  |  |  | if (stream.getAudioTracks().length > 0) { | 
|---|
|  |  |  | this.pc.addTransceiver(stream.getAudioTracks()[0], AudioTransceiverInit); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | AudioTransceiverInit.direction = 'recvonly'; | 
|---|
|  |  |  | this.pc.addTransceiver('audio', AudioTransceiverInit); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (stream.getVideoTracks().length > 0) { | 
|---|
|  |  |  | this.pc.addTransceiver(stream.getVideoTracks()[0], VideoTransceiverInit); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | VideoTransceiverInit.direction = 'recvonly'; | 
|---|
|  |  |  | this.pc.addTransceiver('video', VideoTransceiverInit); | 
|---|
|  |  |  | if (this.options.videoEnable) { | 
|---|
|  |  |  | if (stream.getVideoTracks().length > 0) { | 
|---|
|  |  |  | this.pc.addTransceiver(stream.getVideoTracks()[0], VideoTransceiverInit); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | VideoTransceiverInit.direction = 'recvonly'; | 
|---|
|  |  |  | this.pc.addTransceiver('video', VideoTransceiverInit); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | stream.getTracks().forEach((track,idx)=>{ | 
|---|
|  |  |  | 
|---|
|  |  |  | error(this.TAG, e); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }).catch(e => { | 
|---|
|  |  |  | error(this.TAG, e); | 
|---|
|  |  |  | this.dispatch(Events$1.CAPTURE_STREAM_FAILED); //debug.error(this.TAG,e); | 
|---|
|  |  |  | }); //const offerOptions = {}; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | 
|---|
|  |  |  | this.dispatch(Events$1.WEBRTC_ICE_CANDIDATE_ERROR, event); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _onconnectionstatechange(event) { | 
|---|
|  |  |  | this.dispatch(Events$1.WEBRTC_ON_CONNECTION_STATE_CHANGE, this.pc.connectionState); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _onDataChannelOpen(event) { | 
|---|
|  |  |  | log(this.TAG, 'ondatachannel open:', event); | 
|---|
|  |  |  | this.dispatch(Events$1.WEBRTC_ON_DATA_CHANNEL_OPEN, event); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _onDataChannelMsg(event) { | 
|---|
|  |  |  | log(this.TAG, 'ondatachannel msg:', event); | 
|---|
|  |  |  | this.dispatch(Events$1.WEBRTC_ON_DATA_CHANNEL_MSG, event); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _onDataChannelErr(event) { | 
|---|
|  |  |  | log(this.TAG, 'ondatachannel err:', event); | 
|---|
|  |  |  | this.dispatch(Events$1.WEBRTC_ON_DATA_CHANNEL_ERR, event); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _onDataChannelClose(event) { | 
|---|
|  |  |  | log(this.TAG, 'ondatachannel close:', event); | 
|---|
|  |  |  | this.dispatch(Events$1.WEBRTC_ON_DATA_CHANNEL_CLOSE, event); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sendMsg(data) { | 
|---|
|  |  |  | if (this.datachannel != null) { | 
|---|
|  |  |  | this.datachannel.send(data); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | error(this.TAG, 'data channel is null'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | closeDataChannel() { | 
|---|
|  |  |  | if (this.datachannel) { | 
|---|
|  |  |  | this.datachannel.close(); | 
|---|
|  |  |  | this.datachannel = null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | close() { | 
|---|
|  |  |  | this.closeDataChannel(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (this.pc) { | 
|---|
|  |  |  | this.pc.close(); | 
|---|
|  |  |  | this.pc = null; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const quickScan = [{ | 
|---|
|  |  |  | 'label': '4K(UHD)', | 
|---|
|  |  |  | 'width': 3840, | 
|---|
|  |  |  | 'height': 2160 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': '1080p(FHD)', | 
|---|
|  |  |  | 'width': 1920, | 
|---|
|  |  |  | 'height': 1080 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': 'UXGA', | 
|---|
|  |  |  | 'width': 1600, | 
|---|
|  |  |  | 'height': 1200, | 
|---|
|  |  |  | 'ratio': '4:3' | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': '720p(HD)', | 
|---|
|  |  |  | 'width': 1280, | 
|---|
|  |  |  | 'height': 720 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': 'SVGA', | 
|---|
|  |  |  | 'width': 800, | 
|---|
|  |  |  | 'height': 600 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': 'VGA', | 
|---|
|  |  |  | 'width': 640, | 
|---|
|  |  |  | 'height': 480 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': '360p(nHD)', | 
|---|
|  |  |  | 'width': 640, | 
|---|
|  |  |  | 'height': 360 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': 'CIF', | 
|---|
|  |  |  | 'width': 352, | 
|---|
|  |  |  | 'height': 288 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': 'QVGA', | 
|---|
|  |  |  | 'width': 320, | 
|---|
|  |  |  | 'height': 240 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': 'QCIF', | 
|---|
|  |  |  | 'width': 176, | 
|---|
|  |  |  | 'height': 144 | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | 'label': 'QQVGA', | 
|---|
|  |  |  | 'width': 160, | 
|---|
|  |  |  | 'height': 120 | 
|---|
|  |  |  | }]; | 
|---|
|  |  |  | function GetSupportCameraResolutions$1() { | 
|---|
|  |  |  | return new Promise(function (resolve, reject) { | 
|---|
|  |  |  | let resolutions = []; | 
|---|
|  |  |  | let ok = 0; | 
|---|
|  |  |  | let err = 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (let i = 0; i < quickScan.length; ++i) { | 
|---|
|  |  |  | let videoConstraints = new VideoTrackConstraints(VideoSourceInfo.CAMERA); | 
|---|
|  |  |  | videoConstraints.resolution = new Resolution(quickScan[i].width, quickScan[i].height); | 
|---|
|  |  |  | MediaStreamFactory.createMediaStream(new StreamConstraints(false, videoConstraints)).then(stream => { | 
|---|
|  |  |  | resolutions.push(quickScan[i]); | 
|---|
|  |  |  | ok++; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (ok + err == quickScan.length) { | 
|---|
|  |  |  | resolve(resolutions); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }).catch(e => { | 
|---|
|  |  |  | err++; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (ok + err == quickScan.length) { | 
|---|
|  |  |  | resolve(resolutions); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | function GetAllScanResolution$1() { | 
|---|
|  |  |  | return quickScan; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | function isSupportResolution$1(w, h) { | 
|---|
|  |  |  | return new Promise(function (resolve, reject) { | 
|---|
|  |  |  | let videoConstraints = new VideoTrackConstraints(VideoSourceInfo.CAMERA); | 
|---|
|  |  |  | videoConstraints.resolution = new Resolution(w, h); | 
|---|
|  |  |  | MediaStreamFactory.createMediaStream(new StreamConstraints(false, videoConstraints)).then(stream => { | 
|---|
|  |  |  | resolve(); | 
|---|
|  |  |  | }).catch(e => { | 
|---|
|  |  |  | reject(e); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | console.log('build date:', BUILD_DATE); | 
|---|
|  |  |  | console.log('version:', VERSION); | 
|---|
|  |  |  | const Events = Events$1; | 
|---|
|  |  |  | const Media = media; | 
|---|
|  |  |  | const Endpoint = RTCEndpoint; | 
|---|
|  |  |  | const GetSupportCameraResolutions = GetSupportCameraResolutions$1; | 
|---|
|  |  |  | const GetAllScanResolution = GetAllScanResolution$1; | 
|---|
|  |  |  | const isSupportResolution = isSupportResolution$1; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | exports.Endpoint = Endpoint; | 
|---|
|  |  |  | exports.Events = Events; | 
|---|
|  |  |  | exports.GetAllScanResolution = GetAllScanResolution; | 
|---|
|  |  |  | exports.GetSupportCameraResolutions = GetSupportCameraResolutions; | 
|---|
|  |  |  | exports.Media = Media; | 
|---|
|  |  |  | exports.isSupportResolution = isSupportResolution; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Object.defineProperty(exports, '__esModule', { value: true }); | 
|---|
|  |  |  |  | 
|---|