|
|
@ -6,11 +6,17 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
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
|
|
|
|
//
|
|
|
@ -7284,11 +7290,16 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
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); |
|
|
|
|
|
|
@ -7299,7 +7310,12 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
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; |
|
|
@ -7307,6 +7323,17 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
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(); |
|
|
|
} |
|
|
|
|
|
|
@ -7337,7 +7364,7 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
let ret = response.data; //JSON.parse(response.data);
|
|
|
|
|
|
|
|
if (ret.code != 0) { |
|
|
|
// mean failed for offer/anwser exchange
|
|
|
|
// mean failed for offer/anwser exchange
|
|
|
|
this.dispatch(Events$1.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED, ret); |
|
|
|
return; |
|
|
|
} |
|
|
@ -7347,7 +7374,7 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
anwser.type = 'answer'; |
|
|
|
log(this.TAG, 'answer:', ret.sdp); |
|
|
|
this.pc.setRemoteDescription(anwser).then(() => { |
|
|
|
log(this.TAG, 'set remote success'); |
|
|
|
log(this.TAG, 'set remote sucess'); |
|
|
|
}).catch(e => { |
|
|
|
error(this.TAG, e); |
|
|
|
}); |
|
|
@ -7377,6 +7404,10 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
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); |
|
|
@ -7389,33 +7420,40 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
sendEncodings: [] |
|
|
|
}; |
|
|
|
|
|
|
|
if (this.options.simulecast && stream.getVideoTracks().length > 0) { |
|
|
|
if (this.options.simulcast && stream.getVideoTracks().length > 0) { |
|
|
|
VideoTransceiverInit.sendEncodings = [{ |
|
|
|
rid: 'q', |
|
|
|
rid: 'h', |
|
|
|
active: true, |
|
|
|
scaleResolutionDownBy: 4.0 |
|
|
|
maxBitrate: 1000000 |
|
|
|
}, { |
|
|
|
rid: 'h', |
|
|
|
rid: 'm', |
|
|
|
active: true, |
|
|
|
scaleResolutionDownBy: 2.0 |
|
|
|
maxBitrate: 500000, |
|
|
|
scaleResolutionDownBy: 2 |
|
|
|
}, { |
|
|
|
rid: 'f', |
|
|
|
active: true |
|
|
|
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)=>{ |
|
|
@ -7440,7 +7478,7 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
let ret = response.data; //JSON.parse(response.data);
|
|
|
|
|
|
|
|
if (ret.code != 0) { |
|
|
|
// mean failed for offer/anwser exchange
|
|
|
|
// mean failed for offer/anwser exchange
|
|
|
|
this.dispatch(Events$1.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED, ret); |
|
|
|
return; |
|
|
|
} |
|
|
@ -7450,7 +7488,7 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
anwser.type = 'answer'; |
|
|
|
log(this.TAG, 'answer:', ret.sdp); |
|
|
|
this.pc.setRemoteDescription(anwser).then(() => { |
|
|
|
log(this.TAG, 'set remote success'); |
|
|
|
log(this.TAG, 'set remote sucess'); |
|
|
|
}).catch(e => { |
|
|
|
error(this.TAG, e); |
|
|
|
}); |
|
|
@ -7460,7 +7498,7 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
error(this.TAG, e); |
|
|
|
}); |
|
|
|
}).catch(e => { |
|
|
|
error(this.TAG, e); |
|
|
|
this.dispatch(Events$1.CAPTURE_STREAM_FAILED); //debug.error(this.TAG,e);
|
|
|
|
}); //const offerOptions = {};
|
|
|
|
|
|
|
|
/* |
|
|
@ -7495,7 +7533,48 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
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; |
|
|
@ -7528,15 +7607,108 @@ var ZLMRTCClient = (function (exports) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
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 }); |
|
|
|
|
|
|
|