|  |  | 
 |  |  |      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 }); | 
 |  |  |  |