From c0c377bec02b4e3b6e5b406b4a24fba0aecd0379 Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 20 Apr 2026 11:42:00 -0400 Subject: [PATCH 01/13] Update adc_microphone.js removed the iPad skip use supported audio MIME types instead of forcing audio/mpeg, saving/uploading with the real file extension instead of always .mpeg. --- resources/static/adc_microphone.js | 316 +++++++++++++++++++++++------ 1 file changed, 250 insertions(+), 66 deletions(-) diff --git a/resources/static/adc_microphone.js b/resources/static/adc_microphone.js index d9de636..130c07b 100644 --- a/resources/static/adc_microphone.js +++ b/resources/static/adc_microphone.js @@ -1,3 +1,107 @@ +var audioRecorder; + +/* +* Helper: return a supported audio mime type for this browser +*/ +function getSupportedAudioMimeType() { + if (typeof MediaRecorder === "undefined" || !MediaRecorder.isTypeSupported) { + return ""; + } + + var mimeTypes = [ + "audio/webm;codecs=opus", + "audio/webm", + "audio/mp4", + "audio/ogg;codecs=opus", + "audio/ogg" + ]; + + for (var i = 0; i < mimeTypes.length; i++) { + if (MediaRecorder.isTypeSupported(mimeTypes[i])) { + return mimeTypes[i]; + } + } + + return ""; +} + +/* +* Helper: map mime type to file extension +*/ +function getAudioFileExtension(blob) { + if (!blob || !blob.type) { + return "webm"; + } + + var mimeType = blob.type.toLowerCase(); + + if (mimeType.indexOf("webm") > -1) { + return "webm"; + } + if (mimeType.indexOf("mp4") > -1 || mimeType.indexOf("aac") > -1 || mimeType.indexOf("mpeg") > -1) { + return "mp4"; + } + if (mimeType.indexOf("ogg") > -1) { + return "ogg"; + } + if (mimeType.indexOf("wav") > -1) { + return "wav"; + } + + return "webm"; +} + +/* +* Helper: return a filename for the current audio blob +*/ +function getAudioFileName(blob, baseName) { + return (baseName || "my_audio") + "." + getAudioFileExtension(blob); +} + +/* +* Helper: safely set srcObject for media elements +*/ +function setSrcObject(stream, element) { + if ("srcObject" in element) { + element.srcObject = stream; + } else { + element.src = window.URL.createObjectURL(stream); + } +} + +/* +* Helper: safely clear live stream from player +*/ +function clearPlayerSource(player) { + try { + player.pause(); + } catch (e) {} + + if ("srcObject" in player && player.srcObject) { + player.srcObject = null; + } + + player.removeAttribute("src"); + + try { + player.load(); + } catch (e) {} +} + +/* +* Helper: stop all tracks on a stream +*/ +function stopStreamTracks(stream) { + if (!stream || !stream.getTracks) { + return; + } + + var tracks = stream.getTracks(); + for (var i = 0; i < tracks.length; i++) { + tracks[i].stop(); + } +} + function showOverlay(instanceId){ removeClass(getElementByDynamicId("overlay_loader", instanceId),'hidden'); } @@ -7,24 +111,23 @@ function hideOverlay(instanceId){ } /* -* Upload the captured photo on the server +* Upload the captured audio on the server * @param {Integer} instanceId ID of the current adc */ function uploadAudio(instanceId){ - hideErrorMessage(instanceId); + hideErrorMessage(instanceId); hideSuccessMessage(instanceId); if (!uploadConfig(instanceId).apiKey || !uploadConfig(instanceId).secretKey) { - displayErrorMessage(uploadConfig(instanceId).ErrMsgInvalidApiSecretKeys, instanceId); + displayErrorMessage(uploadConfig(instanceId).ErrMsgInvalidApiSecretKeys, instanceId); return; } - if(audioRecorder != undefined){ // if audio has been recorded - var audioBlob; - audioBlob = audioRecorder.blob; + if(audioRecorder != undefined && audioRecorder.blob){ // if audio has been recorded + var audioBlob = audioRecorder.blob; if(validFileSize(instanceId, audioBlob)){ generateNewToken(function(token){ - uploadConfig(instanceId).token=token; + uploadConfig(instanceId).token = token; sendFileTransferCall(instanceId, audioBlob); }, instanceId); } @@ -76,19 +179,17 @@ function generateNewToken(callback, instanceId) { hideOverlay(instanceId); displayErrorMessage(uploadConfig(instanceId).ErrMsgInvalidApiSecretKeys, instanceId); }; - var generateTokenBeforeSend=function(){ + var generateTokenBeforeSend = function(){ showOverlay(instanceId); }; - sendAjaxPostCall(url, data, true, generateTokenSuccess, generateTokenError,generateTokenBeforeSend); - + sendAjaxPostCall(url, data, true, generateTokenSuccess, generateTokenError, generateTokenBeforeSend); } /* * Generates right url, success and error callbacks and transfers it to sendAjaxPostCall function * @param {Integer} instanceId ID of the current adc * @param {Data} fileData Data from the current file -* @param {String} type Type of file (video or photo) */ function sendFileTransferCall(instanceId, fileData) { if(!uploadConfig(instanceId).token){ @@ -97,8 +198,7 @@ function sendFileTransferCall(instanceId, fileData) { } var projectName = uploadConfig(instanceId).ausProjectName; - //var fileData = getElementByDynamicId("adc_uploader", instanceId).files[0]; - var fileDataName = "file-name.mpeg"; + var fileDataName = getAudioFileName(fileData, "file-name"); var shortcut = uploadConfig(instanceId).shortcut; var seed = uploadConfig(instanceId).seedvalue; var guid = uploadConfig(instanceId).guidstring; @@ -107,15 +207,15 @@ function sendFileTransferCall(instanceId, fileData) { if (guid.charAt(0) == "{") guid = guid.substr(1); if (guid.charAt(guid.length - 1) == "}") guid = guid.substr(0, guid.length - 1); - var url=uploadConfig(instanceId).uploadUrl + "?tokenkey=" + uploadConfig(instanceId).token + "&filename=" + fileDataName - + "&projectname=" + projectName + "&shortcut=" + shortcut + "&seed=" + seed + "&guid=" + guid; + var url = uploadConfig(instanceId).uploadUrl + "?tokenkey=" + uploadConfig(instanceId).token + "&filename=" + encodeURIComponent(fileDataName) + + "&projectname=" + encodeURIComponent(projectName) + "&shortcut=" + encodeURIComponent(shortcut) + "&seed=" + encodeURIComponent(seed) + "&guid=" + encodeURIComponent(guid); var uploadSuccessCallback = function (response) { - getElementByDynamicId("HidResult", instanceId).value=response.DestinationFileName; + getElementByDynamicId("HidResult", instanceId).value = response.DestinationFileName; displaySuccessMessage(uploadConfig(instanceId).SuccessMsgUpload, uploadConfig(instanceId).SuccessMsgColor, instanceId); hideOverlay(instanceId); if (uploadConfig(instanceId).disabledUploadBtn == 1) { - disableUploadBtn(instanceId); + disableUploadBtn(instanceId); } if (uploadConfig(instanceId).AutoSubmitAfterUpload == 1) { document.getElementsByTagName("form")[0].submit(); @@ -125,14 +225,14 @@ function sendFileTransferCall(instanceId, fileData) { } } }; + var uploadErrorCallback = function (error) { - getElementByDynamicId("HidResult", instanceId).value=''; + getElementByDynamicId("HidResult", instanceId).value = ''; displayErrorMessage(uploadConfig(instanceId).ErrMsgErrorAtUpload, instanceId); hideOverlay(instanceId); }; sendAjaxPostCall(url, fileData, false, uploadSuccessCallback, uploadErrorCallback); - } /* @@ -144,9 +244,10 @@ function sendFileTransferCall(instanceId, fileData) { * @param {Function} errorCallback Function to execute after unsuccessful request * @param {Function} beforeSend Function to execute before sending request (optional) */ -function sendAjaxPostCall(url, data, isJsonRequest, successCallback, errorCallback,beforeSend) { +function sendAjaxPostCall(url, data, isJsonRequest, successCallback, errorCallback, beforeSend) { var http = new XMLHttpRequest(); http.open("POST", url, true); + if (isJsonRequest) { http.setRequestHeader("Content-type", "application/json"); data = JSON.stringify(data); @@ -154,18 +255,26 @@ function sendAjaxPostCall(url, data, isJsonRequest, successCallback, errorCallba http.onreadystatechange = function () { if (http.readyState == 4) { + var response = null; + + try { + response = JSON.parse(http.responseText); + } catch (e) { + response = http.responseText; + } + if (http.status == 200) { - var response = JSON.parse(http.responseText); successCallback(response); } else { - var response = JSON.parse(http.responseText); errorCallback(response); } } - } + }; + if(beforeSend){ beforeSend(); } + http.send(data); } @@ -175,7 +284,7 @@ function sendAjaxPostCall(url, data, isJsonRequest, successCallback, errorCallba * @param {String} cls A class */ function hasClass(ele,cls) { - return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')); + return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')); } /* @@ -185,8 +294,8 @@ function hasClass(ele,cls) { */ function removeClass(ele,cls) { if (hasClass(ele,cls)) { - var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)'); - ele.className=ele.className.replace(reg,' '); + var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)'); + ele.className = ele.className.replace(reg,' '); } } @@ -197,7 +306,7 @@ function removeClass(ele,cls) { */ function addClass(ele,cls) { if (!hasClass(ele,cls)) { - ele.className += ' '+ cls; + ele.className += ' ' + cls; } } @@ -227,7 +336,7 @@ function displayErrorMessage(message, instanceId){ function displaySuccessMessage(message, colorcode, instanceId){ hideOverlay(instanceId); var div = getElementByDynamicId("adc-succdiv", instanceId); - div.style.backgroundColor= 'rgb(' + colorcode + ')'; + div.style.backgroundColor = 'rgb(' + colorcode + ')'; div.style.color = 'white'; div.style.width = '100%'; div.style.paddingTop = '15px'; @@ -304,7 +413,7 @@ function getElementByDynamicId(elementId, instanceId) { * @param {Integer} instanceId ID of the current adc */ function uploadConfig(instanceId) { - return eval('uploadConfig_' + instanceId); + return eval('uploadConfig_' + instanceId); } /* @@ -322,70 +431,134 @@ function activateBtnUpload(instanceId) { * @param {Integer} instanceId ID of the current adc */ function startRecordingAudio(instanceId) { - document.getElementById('btn-start-recording').disabled = true; + hideErrorMessage(instanceId); + hideSuccessMessage(instanceId); + + var startBtn = document.getElementById('btn-start-recording'); + var stopBtn = document.getElementById('btn-stop-recording'); var player = document.getElementById('player'); + var btnSave = getElementByDynamicId("btnSave", instanceId); + + startBtn.disabled = true; + stopBtn.disabled = true; + if (uploadConfig(instanceId).allowUploadFileChange == 1) { enableUploadBtn(instanceId); } + + if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) { + displayErrorMessage(uploadConfig(instanceId).ErrMsgUserMediaAccess, instanceId); + startBtn.disabled = false; + return; + } + navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(function(stream) { + clearPlayerSource(player); setSrcObject(stream, player); - if (!navigator.userAgent.toUpperCase().includes("IPAD")) { - player.play(); - player.muted = true; - audioRecorder = new RecordRTCPromisesHandler(stream, { - mimeType: 'audio/mpeg', - type: 'audio', - audioBitsPerSecond: 128000 - }); - audioRecorder.startRecording().then(function() { - console.info('Recording audio ...'); - }).catch(function(error) { - displayErrorMessage(uploadConfig(instanceId).ErrMsgStartRec, instanceId); - console.error('Cannot start audio recording: ', error); + player.muted = true; + + var recorderOptions = { + type: 'audio', + audioBitsPerSecond: 128000 + }; + + var supportedMimeType = getSupportedAudioMimeType(); + if (supportedMimeType) { + recorderOptions.mimeType = supportedMimeType; + } + + audioRecorder = new RecordRTCPromisesHandler(stream, recorderOptions); + audioRecorder.stream = stream; + + var playPromise; + try { + playPromise = player.play(); + } catch (e) {} + + if (playPromise && typeof playPromise.catch === "function") { + playPromise.catch(function() { + // Ignore autoplay failures for live preview }); - audioRecorder.stream = stream; } - document.getElementById('btn-stop-recording').disabled = false; + + return audioRecorder.startRecording(); + }).then(function() { + console.info('Recording audio ...'); + stopBtn.disabled = false; }).catch(function(error) { - displayErrorMessage(uploadConfig(instanceId).ErrMsgUserMediaAccess, instanceId); - console.error("Cannot access media devices: ", error); + displayErrorMessage(uploadConfig(instanceId).ErrMsgStartRec || uploadConfig(instanceId).ErrMsgUserMediaAccess, instanceId); + console.error('Cannot start audio recording: ', error); + + if (audioRecorder && audioRecorder.stream) { + stopStreamTracks(audioRecorder.stream); + } + + audioRecorder = undefined; + startBtn.disabled = false; + stopBtn.disabled = true; }); + removeClass(document.getElementById("label-start"), "primary"); addClass(document.getElementById("label-stop"), "primary"); removeClass(player, "saved"); - var btnSave = getElementByDynamicId("btnSave",instanceId); - if(btnSave){ + + if (btnSave) { btnSave.disabled = false; } - } +} /* -* Stop the audio recording, diplays the recorded audio on screen and stores the audio in audioRecorder variable +* Stop the audio recording, displays the recorded audio on screen and stores the audio in audioRecorder variable * @param {Integer} instanceId ID of the current adc */ function stopRecordingAudio(instanceId) { removeClass(document.getElementById("label-stop"), "primary"); addClass(document.getElementById("label-start"), "primary"); - document.getElementById('btn-stop-recording').disabled = true; + + var startBtn = document.getElementById('btn-start-recording'); + var stopBtn = document.getElementById('btn-stop-recording'); var player = document.getElementById('player'); + + stopBtn.disabled = true; + + if (!audioRecorder) { + displayErrorMessage(uploadConfig(instanceId).ErrMsgStopRec, instanceId); + startBtn.disabled = false; + return; + } + audioRecorder.stopRecording().then(function() { console.info('stopRecording success'); - // Now RecordRTCPromisesHandler function returns a promise with a blob as the promise value. + clearPlayerSource(player); + player.src = URL.createObjectURL(audioRecorder.blob); + player.muted = false; - if (!navigator.userAgent.toUpperCase().includes("IPAD")) { - player.play(); - player.muted = false; + try { + player.load(); + } catch (e) {} + + var playPromise; + try { + playPromise = player.play(); + } catch (e) {} + + if (playPromise && typeof playPromise.catch === "function") { + playPromise.catch(function() { + // Ignore autoplay failures on playback + }); } - audioRecorder.stream.stop(); - document.getElementById('btn-start-recording').disabled = false; + + stopStreamTracks(audioRecorder.stream); + startBtn.disabled = false; }).catch(function(error) { displayErrorMessage(uploadConfig(instanceId).ErrMsgStopRec, instanceId); console.log("Stop recording error:", error); + startBtn.disabled = false; }); } @@ -396,27 +569,38 @@ function stopRecordingAudio(instanceId) { function saveAudio(instanceId) { hideErrorMessage(instanceId); hideSuccessMessage(instanceId); + var player = document.getElementById("player"); + if (!hasClass(player, "saved")) { - if(audioRecorder != undefined){ // if audio has been recorded - if (window.navigator.msSaveOrOpenBlob) { // Edge - window.navigator.msSaveOrOpenBlob(audioRecorder.blob, "my_audio.mpeg"); + if(audioRecorder != undefined && audioRecorder.blob){ // if audio has been recorded + var fileName = getAudioFileName(audioRecorder.blob, "my_audio"); + + if (window.navigator.msSaveOrOpenBlob) { // Legacy Edge / IE + window.navigator.msSaveOrOpenBlob(audioRecorder.blob, fileName); } else { // Others var a = document.createElement("a"); - a.href = player.src; - a.download = "my_audio.mpeg"; + var objectUrl = player.src; + + if (!objectUrl) { + objectUrl = URL.createObjectURL(audioRecorder.blob); + } + + a.href = objectUrl; + a.download = fileName; document.body.appendChild(a); a.click(); + setTimeout(function() { document.body.removeChild(a); - window.URL.revokeObjectURL(player.src); }, 0); } + addClass(player, "saved"); getElementByDynamicId("btnSave", instanceId).disabled = true; displaySuccessMessage(uploadConfig(instanceId).SuccessMsgSave, uploadConfig(instanceId).SuccessMsgColor, instanceId); - } else{ + } else { displayErrorMessage(uploadConfig(instanceId).ErrMsgSave, instanceId); } } -} +} \ No newline at end of file From 54bc3451468782b4455a4ce74b7d91fb5bd9b14b Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 20 Apr 2026 11:52:03 -0400 Subject: [PATCH 02/13] generate 2.0 bin changed version number and date in config --- bin/Microphone.adc | Bin 112691 -> 88839 bytes config.xml | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/Microphone.adc b/bin/Microphone.adc index 083864c71fd90b21f86a2d83666aa9fff099b110..a939bc0834199f2d5ba8fd0cb94db02ae3af139b 100644 GIT binary patch literal 88839 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 +
+
- - -
- + + + + +
+ +
+ {%if allowSaveFile then%} - + {%EndIf%} - - - + + + + + + \ No newline at end of file diff --git a/resources/static/adc_microphone.js b/resources/static/adc_microphone.js index 130c07b..2bd1028 100644 --- a/resources/static/adc_microphone.js +++ b/resources/static/adc_microphone.js @@ -70,7 +70,7 @@ function setSrcObject(stream, element) { } /* -* Helper: safely clear live stream from player +* Helper: safely clear live stream / source from player */ function clearPlayerSource(player) { try { @@ -98,16 +98,18 @@ function stopStreamTracks(stream) { var tracks = stream.getTracks(); for (var i = 0; i < tracks.length; i++) { - tracks[i].stop(); + try { + tracks[i].stop(); + } catch (e) {} } } function showOverlay(instanceId){ - removeClass(getElementByDynamicId("overlay_loader", instanceId),'hidden'); + removeClass(getElementByDynamicId("overlay_loader", instanceId), 'hidden'); } function hideOverlay(instanceId){ - addClass(getElementByDynamicId("overlay_loader", instanceId),'hidden'); + addClass(getElementByDynamicId("overlay_loader", instanceId), 'hidden'); } /* @@ -123,19 +125,17 @@ function uploadAudio(instanceId){ return; } - if(audioRecorder != undefined && audioRecorder.blob){ // if audio has been recorded + if (audioRecorder != undefined && audioRecorder.blob) { var audioBlob = audioRecorder.blob; - if(validFileSize(instanceId, audioBlob)){ + if (validFileSize(instanceId, audioBlob)) { generateNewToken(function(token){ uploadConfig(instanceId).token = token; sendFileTransferCall(instanceId, audioBlob); }, instanceId); - } - else{ + } else { displayErrorMessage(uploadConfig(instanceId).ErrMsgFileSizeExceeded, instanceId); } - } - else{ + } else { displayErrorMessage(uploadConfig(instanceId).ErrMsgSelectFile, instanceId); } } @@ -148,6 +148,7 @@ function uploadAudio(instanceId){ function validFileSize(instanceId, fileData){ var filesize = 0; var maxsize = uploadConfig(instanceId).maxfilesize; + if (fileData) { filesize = fileData.size / 1024; } @@ -164,7 +165,6 @@ function validFileSize(instanceId, fileData){ * @param {Integer} instanceId ID of the current adc */ function generateNewToken(callback, instanceId) { - var data = { ApiKey: uploadConfig(instanceId).apiKey, SecretKey: uploadConfig(instanceId).secretKey @@ -175,10 +175,12 @@ function generateNewToken(callback, instanceId) { var generateTokenSuccess = function (token) { callback(token); }; - var generateTokenError = function (error) { + + var generateTokenError = function () { hideOverlay(instanceId); displayErrorMessage(uploadConfig(instanceId).ErrMsgInvalidApiSecretKeys, instanceId); }; + var generateTokenBeforeSend = function(){ showOverlay(instanceId); }; @@ -192,7 +194,7 @@ function generateNewToken(callback, instanceId) { * @param {Data} fileData Data from the current file */ function sendFileTransferCall(instanceId, fileData) { - if(!uploadConfig(instanceId).token){ + if (!uploadConfig(instanceId).token) { displayErrorMessage(uploadConfig(instanceId).ErrMsgToken, instanceId); return; } @@ -207,26 +209,31 @@ function sendFileTransferCall(instanceId, fileData) { if (guid.charAt(0) == "{") guid = guid.substr(1); if (guid.charAt(guid.length - 1) == "}") guid = guid.substr(0, guid.length - 1); - var url = uploadConfig(instanceId).uploadUrl + "?tokenkey=" + uploadConfig(instanceId).token + "&filename=" + encodeURIComponent(fileDataName) - + "&projectname=" + encodeURIComponent(projectName) + "&shortcut=" + encodeURIComponent(shortcut) + "&seed=" + encodeURIComponent(seed) + "&guid=" + encodeURIComponent(guid); + var url = uploadConfig(instanceId).uploadUrl + + "?tokenkey=" + encodeURIComponent(uploadConfig(instanceId).token) + + "&filename=" + encodeURIComponent(fileDataName) + + "&projectname=" + encodeURIComponent(projectName) + + "&shortcut=" + encodeURIComponent(shortcut) + + "&seed=" + encodeURIComponent(seed) + + "&guid=" + encodeURIComponent(guid); var uploadSuccessCallback = function (response) { getElementByDynamicId("HidResult", instanceId).value = response.DestinationFileName; displaySuccessMessage(uploadConfig(instanceId).SuccessMsgUpload, uploadConfig(instanceId).SuccessMsgColor, instanceId); hideOverlay(instanceId); + if (uploadConfig(instanceId).disabledUploadBtn == 1) { disableUploadBtn(instanceId); } + if (uploadConfig(instanceId).AutoSubmitAfterUpload == 1) { document.getElementsByTagName("form")[0].submit(); - } else { - if (uploadConfig(instanceId).EnabledNextAfterUpload == 1) { - document.getElementsByName("Next")[0].hidden = false; - } + } else if (uploadConfig(instanceId).EnabledNextAfterUpload == 1) { + document.getElementsByName("Next")[0].hidden = false; } }; - var uploadErrorCallback = function (error) { + var uploadErrorCallback = function () { getElementByDynamicId("HidResult", instanceId).value = ''; displayErrorMessage(uploadConfig(instanceId).ErrMsgErrorAtUpload, instanceId); hideOverlay(instanceId); @@ -271,7 +278,7 @@ function sendAjaxPostCall(url, data, isJsonRequest, successCallback, errorCallba } }; - if(beforeSend){ + if (beforeSend) { beforeSend(); } @@ -283,7 +290,7 @@ function sendAjaxPostCall(url, data, isJsonRequest, successCallback, errorCallba * @param {HTMLElement} ele Element from the HTML * @param {String} cls A class */ -function hasClass(ele,cls) { +function hasClass(ele, cls) { return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')); } @@ -292,10 +299,10 @@ function hasClass(ele,cls) { * @param {HTML Element} ele Element from the HTML * @param {String} cls A class */ -function removeClass(ele,cls) { - if (hasClass(ele,cls)) { +function removeClass(ele, cls) { + if (hasClass(ele, cls)) { var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)'); - ele.className = ele.className.replace(reg,' '); + ele.className = ele.className.replace(reg, ' '); } } @@ -304,8 +311,8 @@ function removeClass(ele,cls) { * @param {HTML Element} ele Element from the HTML * @param {String} cls A class */ -function addClass(ele,cls) { - if (!hasClass(ele,cls)) { +function addClass(ele, cls) { + if (!hasClass(ele, cls)) { ele.className += ' ' + cls; } } @@ -313,15 +320,17 @@ function addClass(ele,cls) { /* * Displays an error message * @param {String} message The message to display -* @parem {Integer} instanceId ID of the current adc +* @param {Integer} instanceId ID of the current adc */ function displayErrorMessage(message, instanceId){ hideOverlay(instanceId); var div = getElementByDynamicId("adc-errdiv", instanceId); addClass(div, "askia-errors-summary"); div.style.marginBottom = "50px"; + var ul = getElementByDynamicId("ulErrorMessages", instanceId); ul.innerHTML = ""; + var li = document.createElement("li"); li.appendChild(document.createTextNode(message)); ul.appendChild(li); @@ -343,6 +352,7 @@ function displaySuccessMessage(message, colorcode, instanceId){ div.style.paddingBottom = '15px'; div.style.marginBottom = '50px'; div.style.borderRadius = '3px'; + var span = getElementByDynamicId("spanSuccessMessage", instanceId); span.innerHTML = message; } @@ -353,14 +363,16 @@ function displaySuccessMessage(message, colorcode, instanceId){ */ function disableUploadBtn(instanceId) { var btn = getElementByDynamicId("btnUpload", instanceId); + if (btn.hasAttribute("disabled")) { - btn.setAttribute("disabled","disabled"); + btn.setAttribute("disabled", "disabled"); } else { var att = document.createAttribute("disabled"); att.value = "disabled"; btn.setAttributeNode(att); } - addClass(btn,"disabled"); + + addClass(btn, "disabled"); btn.style.cursor = "not-allowed"; } @@ -370,10 +382,12 @@ function disableUploadBtn(instanceId) { */ function enableUploadBtn(instanceId) { var btn = getElementByDynamicId("btnUpload", instanceId); + if (btn.hasAttribute("disabled")) { btn.removeAttribute("disabled"); } - removeClass(btn,"disabled"); + + removeClass(btn, "disabled"); btn.style.cursor = "pointer"; } @@ -384,6 +398,7 @@ function enableUploadBtn(instanceId) { function hideSuccessMessage(instanceId) { var div = getElementByDynamicId("adc-succdiv", instanceId); div.removeAttribute("style"); + var span = getElementByDynamicId("spanSuccessMessage", instanceId); span.innerHTML = ""; } @@ -396,6 +411,7 @@ function hideErrorMessage(instanceId){ var div = getElementByDynamicId("adc-errdiv", instanceId); removeClass(div, "askia-errors-summary"); div.removeAttribute("style"); + var ul = getElementByDynamicId("ulErrorMessages", instanceId); ul.innerHTML = ""; } @@ -427,16 +443,16 @@ function activateBtnUpload(instanceId) { } /* -* Start the record of audio, displays the stream on screen, storing the stream in audioRecorder variable +* Start the recording of audio * @param {Integer} instanceId ID of the current adc */ function startRecordingAudio(instanceId) { hideErrorMessage(instanceId); hideSuccessMessage(instanceId); - var startBtn = document.getElementById('btn-start-recording'); - var stopBtn = document.getElementById('btn-stop-recording'); - var player = document.getElementById('player'); + var startBtn = getElementByDynamicId("btn-start-recording", instanceId); + var stopBtn = getElementByDynamicId("btn-stop-recording", instanceId); + var player = getElementByDynamicId("player", instanceId); var btnSave = getElementByDynamicId("btnSave", instanceId); startBtn.disabled = true; @@ -461,7 +477,7 @@ function startRecordingAudio(instanceId) { player.muted = true; var recorderOptions = { - type: 'audio', + type: "audio", audioBitsPerSecond: 128000 }; @@ -480,17 +496,16 @@ function startRecordingAudio(instanceId) { if (playPromise && typeof playPromise.catch === "function") { playPromise.catch(function() { - // Ignore autoplay failures for live preview + // ignore autoplay failures for live preview }); } return audioRecorder.startRecording(); }).then(function() { - console.info('Recording audio ...'); + console.info("Recording audio ..."); stopBtn.disabled = false; }).catch(function(error) { - displayErrorMessage(uploadConfig(instanceId).ErrMsgStartRec || uploadConfig(instanceId).ErrMsgUserMediaAccess, instanceId); - console.error('Cannot start audio recording: ', error); + console.error("Cannot start audio recording: ", error); if (audioRecorder && audioRecorder.stream) { stopStreamTracks(audioRecorder.stream); @@ -499,10 +514,10 @@ function startRecordingAudio(instanceId) { audioRecorder = undefined; startBtn.disabled = false; stopBtn.disabled = true; + + displayErrorMessage(uploadConfig(instanceId).ErrMsgStartRec || uploadConfig(instanceId).ErrMsgUserMediaAccess, instanceId); }); - removeClass(document.getElementById("label-start"), "primary"); - addClass(document.getElementById("label-stop"), "primary"); removeClass(player, "saved"); if (btnSave) { @@ -511,16 +526,13 @@ function startRecordingAudio(instanceId) { } /* -* Stop the audio recording, displays the recorded audio on screen and stores the audio in audioRecorder variable +* Stop the audio recording, display the recorded audio, and free the stream * @param {Integer} instanceId ID of the current adc */ function stopRecordingAudio(instanceId) { - removeClass(document.getElementById("label-stop"), "primary"); - addClass(document.getElementById("label-start"), "primary"); - - var startBtn = document.getElementById('btn-start-recording'); - var stopBtn = document.getElementById('btn-stop-recording'); - var player = document.getElementById('player'); + var startBtn = getElementByDynamicId("btn-start-recording", instanceId); + var stopBtn = getElementByDynamicId("btn-stop-recording", instanceId); + var player = getElementByDynamicId("player", instanceId); stopBtn.disabled = true; @@ -531,10 +543,14 @@ function stopRecordingAudio(instanceId) { } audioRecorder.stopRecording().then(function() { - console.info('stopRecording success'); + console.info("stopRecording success"); clearPlayerSource(player); + if (!audioRecorder.blob) { + throw "Empty blob."; + } + player.src = URL.createObjectURL(audioRecorder.blob); player.muted = false; @@ -549,16 +565,17 @@ function stopRecordingAudio(instanceId) { if (playPromise && typeof playPromise.catch === "function") { playPromise.catch(function() { - // Ignore autoplay failures on playback + // ignore autoplay failures on playback }); } stopStreamTracks(audioRecorder.stream); startBtn.disabled = false; }).catch(function(error) { - displayErrorMessage(uploadConfig(instanceId).ErrMsgStopRec, instanceId); console.log("Stop recording error:", error); + stopStreamTracks(audioRecorder && audioRecorder.stream ? audioRecorder.stream : null); startBtn.disabled = false; + displayErrorMessage(uploadConfig(instanceId).ErrMsgStopRec, instanceId); }); } @@ -570,15 +587,15 @@ function saveAudio(instanceId) { hideErrorMessage(instanceId); hideSuccessMessage(instanceId); - var player = document.getElementById("player"); + var player = getElementByDynamicId("player", instanceId); if (!hasClass(player, "saved")) { - if(audioRecorder != undefined && audioRecorder.blob){ // if audio has been recorded + if (audioRecorder != undefined && audioRecorder.blob) { var fileName = getAudioFileName(audioRecorder.blob, "my_audio"); - if (window.navigator.msSaveOrOpenBlob) { // Legacy Edge / IE + if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveOrOpenBlob(audioRecorder.blob, fileName); - } else { // Others + } else { var a = document.createElement("a"); var objectUrl = player.src; @@ -597,7 +614,12 @@ function saveAudio(instanceId) { } addClass(player, "saved"); - getElementByDynamicId("btnSave", instanceId).disabled = true; + + var saveBtn = getElementByDynamicId("btnSave", instanceId); + if (saveBtn) { + saveBtn.disabled = true; + } + displaySuccessMessage(uploadConfig(instanceId).SuccessMsgSave, uploadConfig(instanceId).SuccessMsgColor, instanceId); } else { displayErrorMessage(uploadConfig(instanceId).ErrMsgSave, instanceId); From 7c6baa0b4bb8f4fea48804b63b508fc70086490e Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 20 Apr 2026 12:36:15 -0400 Subject: [PATCH 04/13] update RecordRTC library --- .adxstudio/workspace.json | 2 +- bin/Microphone.adc | Bin 88839 -> 89023 bytes resources/static/RecordRTC.js | 121 +++++++++++++++++++++++----------- 3 files changed, 85 insertions(+), 38 deletions(-) diff --git a/.adxstudio/workspace.json b/.adxstudio/workspace.json index f895eb3..14d5bf1 100644 --- a/.adxstudio/workspace.json +++ b/.adxstudio/workspace.json @@ -1 +1 @@ -{"tabs":[{"id":"38de036d-07f0-462b-be8f-63dc5c14ae61","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\dynamic\\open.html","type":"file"},{"id":"3c6b6cc6-b5cb-407e-8788-f42094e28da4","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\static\\adc_microphone.js","type":"file"},{"id":"8ff54ff3-2c8f-47ea-9f07-17bd7bcc8e34","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\dynamic\\default.css","type":"file"},{"id":"08794c7f-866e-46aa-9171-21b10a3e3d9a","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\dynamic\\fallback_mobile_open.html","type":"file"},{"id":"a426712c-6257-4fff-9f5a-7e4e243a28f9","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\dynamic\\fallback_open.html","type":"file"},{"id":"a1fd4492-942a-497e-903c-0e043331ef9b","pane":"main","path":"C:\\Users\\Quentin\\Documents\\GitHub\\MyADCs\\Microphone\\config.xml","type":"projectSettings","mode":"form","adxVersion":"2.0.0","adxType":"adc"}]} \ No newline at end of file +{"tabs":[{"id":"6a6ddd95-e1a5-4cdc-a8e5-30bf2640311f","pane":"main","current":true,"path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\dynamic\\open.html","type":"file"},{"id":"c4ba8dcd-d6ef-4346-bfd1-416ceba539e7","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\static\\adc_microphone.js","type":"file"},{"id":"ae8b7296-d9c8-4543-b6ac-6b6e24d45228","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\dynamic\\default.css","type":"file"},{"id":"d9ddf8d5-ff89-447f-a6e8-4962b3b8411f","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\dynamic\\fallback_mobile_open.html","type":"file"},{"id":"dccedfb7-b7fe-4136-b255-1282f35a2517","pane":"main","path":"C:\\Users\\Quentin\\Documents\\ADC_Microphone\\resources\\dynamic\\fallback_open.html","type":"file"},{"id":"37c319f1-3a92-47df-86ed-b2e9751e1a8d","pane":"main","path":"C:\\Users\\Quentin\\Documents\\GitHub\\MyADCs\\Microphone\\config.xml","type":"projectSettings","mode":"form"},{"id":"69470de2-bb38-4adc-acdd-5a0aa10ffc6a","pane":"main","path":"C:\\Users\\JordanGrindle\\Documents\\GitHub\\Microphone\\resources\\static\\RecordRTC.js","type":"file"}]} \ No newline at end of file diff --git a/bin/Microphone.adc b/bin/Microphone.adc index a939bc0834199f2d5ba8fd0cb94db02ae3af139b..34046ca0eedfaf49360c8a3c0cb0b6919bc22b3a 100644 GIT binary patch delta 45820 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 From 05e28b6cb3c2e8470d0c623b0d58c472a293c092 Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 20 Apr 2026 13:13:10 -0400 Subject: [PATCH 09/13] 2.0.2 build changelog updated changed .catch() error to be more robust instead of "failed to record" changed stop and start record buttons to be actual button controls instead of hidden labels --- bin/Microphone.adc | Bin 89154 -> 89222 bytes changelog.md | 12 ++++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bin/Microphone.adc b/bin/Microphone.adc index 14599171c91fe4a11d0bcc23a2095fb4d53b8643..4648f0d587ea749993a15d1b2779397ac2af35e6 100644 GIT binary patch delta 4332 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 L2o24^S84wO^a-~E delta 4279 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 diff --git a/changelog.md b/changelog.md index 6c34cec..16e4c71 100644 --- a/changelog.md +++ b/changelog.md @@ -5,4 +5,6 @@ Audio capture via the microphone v1.0.4 - Fixed, dof runtime errors v2.0.0 - Fixed issues of the control not running correctly on mobile devices. MIME types not supported. v2.0.1 - changed button behavior to not be a hidden label. updated RecordRTC library to v5.6.3 - v2.0.2 - changed .catch() error message to a more robust feedback instead of "cannot record" \ No newline at end of file + v2.0.2 - changed .catch() error message to a more robust feedback instead of "cannot record" + v2.0.3 - updated WebRTC lib + v2.0.4 - updated missing libraries in config.xml for mobile browser fallback \ No newline at end of file diff --git a/config.xml b/config.xml index 290ef2b..28c62a5 100644 --- a/config.xml +++ b/config.xml @@ -7,7 +7,7 @@ Microphone d7c94a7c-10f9-4d31-8e51-82dc9c96c089 - 2.0.2 + 2.0.4 2026-04-20 Askia @@ -56,6 +56,9 @@ + + + diff --git a/resources/dynamic/open.html b/resources/dynamic/open.html index 5924917..b148192 100644 --- a/resources/dynamic/open.html +++ b/resources/dynamic/open.html @@ -58,8 +58,8 @@ {%EndIf%} - - +
    diff --git a/resources/static/adapter-latest.js b/resources/static/adapter-latest.js index 545bf9a..314710a 100644 --- a/resources/static/adapter-latest.js +++ b/resources/static/adapter-latest.js @@ -10,46 +10,27 @@ 'use strict'; -var _adapter_factory = require('./adapter_factory.js'); - -var adapter = (0, _adapter_factory.adapterFactory)({ window: window }); +var _adapter_factory = require("./adapter_factory.js"); +var adapter = (0, _adapter_factory.adapterFactory)({ + window: typeof window === 'undefined' ? undefined : window +}); module.exports = adapter; // this is the difference from adapter_core. },{"./adapter_factory.js":2}],2:[function(require,module,exports){ -'use strict'; +"use strict"; +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", { value: true }); exports.adapterFactory = adapterFactory; - -var _utils = require('./utils'); - -var utils = _interopRequireWildcard(_utils); - -var _chrome_shim = require('./chrome/chrome_shim'); - -var chromeShim = _interopRequireWildcard(_chrome_shim); - -var _edge_shim = require('./edge/edge_shim'); - -var edgeShim = _interopRequireWildcard(_edge_shim); - -var _firefox_shim = require('./firefox/firefox_shim'); - -var firefoxShim = _interopRequireWildcard(_firefox_shim); - -var _safari_shim = require('./safari/safari_shim'); - -var safariShim = _interopRequireWildcard(_safari_shim); - -var _common_shim = require('./common_shim'); - -var commonShim = _interopRequireWildcard(_common_shim); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -// Shimming starts here. +var utils = _interopRequireWildcard(require("./utils")); +var chromeShim = _interopRequireWildcard(require("./chrome/chrome_shim")); +var firefoxShim = _interopRequireWildcard(require("./firefox/firefox_shim")); +var safariShim = _interopRequireWildcard(require("./safari/safari_shim")); +var commonShim = _interopRequireWildcard(require("./common_shim")); +var sdp = _interopRequireWildcard(require("sdp")); +function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } /* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * @@ -57,27 +38,29 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; * that can be found in the LICENSE file in the root of the source * tree. */ + +// Browser shims. + +// Shimming starts here. function adapterFactory() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - window = _ref.window; - + window = _ref.window; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { shimChrome: true, shimFirefox: true, - shimEdge: true, shimSafari: true }; - // Utils. var logging = utils.log; var browserDetails = utils.detectBrowser(window); - var adapter = { browserDetails: browserDetails, commonShim: commonShim, extractVersion: utils.extractVersion, disableLog: utils.disableLog, - disableWarnings: utils.disableWarnings + disableWarnings: utils.disableWarnings, + // Expose sdp as a convenience. For production apps include directly. + sdp: sdp }; // Shim browser if found. @@ -87,25 +70,31 @@ function adapterFactory() { logging('Chrome shim is not included in this adapter release.'); return adapter; } + if (browserDetails.version === null) { + logging('Chrome shim can not determine version, not shimming.'); + return adapter; + } logging('adapter.js shimming chrome.'); // Export to the adapter global object visible in the browser. adapter.browserShim = chromeShim; - chromeShim.shimGetUserMedia(window); - chromeShim.shimMediaStream(window); - chromeShim.shimPeerConnection(window); - chromeShim.shimOnTrack(window); - chromeShim.shimAddTrackRemoveTrack(window); - chromeShim.shimGetSendersWithDtmf(window); - chromeShim.shimGetStats(window); - chromeShim.shimSenderReceiverGetStats(window); - chromeShim.fixNegotiationNeeded(window); - - commonShim.shimRTCIceCandidate(window); - commonShim.shimConnectionState(window); - commonShim.shimMaxMessageSize(window); - commonShim.shimSendThrowTypeError(window); - commonShim.removeAllowExtmapMixed(window); + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + chromeShim.shimGetUserMedia(window, browserDetails); + chromeShim.shimMediaStream(window, browserDetails); + chromeShim.shimPeerConnection(window, browserDetails); + chromeShim.shimOnTrack(window, browserDetails); + chromeShim.shimAddTrackRemoveTrack(window, browserDetails); + chromeShim.shimGetSendersWithDtmf(window, browserDetails); + chromeShim.shimSenderReceiverGetStats(window, browserDetails); + chromeShim.fixNegotiationNeeded(window, browserDetails); + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); break; case 'firefox': if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) { @@ -116,37 +105,25 @@ function adapterFactory() { // Export to the adapter global object visible in the browser. adapter.browserShim = firefoxShim; - firefoxShim.shimGetUserMedia(window); - firefoxShim.shimPeerConnection(window); - firefoxShim.shimOnTrack(window); - firefoxShim.shimRemoveStream(window); - firefoxShim.shimSenderGetStats(window); - firefoxShim.shimReceiverGetStats(window); - firefoxShim.shimRTCDataChannel(window); - - commonShim.shimRTCIceCandidate(window); - commonShim.shimConnectionState(window); - commonShim.shimMaxMessageSize(window); - commonShim.shimSendThrowTypeError(window); - break; - case 'edge': - if (!edgeShim || !edgeShim.shimPeerConnection || !options.shimEdge) { - logging('MS edge shim is not included in this adapter release.'); - return adapter; - } - logging('adapter.js shimming edge.'); - // Export to the adapter global object visible in the browser. - adapter.browserShim = edgeShim; - - edgeShim.shimGetUserMedia(window); - edgeShim.shimGetDisplayMedia(window); - edgeShim.shimPeerConnection(window); - edgeShim.shimReplaceTrack(window); - - // the edge shim implements the full RTCIceCandidate object. - - commonShim.shimMaxMessageSize(window); - commonShim.shimSendThrowTypeError(window); + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + firefoxShim.shimGetUserMedia(window, browserDetails); + firefoxShim.shimPeerConnection(window, browserDetails); + firefoxShim.shimGetStats(window, browserDetails); + firefoxShim.shimOnTrack(window, browserDetails); + firefoxShim.shimRemoveStream(window, browserDetails); + firefoxShim.shimSenderGetStats(window, browserDetails); + firefoxShim.shimReceiverGetStats(window, browserDetails); + firefoxShim.shimRTCDataChannel(window, browserDetails); + firefoxShim.shimAddTransceiver(window, browserDetails); + firefoxShim.shimGetParameters(window, browserDetails); + firefoxShim.shimCreateOffer(window, browserDetails); + firefoxShim.shimCreateAnswer(window, browserDetails); + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); break; case 'safari': if (!safariShim || !options.shimSafari) { @@ -157,31 +134,31 @@ function adapterFactory() { // Export to the adapter global object visible in the browser. adapter.browserShim = safariShim; - safariShim.shimRTCIceServerUrls(window); - safariShim.shimCreateOfferLegacy(window); - safariShim.shimCallbacksAPI(window); - safariShim.shimLocalStreamsAPI(window); - safariShim.shimRemoteStreamsAPI(window); - safariShim.shimTrackEventTransceiver(window); - safariShim.shimGetUserMedia(window); - - commonShim.shimRTCIceCandidate(window); - commonShim.shimMaxMessageSize(window); - commonShim.shimSendThrowTypeError(window); - commonShim.removeAllowExtmapMixed(window); + // Must be called before shimCallbackAPI. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + safariShim.shimRTCIceServerUrls(window, browserDetails); + safariShim.shimCreateOfferLegacy(window, browserDetails); + safariShim.shimCallbacksAPI(window, browserDetails); + safariShim.shimLocalStreamsAPI(window, browserDetails); + safariShim.shimRemoteStreamsAPI(window, browserDetails); + safariShim.shimTrackEventTransceiver(window, browserDetails); + safariShim.shimGetUserMedia(window, browserDetails); + safariShim.shimAudioContext(window, browserDetails); + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); break; default: logging('Unsupported browser!'); break; } - return adapter; } -// Browser shims. - -},{"./chrome/chrome_shim":3,"./common_shim":6,"./edge/edge_shim":7,"./firefox/firefox_shim":11,"./safari/safari_shim":14,"./utils":15}],3:[function(require,module,exports){ - +},{"./chrome/chrome_shim":3,"./common_shim":5,"./firefox/firefox_shim":6,"./safari/safari_shim":9,"./utils":10,"sdp":11}],3:[function(require,module,exports){ /* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * @@ -195,51 +172,36 @@ function adapterFactory() { Object.defineProperty(exports, "__esModule", { value: true }); -exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _getusermedia = require('./getusermedia'); - -Object.defineProperty(exports, 'shimGetUserMedia', { +exports.fixNegotiationNeeded = fixNegotiationNeeded; +exports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack; +exports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative; +exports.shimGetSendersWithDtmf = shimGetSendersWithDtmf; +Object.defineProperty(exports, "shimGetUserMedia", { enumerable: true, get: function get() { return _getusermedia.shimGetUserMedia; } }); - -var _getdisplaymedia = require('./getdisplaymedia'); - -Object.defineProperty(exports, 'shimGetDisplayMedia', { - enumerable: true, - get: function get() { - return _getdisplaymedia.shimGetDisplayMedia; - } -}); exports.shimMediaStream = shimMediaStream; exports.shimOnTrack = shimOnTrack; -exports.shimGetSendersWithDtmf = shimGetSendersWithDtmf; -exports.shimGetStats = shimGetStats; -exports.shimSenderReceiverGetStats = shimSenderReceiverGetStats; -exports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative; -exports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack; exports.shimPeerConnection = shimPeerConnection; -exports.fixNegotiationNeeded = fixNegotiationNeeded; - -var _utils = require('../utils.js'); - -var utils = _interopRequireWildcard(_utils); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - +exports.shimSenderReceiverGetStats = shimSenderReceiverGetStats; +var utils = _interopRequireWildcard(require("../utils.js")); +var _getusermedia = require("./getusermedia"); +function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function shimMediaStream(window) { window.MediaStream = window.MediaStream || window.webkitMediaStream; } - -function shimOnTrack(window) { - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) { +function shimOnTrack(window, browserDetails) { + if (browserDetails.version > 102) { + // Unified plan is supported so no need to do anything. + return; + } + if (_typeof(window) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) { Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { get: function get() { return this._ontrack; @@ -250,48 +212,53 @@ function shimOnTrack(window) { } this.addEventListener('track', this._ontrack = f); }, - enumerable: true, configurable: true }); var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { var _this = this; - if (!this._ontrackpoly) { this._ontrackpoly = function (e) { // onaddstream does not fire when a track is added to an existing // stream. But stream.onaddtrack is implemented so we use that. e.stream.addEventListener('addtrack', function (te) { - var receiver = void 0; + var receiver; if (window.RTCPeerConnection.prototype.getReceivers) { receiver = _this.getReceivers().find(function (r) { return r.track && r.track.id === te.track.id; }); } else { - receiver = { track: te.track }; + receiver = { + track: te.track + }; } - var event = new Event('track'); event.track = te.track; event.receiver = receiver; - event.transceiver = { receiver: receiver }; + event.transceiver = { + receiver: receiver + }; event.streams = [e.stream]; _this.dispatchEvent(event); }); e.stream.getTracks().forEach(function (track) { - var receiver = void 0; + var receiver; if (window.RTCPeerConnection.prototype.getReceivers) { receiver = _this.getReceivers().find(function (r) { return r.track && r.track.id === track.id; }); } else { - receiver = { track: track }; + receiver = { + track: track + }; } var event = new Event('track'); event.track = track; event.receiver = receiver; - event.transceiver = { receiver: receiver }; + event.transceiver = { + receiver: receiver + }; event.streams = [e.stream]; _this.dispatchEvent(event); }); @@ -306,16 +273,19 @@ function shimOnTrack(window) { // to unconditionally wrap the event. utils.wrapPeerConnectionEvent(window, 'track', function (e) { if (!e.transceiver) { - Object.defineProperty(e, 'transceiver', { value: { receiver: e.receiver } }); + Object.defineProperty(e, 'transceiver', { + value: { + receiver: e.receiver + } + }); } return e; }); } } - function shimGetSendersWithDtmf(window) { // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack. - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) { + if (_typeof(window) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) { var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) { return { track: track, @@ -348,7 +318,6 @@ function shimGetSendersWithDtmf(window) { } return sender; }; - var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { origRemoveTrack.apply(this, arguments); @@ -361,21 +330,17 @@ function shimGetSendersWithDtmf(window) { var origAddStream = window.RTCPeerConnection.prototype.addStream; window.RTCPeerConnection.prototype.addStream = function addStream(stream) { var _this2 = this; - this._senders = this._senders || []; origAddStream.apply(this, [stream]); stream.getTracks().forEach(function (track) { _this2._senders.push(shimSenderWithDtmf(_this2, track)); }); }; - var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { var _this3 = this; - this._senders = this._senders || []; origRemoveStream.apply(this, [stream]); - stream.getTracks().forEach(function (track) { var sender = _this3._senders.find(function (s) { return s.track === track; @@ -386,18 +351,16 @@ function shimGetSendersWithDtmf(window) { } }); }; - } else if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { + } else if (_typeof(window) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { var origGetSenders = window.RTCPeerConnection.prototype.getSenders; window.RTCPeerConnection.prototype.getSenders = function getSenders() { var _this4 = this; - var senders = origGetSenders.apply(this, []); senders.forEach(function (sender) { return sender._pc = _this4; }); return senders; }; - Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', { get: function get() { if (this._dtmf === undefined) { @@ -412,82 +375,11 @@ function shimGetSendersWithDtmf(window) { }); } } - -function shimGetStats(window) { - if (!window.RTCPeerConnection) { +function shimSenderReceiverGetStats(window, browserDetails) { + if (browserDetails.version >= 67) { return; } - - var origGetStats = window.RTCPeerConnection.prototype.getStats; - window.RTCPeerConnection.prototype.getStats = function getStats() { - var _this5 = this; - - var _arguments = Array.prototype.slice.call(arguments), - selector = _arguments[0], - onSucc = _arguments[1], - onErr = _arguments[2]; - - // If selector is a function then we are in the old style stats so just - // pass back the original getStats format to avoid breaking old users. - - - if (arguments.length > 0 && typeof selector === 'function') { - return origGetStats.apply(this, arguments); - } - - // When spec-style getStats is supported, return those when called with - // either no arguments or the selector argument is null. - if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) { - return origGetStats.apply(this, []); - } - - var fixChromeStats_ = function fixChromeStats_(response) { - var standardReport = {}; - var reports = response.result(); - reports.forEach(function (report) { - var standardStats = { - id: report.id, - timestamp: report.timestamp, - type: { - localcandidate: 'local-candidate', - remotecandidate: 'remote-candidate' - }[report.type] || report.type - }; - report.names().forEach(function (name) { - standardStats[name] = report.stat(name); - }); - standardReport[standardStats.id] = standardStats; - }); - - return standardReport; - }; - - // shim getStats with maplike support - var makeMapStats = function makeMapStats(stats) { - return new Map(Object.keys(stats).map(function (key) { - return [key, stats[key]]; - })); - }; - - if (arguments.length >= 2) { - var successCallbackWrapper_ = function successCallbackWrapper_(response) { - onSucc(makeMapStats(fixChromeStats_(response))); - }; - - return origGetStats.apply(this, [successCallbackWrapper_, selector]); - } - - // promise-support - return new Promise(function (resolve, reject) { - origGetStats.apply(_this5, [function (response) { - resolve(makeMapStats(fixChromeStats_(response))); - }, reject]); - }).then(onSucc, onErr); - }; -} - -function shimSenderReceiverGetStats(window) { - if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) { + if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) { return; } @@ -496,16 +388,14 @@ function shimSenderReceiverGetStats(window) { var origGetSenders = window.RTCPeerConnection.prototype.getSenders; if (origGetSenders) { window.RTCPeerConnection.prototype.getSenders = function getSenders() { - var _this6 = this; - + var _this5 = this; var senders = origGetSenders.apply(this, []); senders.forEach(function (sender) { - return sender._pc = _this6; + return sender._pc = _this5; }); return senders; }; } - var origAddTrack = window.RTCPeerConnection.prototype.addTrack; if (origAddTrack) { window.RTCPeerConnection.prototype.addTrack = function addTrack() { @@ -533,11 +423,10 @@ function shimSenderReceiverGetStats(window) { var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; if (origGetReceivers) { window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { - var _this7 = this; - + var _this6 = this; var receivers = origGetReceivers.apply(this, []); receivers.forEach(function (receiver) { - return receiver._pc = _this7; + return receiver._pc = _this6; }); return receivers; }; @@ -553,7 +442,6 @@ function shimSenderReceiverGetStats(window) { }); }; } - if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) { return; } @@ -563,9 +451,9 @@ function shimSenderReceiverGetStats(window) { window.RTCPeerConnection.prototype.getStats = function getStats() { if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) { var track = arguments[0]; - var sender = void 0; - var receiver = void 0; - var err = void 0; + var sender; + var receiver; + var err; this.getSenders().forEach(function (s) { if (s.track === track) { if (sender) { @@ -597,27 +485,23 @@ function shimSenderReceiverGetStats(window) { return origGetStats.apply(this, arguments); }; } - function shimAddTrackRemoveTrackWithNative(window) { // shim addTrack/removeTrack with native variants in order to make // the interactions with legacy getLocalStreams behave as in other browsers. // Keeps a mapping stream.id => [stream, rtpsenders...] window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { - var _this8 = this; - + var _this7 = this; this._shimmedLocalStreams = this._shimmedLocalStreams || {}; return Object.keys(this._shimmedLocalStreams).map(function (streamId) { - return _this8._shimmedLocalStreams[streamId][0]; + return _this7._shimmedLocalStreams[streamId][0]; }); }; - var origAddTrack = window.RTCPeerConnection.prototype.addTrack; window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { if (!stream) { return origAddTrack.apply(this, arguments); } this._shimmedLocalStreams = this._shimmedLocalStreams || {}; - var sender = origAddTrack.apply(this, arguments); if (!this._shimmedLocalStreams[stream.id]) { this._shimmedLocalStreams[stream.id] = [stream, sender]; @@ -626,15 +510,12 @@ function shimAddTrackRemoveTrackWithNative(window) { } return sender; }; - var origAddStream = window.RTCPeerConnection.prototype.addStream; window.RTCPeerConnection.prototype.addStream = function addStream(stream) { - var _this9 = this; - + var _this8 = this; this._shimmedLocalStreams = this._shimmedLocalStreams || {}; - stream.getTracks().forEach(function (track) { - var alreadyExists = _this9.getSenders().find(function (s) { + var alreadyExists = _this8.getSenders().find(function (s) { return s.track === track; }); if (alreadyExists) { @@ -648,39 +529,34 @@ function shimAddTrackRemoveTrackWithNative(window) { }); this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders); }; - var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { this._shimmedLocalStreams = this._shimmedLocalStreams || {}; delete this._shimmedLocalStreams[stream.id]; return origRemoveStream.apply(this, arguments); }; - var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { - var _this10 = this; - + var _this9 = this; this._shimmedLocalStreams = this._shimmedLocalStreams || {}; if (sender) { Object.keys(this._shimmedLocalStreams).forEach(function (streamId) { - var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender); + var idx = _this9._shimmedLocalStreams[streamId].indexOf(sender); if (idx !== -1) { - _this10._shimmedLocalStreams[streamId].splice(idx, 1); + _this9._shimmedLocalStreams[streamId].splice(idx, 1); } - if (_this10._shimmedLocalStreams[streamId].length === 1) { - delete _this10._shimmedLocalStreams[streamId]; + if (_this9._shimmedLocalStreams[streamId].length === 1) { + delete _this9._shimmedLocalStreams[streamId]; } }); } return origRemoveTrack.apply(this, arguments); }; } - -function shimAddTrackRemoveTrack(window) { +function shimAddTrackRemoveTrack(window, browserDetails) { if (!window.RTCPeerConnection) { return; } - var browserDetails = utils.detectBrowser(window); // shim addTrack and removeTrack. if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) { return shimAddTrackRemoveTrackWithNative(window); @@ -690,24 +566,20 @@ function shimAddTrackRemoveTrack(window) { // to return the original streams. var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams; window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { - var _this11 = this; - + var _this0 = this; var nativeStreams = origGetLocalStreams.apply(this); this._reverseStreams = this._reverseStreams || {}; return nativeStreams.map(function (stream) { - return _this11._reverseStreams[stream.id]; + return _this0._reverseStreams[stream.id]; }); }; - var origAddStream = window.RTCPeerConnection.prototype.addStream; window.RTCPeerConnection.prototype.addStream = function addStream(stream) { - var _this12 = this; - + var _this1 = this; this._streams = this._streams || {}; this._reverseStreams = this._reverseStreams || {}; - stream.getTracks().forEach(function (track) { - var alreadyExists = _this12.getSenders().find(function (s) { + var alreadyExists = _this1.getSenders().find(function (s) { return s.track === track; }); if (alreadyExists) { @@ -724,20 +596,16 @@ function shimAddTrackRemoveTrack(window) { } origAddStream.apply(this, [stream]); }; - var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { this._streams = this._streams || {}; this._reverseStreams = this._reverseStreams || {}; - origRemoveStream.apply(this, [this._streams[stream.id] || stream]); delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id]; delete this._streams[stream.id]; }; - window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { - var _this13 = this; - + var _this10 = this; if (this.signalingState === 'closed') { throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); } @@ -749,14 +617,12 @@ function shimAddTrackRemoveTrack(window) { // [[associated MediaStreams]] internal slot. throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError'); } - var alreadyExists = this.getSenders().find(function (s) { return s.track === track; }); if (alreadyExists) { throw new DOMException('Track already exists.', 'InvalidAccessError'); } - this._streams = this._streams || {}; this._reverseStreams = this._reverseStreams || {}; var oldStream = this._streams[stream.id]; @@ -769,7 +635,7 @@ function shimAddTrackRemoveTrack(window) { // Trigger ONN async. Promise.resolve().then(function () { - _this13.dispatchEvent(new Event('negotiationneeded')); + _this10.dispatchEvent(new Event('negotiationneeded')); }); } else { var newStream = new window.MediaStream([track]); @@ -811,13 +677,12 @@ function shimAddTrackRemoveTrack(window) { ['createOffer', 'createAnswer'].forEach(function (method) { var nativeMethod = window.RTCPeerConnection.prototype[method]; var methodObj = _defineProperty({}, method, function () { - var _this14 = this; - + var _this11 = this; var args = arguments; var isLegacyCall = arguments.length && typeof arguments[0] === 'function'; if (isLegacyCall) { return nativeMethod.apply(this, [function (description) { - var desc = replaceInternalStreamId(_this14, description); + var desc = replaceInternalStreamId(_this11, description); args[0].apply(null, [desc]); }, function (err) { if (args[1]) { @@ -826,12 +691,11 @@ function shimAddTrackRemoveTrack(window) { }, arguments[2]]); } return nativeMethod.apply(this, arguments).then(function (description) { - return replaceInternalStreamId(_this14, description); + return replaceInternalStreamId(_this11, description); }); }); window.RTCPeerConnection.prototype[method] = methodObj[method]; }); - var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { if (!arguments.length || !arguments[0].type) { @@ -853,10 +717,8 @@ function shimAddTrackRemoveTrack(window) { return replaceInternalStreamId(this, description); } }); - window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { - var _this15 = this; - + var _this12 = this; if (this.signalingState === 'closed') { throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); } @@ -872,16 +734,15 @@ function shimAddTrackRemoveTrack(window) { // Search for the native stream the senders track belongs to. this._streams = this._streams || {}; - var stream = void 0; + var stream; Object.keys(this._streams).forEach(function (streamid) { - var hasTrack = _this15._streams[streamid].getTracks().find(function (track) { + var hasTrack = _this12._streams[streamid].getTracks().find(function (track) { return sender.track === track; }); if (hasTrack) { - stream = _this15._streams[streamid]; + stream = _this12._streams[streamid]; } }); - if (stream) { if (stream.getTracks().length === 1) { // if this is the last track of the stream, remove the stream. This @@ -895,10 +756,7 @@ function shimAddTrackRemoveTrack(window) { } }; } - -function shimPeerConnection(window) { - var browserDetails = utils.detectBrowser(window); - +function shimPeerConnection(window, browserDetails) { if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) { // very basic support for old versions. window.RTCPeerConnection = window.webkitRTCPeerConnection; @@ -918,87 +776,26 @@ function shimPeerConnection(window) { window.RTCPeerConnection.prototype[method] = methodObj[method]; }); } - - // support for addIceCandidate(null or undefined) - var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate; - window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() { - if (!arguments[0]) { - if (arguments[1]) { - arguments[1].apply(null); - } - return Promise.resolve(); - } - // Firefox 68+ emits and processes {candidate: "", ...}, ignore - // in older versions. Native support planned for Chrome M77. - if (browserDetails.version < 78 && arguments[0] && arguments[0].candidate === '') { - return Promise.resolve(); - } - return nativeAddIceCandidate.apply(this, arguments); - }; } -function fixNegotiationNeeded(window) { +// Attempt to fix ONN in plan-b mode. +function fixNegotiationNeeded(window, browserDetails) { + if (browserDetails.version > 102) { + // Plan-B is no longer supported. + return; + } utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) { var pc = e.target; - if (pc.signalingState !== 'stable') { - return; + if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') { + if (pc.signalingState !== 'stable') { + return; + } } return e; }); } -},{"../utils.js":15,"./getdisplaymedia":4,"./getusermedia":5}],4:[function(require,module,exports){ -/* - * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ -/* eslint-env node */ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.shimGetDisplayMedia = shimGetDisplayMedia; -function shimGetDisplayMedia(window, getSourceId) { - if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { - return; - } - if (!window.navigator.mediaDevices) { - return; - } - // getSourceId is a function that returns a promise resolving with - // the sourceId of the screen/window/tab to be shared. - if (typeof getSourceId !== 'function') { - console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function'); - return; - } - window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { - return getSourceId(constraints).then(function (sourceId) { - var widthSpecified = constraints.video && constraints.video.width; - var heightSpecified = constraints.video && constraints.video.height; - var frameRateSpecified = constraints.video && constraints.video.frameRate; - constraints.video = { - mandatory: { - chromeMediaSource: 'desktop', - chromeMediaSourceId: sourceId, - maxFrameRate: frameRateSpecified || 3 - } - }; - if (widthSpecified) { - constraints.video.mandatory.maxWidth = widthSpecified; - } - if (heightSpecified) { - constraints.video.mandatory.maxHeight = heightSpecified; - } - return window.navigator.mediaDevices.getUserMedia(constraints); - }); - }; -} - -},{}],5:[function(require,module,exports){ +},{"../utils.js":10,"./getusermedia":4}],4:[function(require,module,exports){ /* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * @@ -1012,30 +809,18 @@ function shimGetDisplayMedia(window, getSourceId) { Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - exports.shimGetUserMedia = shimGetUserMedia; - -var _utils = require('../utils.js'); - -var utils = _interopRequireWildcard(_utils); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - +var utils = _interopRequireWildcard(require("../utils.js")); +function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var logging = utils.log; - -function shimGetUserMedia(window) { +function shimGetUserMedia(window, browserDetails) { var navigator = window && window.navigator; - if (!navigator.mediaDevices) { return; } - - var browserDetails = utils.detectBrowser(window); - var constraintsToChrome_ = function constraintsToChrome_(c) { - if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) !== 'object' || c.mandatory || c.optional) { + if (_typeof(c) !== 'object' || c.mandatory || c.optional) { return c; } var cc = {}; @@ -1043,7 +828,9 @@ function shimGetUserMedia(window) { if (key === 'require' || key === 'advanced' || key === 'mediaSource') { return; } - var r = _typeof(c[key]) === 'object' ? c[key] : { ideal: c[key] }; + var r = _typeof(c[key]) === 'object' ? c[key] : { + ideal: c[key] + }; if (r.exact !== undefined && typeof r.exact === 'number') { r.min = r.max = r.exact; } @@ -1084,7 +871,6 @@ function shimGetUserMedia(window) { } return cc; }; - var shimConstraints_ = function shimConstraints_(constraints, func) { if (browserDetails.version >= 61) { return func(constraints); @@ -1105,12 +891,13 @@ function shimGetUserMedia(window) { if (constraints && _typeof(constraints.video) === 'object') { // Shim facingMode for mobile & surface pro. var face = constraints.video.facingMode; - face = face && ((typeof face === 'undefined' ? 'undefined' : _typeof(face)) === 'object' ? face : { ideal: face }); + face = face && (_typeof(face) === 'object' ? face : { + ideal: face + }); var getSupportedFacingModeLies = browserDetails.version < 66; - if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) { delete constraints.video.facingMode; - var matches = void 0; + var matches; if (face.exact === 'environment' || face.ideal === 'environment') { matches = ['back', 'rear']; } else if (face.exact === 'user' || face.ideal === 'user') { @@ -1131,7 +918,11 @@ function shimGetUserMedia(window) { dev = devices[devices.length - 1]; // more likely the back cam } if (dev) { - constraints.video.deviceId = face.exact ? { exact: dev.deviceId } : { ideal: dev.deviceId }; + constraints.video.deviceId = face.exact ? { + exact: dev.deviceId + } : { + ideal: dev.deviceId + }; } constraints.video = constraintsToChrome_(constraints.video); logging('chrome: ' + JSON.stringify(constraints)); @@ -1144,7 +935,6 @@ function shimGetUserMedia(window) { logging('chrome: ' + JSON.stringify(constraints)); return func(constraints); }; - var shimError_ = function shimError_(e) { if (browserDetails.version >= 64) { return e; @@ -1170,7 +960,6 @@ function shimGetUserMedia(window) { } }; }; - var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) { shimConstraints_(constraints, function (c) { navigator.webkitGetUserMedia(c, onSuccess, function (e) { @@ -1205,7 +994,7 @@ function shimGetUserMedia(window) { } } -},{"../utils.js":15}],6:[function(require,module,exports){ +},{"../utils.js":10}],5:[function(require,module,exports){ /* * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. * @@ -1219,58 +1008,54 @@ function shimGetUserMedia(window) { Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.shimRTCIceCandidate = shimRTCIceCandidate; +exports.removeExtmapAllowMixed = removeExtmapAllowMixed; +exports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty; +exports.shimConnectionState = shimConnectionState; exports.shimMaxMessageSize = shimMaxMessageSize; +exports.shimParameterlessSetLocalDescription = shimParameterlessSetLocalDescription; +exports.shimRTCIceCandidate = shimRTCIceCandidate; +exports.shimRTCIceCandidateRelayProtocol = shimRTCIceCandidateRelayProtocol; exports.shimSendThrowTypeError = shimSendThrowTypeError; -exports.shimConnectionState = shimConnectionState; -exports.removeAllowExtmapMixed = removeAllowExtmapMixed; - -var _sdp = require('sdp'); - -var _sdp2 = _interopRequireDefault(_sdp); - -var _utils = require('./utils'); - -var utils = _interopRequireWildcard(_utils); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - +var _sdp = _interopRequireDefault(require("sdp")); +var utils = _interopRequireWildcard(require("./utils")); +function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } +function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function shimRTCIceCandidate(window) { // foundation is arbitrarily chosen as an indicator for full support for // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) { return; } - var NativeRTCIceCandidate = window.RTCIceCandidate; window.RTCIceCandidate = function RTCIceCandidate(args) { // Remove the a= which shouldn't be part of the candidate string. - if ((typeof args === 'undefined' ? 'undefined' : _typeof(args)) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) { + if (_typeof(args) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) { args = JSON.parse(JSON.stringify(args)); - args.candidate = args.candidate.substr(2); + args.candidate = args.candidate.substring(2); } - if (args.candidate && args.candidate.length) { // Augment the native candidate with the parsed fields. var nativeCandidate = new NativeRTCIceCandidate(args); - var parsedCandidate = _sdp2.default.parseCandidate(args.candidate); - var augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate); + var parsedCandidate = _sdp["default"].parseCandidate(args.candidate); + for (var key in parsedCandidate) { + if (!(key in nativeCandidate)) { + Object.defineProperty(nativeCandidate, key, { + value: parsedCandidate[key] + }); + } + } - // Add a serializer that does not serialize the extra attributes. - augmentedCandidate.toJSON = function toJSON() { + // Override serializer to not serialize the extra attributes. + nativeCandidate.toJSON = function toJSON() { return { - candidate: augmentedCandidate.candidate, - sdpMid: augmentedCandidate.sdpMid, - sdpMLineIndex: augmentedCandidate.sdpMLineIndex, - usernameFragment: augmentedCandidate.usernameFragment + candidate: nativeCandidate.candidate, + sdpMid: nativeCandidate.sdpMid, + sdpMLineIndex: nativeCandidate.sdpMLineIndex, + usernameFragment: nativeCandidate.usernameFragment }; }; - return augmentedCandidate; + return nativeCandidate; } return new NativeRTCIceCandidate(args); }; @@ -1288,33 +1073,51 @@ function shimRTCIceCandidate(window) { return e; }); } - -function shimMaxMessageSize(window) { - if (!window.RTCPeerConnection) { +function shimRTCIceCandidateRelayProtocol(window) { + if (!window.RTCIceCandidate || window.RTCIceCandidate && 'relayProtocol' in window.RTCIceCandidate.prototype) { return; } - var browserDetails = utils.detectBrowser(window); - if (!('sctp' in window.RTCPeerConnection.prototype)) { - Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', { - get: function get() { - return typeof this._sctp === 'undefined' ? null : this._sctp; + // Hook up the augmented candidate in onicecandidate and + // addEventListener('icecandidate', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) { + if (e.candidate) { + var parsedCandidate = _sdp["default"].parseCandidate(e.candidate.candidate); + if (parsedCandidate.type === 'relay') { + // This is a libwebrtc-specific mapping of local type preference + // to relayProtocol. + e.candidate.relayProtocol = { + 0: 'tls', + 1: 'tcp', + 2: 'udp' + }[parsedCandidate.priority >> 24]; } - }); + } + return e; + }); +} +function shimMaxMessageSize(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + if (!('sctp' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + } + }); } - var sctpInDescription = function sctpInDescription(description) { if (!description || !description.sdp) { return false; } - var sections = _sdp2.default.splitSections(description.sdp); + var sections = _sdp["default"].splitSections(description.sdp); sections.shift(); return sections.some(function (mediaSection) { - var mLine = _sdp2.default.parseMLine(mediaSection); + var mLine = _sdp["default"].parseMLine(mediaSection); return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1; }); }; - var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) { // TODO: Is there a better solution for detecting Firefox? var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/); @@ -1325,7 +1128,6 @@ function shimMaxMessageSize(window) { // Test for NaN (yes, this is ugly) return version !== version ? -1 : version; }; - var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) { // Every implementation we know can send at least 64 KiB. // Note: Although Chrome is technically able to send up to 256 KiB, the @@ -1356,7 +1158,6 @@ function shimMaxMessageSize(window) { } return canSendMaxMessageSize; }; - var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) { // Note: 65536 bytes is the default value from the SDP spec. Also, // every implementation we know supports receiving 65536 bytes. @@ -1368,10 +1169,9 @@ function shimMaxMessageSize(window) { if (browserDetails.browser === 'firefox' && browserDetails.version === 57) { maxMessageSize = 65535; } - - var match = _sdp2.default.matchPrefix(description.sdp, 'a=max-message-size:'); + var match = _sdp["default"].matchPrefix(description.sdp, 'a=max-message-size:'); if (match.length > 0) { - maxMessageSize = parseInt(match[0].substr(19), 10); + maxMessageSize = parseInt(match[0].substring(19), 10); } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) { // If the maximum message size is not present in the remote SDP and // both local and remote are Firefox, the remote peer can receive @@ -1380,7 +1180,6 @@ function shimMaxMessageSize(window) { } return maxMessageSize; }; - var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { this._sctp = null; @@ -1388,21 +1187,18 @@ function shimMaxMessageSize(window) { // As usual, adapter.js has to do an 'ugly worakaround' // to cover up the mess. if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) { - var _getConfiguration = this.getConfiguration(), - sdpSemantics = _getConfiguration.sdpSemantics; - + var _this$getConfiguratio = this.getConfiguration(), + sdpSemantics = _this$getConfiguratio.sdpSemantics; if (sdpSemantics === 'plan-b') { Object.defineProperty(this, 'sctp', { get: function get() { return typeof this._sctp === 'undefined' ? null : this._sctp; }, - enumerable: true, configurable: true }); } } - if (sctpInDescription(arguments[0])) { // Check if the remote is FF. var isFirefox = getRemoteFirefoxVersion(arguments[0]); @@ -1414,7 +1210,7 @@ function shimMaxMessageSize(window) { var remoteMMS = getMaxMessageSize(arguments[0], isFirefox); // Determine final maximum message size - var maxMessageSize = void 0; + var maxMessageSize; if (canSendMMS === 0 && remoteMMS === 0) { maxMessageSize = Number.POSITIVE_INFINITY; } else if (canSendMMS === 0 || remoteMMS === 0) { @@ -1433,20 +1229,24 @@ function shimMaxMessageSize(window) { }); this._sctp = sctp; } - return origSetRemoteDescription.apply(this, arguments); }; } - -function shimSendThrowTypeError(window) { +function shimSendThrowTypeError(window, browserDetails) { if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) { return; } + if (browserDetails.browser === 'chrome' && browserDetails.version > 149) { + // Fixed by https://issues.chromium.org/issues/490588131 + return; + } // Note: Although Firefox >= 57 has a native implementation, the maximum // message size can be reset for all data channels at a later stage. // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 - + if (browserDetails.browser === 'firefox' && browserDetails.version > 60) { + return; + } function wrapDcSend(dc, pc) { var origDataChannelSend = dc.send; dc.send = function send() { @@ -1489,7 +1289,6 @@ function shimConnectionState(window) { checking: 'connecting' }[this.iceConnectionState] || this.iceConnectionState; }, - enumerable: true, configurable: true }); @@ -1506,11 +1305,9 @@ function shimConnectionState(window) { this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb); } }, - enumerable: true, configurable: true }); - ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) { var origMethod = proto[method]; proto[method] = function () { @@ -1530,275 +1327,117 @@ function shimConnectionState(window) { }; }); } - -function removeAllowExtmapMixed(window) { - /* remove a=extmap-allow-mixed for Chrome < M71 */ +function removeExtmapAllowMixed(window, browserDetails) { + /* remove a=extmap-allow-mixed for webrtc.org < M71 */ if (!window.RTCPeerConnection) { return; } - var browserDetails = utils.detectBrowser(window); if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) { return; } + if (browserDetails.browser === 'safari' && browserDetails._safariVersion >= 13.1) { + return; + } var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription; window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) { if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) { - desc.sdp = desc.sdp.split('\n').filter(function (line) { + var sdp = desc.sdp.split('\n').filter(function (line) { return line.trim() !== 'a=extmap-allow-mixed'; }).join('\n'); + // Safari enforces read-only-ness of RTCSessionDescription fields. + if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) { + arguments[0] = new window.RTCSessionDescription({ + type: desc.type, + sdp: sdp + }); + } else { + desc.sdp = sdp; + } } return nativeSRD.apply(this, arguments); }; } - -},{"./utils":15,"sdp":17}],7:[function(require,module,exports){ -/* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ -/* eslint-env node */ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; - -var _getusermedia = require('./getusermedia'); - -Object.defineProperty(exports, 'shimGetUserMedia', { - enumerable: true, - get: function get() { - return _getusermedia.shimGetUserMedia; - } -}); - -var _getdisplaymedia = require('./getdisplaymedia'); - -Object.defineProperty(exports, 'shimGetDisplayMedia', { - enumerable: true, - get: function get() { - return _getdisplaymedia.shimGetDisplayMedia; +function shimAddIceCandidateNullOrEmpty(window, browserDetails) { + // Support for addIceCandidate(null or undefined) + // as well as addIceCandidate({candidate: "", ...}) + // https://bugs.chromium.org/p/chromium/issues/detail?id=978582 + // Note: must be called before other polyfills which change the signature. + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; } -}); -exports.shimPeerConnection = shimPeerConnection; -exports.shimReplaceTrack = shimReplaceTrack; - -var _utils = require('../utils'); - -var utils = _interopRequireWildcard(_utils); - -var _filtericeservers = require('./filtericeservers'); - -var _rtcpeerconnectionShim = require('rtcpeerconnection-shim'); - -var _rtcpeerconnectionShim2 = _interopRequireDefault(_rtcpeerconnectionShim); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function shimPeerConnection(window) { - var browserDetails = utils.detectBrowser(window); - - if (window.RTCIceGatherer) { - if (!window.RTCIceCandidate) { - window.RTCIceCandidate = function RTCIceCandidate(args) { - return args; - }; - } - if (!window.RTCSessionDescription) { - window.RTCSessionDescription = function RTCSessionDescription(args) { - return args; - }; - } - // this adds an additional event listener to MediaStrackTrack that signals - // when a tracks enabled property was changed. Workaround for a bug in - // addStream, see below. No longer required in 15025+ - if (browserDetails.version < 15025) { - var origMSTEnabled = Object.getOwnPropertyDescriptor(window.MediaStreamTrack.prototype, 'enabled'); - Object.defineProperty(window.MediaStreamTrack.prototype, 'enabled', { - set: function set(value) { - origMSTEnabled.set.call(this, value); - var ev = new Event('enabled'); - ev.enabled = value; - this.dispatchEvent(ev); - } - }); - } + var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate; + if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) { + return; } - - // ORTC defines the DTMF sender a bit different. - // https://github.com/w3c/ortc/issues/714 - if (window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { - Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', { - get: function get() { - if (this._dtmf === undefined) { - if (this.track.kind === 'audio') { - this._dtmf = new window.RTCDtmfSender(this); - } else if (this.track.kind === 'video') { - this._dtmf = null; - } - } - return this._dtmf; + window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() { + if (!arguments[0]) { + if (arguments[1]) { + arguments[1].apply(null); } - }); - } - // Edge currently only implements the RTCDtmfSender, not the - // RTCDTMFSender alias. See http://draft.ortc.org/#rtcdtmfsender2* - if (window.RTCDtmfSender && !window.RTCDTMFSender) { - window.RTCDTMFSender = window.RTCDtmfSender; - } - - var RTCPeerConnectionShim = (0, _rtcpeerconnectionShim2.default)(window, browserDetails.version); - window.RTCPeerConnection = function RTCPeerConnection(config) { - if (config && config.iceServers) { - config.iceServers = (0, _filtericeservers.filterIceServers)(config.iceServers, browserDetails.version); - utils.log('ICE servers after filtering:', config.iceServers); + return Promise.resolve(); } - return new RTCPeerConnectionShim(config); - }; - window.RTCPeerConnection.prototype = RTCPeerConnectionShim.prototype; -} - -function shimReplaceTrack(window) { - // ORTC has replaceTrack -- https://github.com/w3c/ortc/issues/614 - if (window.RTCRtpSender && !('replaceTrack' in window.RTCRtpSender.prototype)) { - window.RTCRtpSender.prototype.replaceTrack = window.RTCRtpSender.prototype.setTrack; - } -} - -},{"../utils":15,"./filtericeservers":8,"./getdisplaymedia":9,"./getusermedia":10,"rtcpeerconnection-shim":16}],8:[function(require,module,exports){ -/* - * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ -/* eslint-env node */ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.filterIceServers = filterIceServers; - -var _utils = require('../utils'); - -var utils = _interopRequireWildcard(_utils); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -// Edge does not like -// 1) stun: filtered after 14393 unless ?transport=udp is present -// 2) turn: that does not have all of turn:host:port?transport=udp -// 3) turn: with ipv6 addresses -// 4) turn: occurring muliple times -function filterIceServers(iceServers, edgeVersion) { - var hasTurn = false; - iceServers = JSON.parse(JSON.stringify(iceServers)); - return iceServers.filter(function (server) { - if (server && (server.urls || server.url)) { - var urls = server.urls || server.url; - if (server.url && !server.urls) { - utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls'); - } - var isString = typeof urls === 'string'; - if (isString) { - urls = [urls]; - } - urls = urls.filter(function (url) { - // filter STUN unconditionally. - if (url.indexOf('stun:') === 0) { - return false; - } - - var validTurn = url.startsWith('turn') && !url.startsWith('turn:[') && url.includes('transport=udp'); - if (validTurn && !hasTurn) { - hasTurn = true; - return true; - } - return validTurn && !hasTurn; - }); - - delete server.url; - server.urls = isString ? urls[0] : urls; - return !!urls.length; + // Firefox 68+ emits and processes {candidate: "", ...}, ignore + // in older versions. + // Native support for ignoring exists for Chrome M77+. + // Safari ignores as well, exact version unknown but works in the same + // version that also ignores addIceCandidate(null). + if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') { + return Promise.resolve(); } - }); + return nativeAddIceCandidate.apply(this, arguments); + }; } -},{"../utils":15}],9:[function(require,module,exports){ -/* - * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ -/* eslint-env node */ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.shimGetDisplayMedia = shimGetDisplayMedia; -function shimGetDisplayMedia(window) { - if (!('getDisplayMedia' in window.navigator)) { - return; - } - if (!window.navigator.mediaDevices) { +// Note: Make sure to call this ahead of APIs that modify +// setLocalDescription.length +function shimParameterlessSetLocalDescription(window, browserDetails) { + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { return; } - if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + var nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; + if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) { return; } - window.navigator.mediaDevices.getDisplayMedia = window.navigator.getDisplayMedia.bind(window.navigator); -} - -},{}],10:[function(require,module,exports){ -/* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ -/* eslint-env node */ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.shimGetUserMedia = shimGetUserMedia; -function shimGetUserMedia(window) { - var navigator = window && window.navigator; - - var shimError_ = function shimError_(e) { - return { - name: { PermissionDeniedError: 'NotAllowedError' }[e.name] || e.name, - message: e.message, - constraint: e.constraint, - toString: function toString() { - return this.name; - } + window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { + var _this = this; + var desc = arguments[0] || {}; + if (_typeof(desc) !== 'object' || desc.type && desc.sdp) { + return nativeSetLocalDescription.apply(this, arguments); + } + // The remaining steps should technically happen when SLD comes off the + // RTCPeerConnection's operations chain (not ahead of going on it), but + // this is too difficult to shim. Instead, this shim only covers the + // common case where the operations chain is empty. This is imperfect, but + // should cover many cases. Rationale: Even if we can't reduce the glare + // window to zero on imperfect implementations, there's value in tapping + // into the perfect negotiation pattern that several browsers support. + desc = { + type: desc.type, + sdp: desc.sdp }; - }; - - // getUserMedia error shim. - var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); - navigator.mediaDevices.getUserMedia = function (c) { - return origGetUserMedia(c).catch(function (e) { - return Promise.reject(shimError_(e)); + if (!desc.type) { + switch (this.signalingState) { + case 'stable': + case 'have-local-offer': + case 'have-remote-pranswer': + desc.type = 'offer'; + break; + default: + desc.type = 'answer'; + break; + } + } + if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') { + return nativeSetLocalDescription.apply(this, [desc]); + } + var func = desc.type === 'offer' ? this.createOffer : this.createAnswer; + return func.apply(this).then(function (d) { + return nativeSetLocalDescription.apply(_this, [d]); }); }; } -},{}],11:[function(require,module,exports){ +},{"./utils":10,"sdp":11}],6:[function(require,module,exports){ /* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * @@ -1812,63 +1451,62 @@ function shimGetUserMedia(window) { Object.defineProperty(exports, "__esModule", { value: true }); -exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _getusermedia = require('./getusermedia'); - -Object.defineProperty(exports, 'shimGetUserMedia', { +exports.shimAddTransceiver = shimAddTransceiver; +exports.shimCreateAnswer = shimCreateAnswer; +exports.shimCreateOffer = shimCreateOffer; +Object.defineProperty(exports, "shimGetDisplayMedia", { enumerable: true, get: function get() { - return _getusermedia.shimGetUserMedia; + return _getdisplaymedia.shimGetDisplayMedia; } }); - -var _getdisplaymedia = require('./getdisplaymedia'); - -Object.defineProperty(exports, 'shimGetDisplayMedia', { +exports.shimGetParameters = shimGetParameters; +exports.shimGetStats = shimGetStats; +Object.defineProperty(exports, "shimGetUserMedia", { enumerable: true, get: function get() { - return _getdisplaymedia.shimGetDisplayMedia; + return _getusermedia.shimGetUserMedia; } }); exports.shimOnTrack = shimOnTrack; exports.shimPeerConnection = shimPeerConnection; -exports.shimSenderGetStats = shimSenderGetStats; +exports.shimRTCDataChannel = shimRTCDataChannel; exports.shimReceiverGetStats = shimReceiverGetStats; exports.shimRemoveStream = shimRemoveStream; -exports.shimRTCDataChannel = shimRTCDataChannel; - -var _utils = require('../utils'); - -var utils = _interopRequireWildcard(_utils); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - +exports.shimSenderGetStats = shimSenderGetStats; +var utils = _interopRequireWildcard(require("../utils")); +var _getusermedia = require("./getusermedia"); +var _getdisplaymedia = require("./getdisplaymedia"); +function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function shimOnTrack(window) { - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + if (_typeof(window) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { get: function get() { - return { receiver: this.receiver }; + return { + receiver: this.receiver + }; } }); } } - -function shimPeerConnection(window) { - var browserDetails = utils.detectBrowser(window); - - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) { +function shimPeerConnection(window, browserDetails) { + if (_typeof(window) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) { return; // probably media.peerconnection.enabled=false in about:config } if (!window.RTCPeerConnection && window.mozRTCPeerConnection) { // very basic support for old versions. window.RTCPeerConnection = window.mozRTCPeerConnection; } - if (browserDetails.version < 53) { // shim away need for obsolete RTCIceCandidate/RTCSessionDescription. ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { @@ -1880,27 +1518,15 @@ function shimPeerConnection(window) { window.RTCPeerConnection.prototype[method] = methodObj[method]; }); } - - // support for addIceCandidate(null or undefined) - // as well as ignoring {sdpMid, candidate: ""} - if (browserDetails.version < 68) { - var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate; - window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() { - if (!arguments[0]) { - if (arguments[1]) { - arguments[1].apply(null); - } - return Promise.resolve(); - } - // Firefox 68+ emits and processes {candidate: "", ...}, ignore - // in older versions. - if (arguments[0] && arguments[0].candidate === '') { - return Promise.resolve(); - } - return nativeAddIceCandidate.apply(this, arguments); - }; +} +function shimGetStats(window, browserDetails) { + if (_typeof(window) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) { + return; // probably media.peerconnection.enabled=false in about:config + } + if (browserDetails.version >= 151) { + // https://bugzilla.mozilla.org/show_bug.cgi?id=1056433 + return; } - var modernStatsTypes = { inboundrtp: 'inbound-rtp', outboundrtp: 'outbound-rtp', @@ -1908,14 +1534,16 @@ function shimPeerConnection(window) { localcandidate: 'local-candidate', remotecandidate: 'remote-candidate' }; - var nativeGetStats = window.RTCPeerConnection.prototype.getStats; window.RTCPeerConnection.prototype.getStats = function getStats() { var _arguments = Array.prototype.slice.call(arguments), - selector = _arguments[0], - onSucc = _arguments[1], - onErr = _arguments[2]; - + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + if (this.signalingState === 'closed') { + // No longer required in FF151+ + return Promise.resolve(new Map()); + } return nativeGetStats.apply(this, [selector || null]).then(function (stats) { if (browserDetails.version < 53 && !onSucc) { // Shim only promise getStats with spec-hyphens in type names @@ -1940,9 +1568,8 @@ function shimPeerConnection(window) { }).then(onSucc, onErr); }; } - function shimSenderGetStats(window) { - if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { return; } if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) { @@ -1952,7 +1579,6 @@ function shimSenderGetStats(window) { if (origGetSenders) { window.RTCPeerConnection.prototype.getSenders = function getSenders() { var _this = this; - var senders = origGetSenders.apply(this, []); senders.forEach(function (sender) { return sender._pc = _this; @@ -1960,7 +1586,6 @@ function shimSenderGetStats(window) { return senders; }; } - var origAddTrack = window.RTCPeerConnection.prototype.addTrack; if (origAddTrack) { window.RTCPeerConnection.prototype.addTrack = function addTrack() { @@ -1973,9 +1598,8 @@ function shimSenderGetStats(window) { return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map()); }; } - function shimReceiverGetStats(window) { - if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { return; } if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) { @@ -1985,7 +1609,6 @@ function shimReceiverGetStats(window) { if (origGetReceivers) { window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { var _this2 = this; - var receivers = origGetReceivers.apply(this, []); receivers.forEach(function (receiver) { return receiver._pc = _this2; @@ -2001,14 +1624,12 @@ function shimReceiverGetStats(window) { return this._pc.getStats(this.track); }; } - function shimRemoveStream(window) { if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) { return; } window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { var _this3 = this; - utils.deprecated('removeStream', 'removeTrack'); this.getSenders().forEach(function (sender) { if (sender.track && stream.getTracks().includes(sender.track)) { @@ -2017,7 +1638,6 @@ function shimRemoveStream(window) { }); }; } - function shimRTCDataChannel(window) { // rename DataChannel to RTCDataChannel (native fix in FF60): // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851 @@ -2025,39 +1645,164 @@ function shimRTCDataChannel(window) { window.RTCDataChannel = window.DataChannel; } } - -},{"../utils":15,"./getdisplaymedia":12,"./getusermedia":13}],12:[function(require,module,exports){ -/* - * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ -/* eslint-env node */ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.shimGetDisplayMedia = shimGetDisplayMedia; -function shimGetDisplayMedia(window, preferredMediaSource) { - if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { - return; - } - if (!window.navigator.mediaDevices) { +function shimAddTransceiver(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) { return; } - window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { - if (!(constraints && constraints.video)) { - var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined'); + var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; + if (origAddTransceiver) { + window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() { + this.setParametersPromises = []; + // WebIDL input coercion and validation + var sendEncodings = arguments[1] && arguments[1].sendEncodings; + if (sendEncodings === undefined) { + sendEncodings = []; + } + sendEncodings = _toConsumableArray(sendEncodings); + var shouldPerformCheck = sendEncodings.length > 0; + if (shouldPerformCheck) { + // If sendEncodings params are provided, validate grammar + sendEncodings.forEach(function (encodingParam) { + if ('rid' in encodingParam) { + var ridRegex = /^[a-z0-9]{0,16}$/i; + if (!ridRegex.test(encodingParam.rid)) { + throw new TypeError('Invalid RID value provided.'); + } + } + if ('scaleResolutionDownBy' in encodingParam) { + if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) { + throw new RangeError('scale_resolution_down_by must be >= 1.0'); + } + } + if ('maxFramerate' in encodingParam) { + if (!(parseFloat(encodingParam.maxFramerate) >= 0)) { + throw new RangeError('max_framerate must be >= 0.0'); + } + } + }); + } + var transceiver = origAddTransceiver.apply(this, arguments); + if (shouldPerformCheck) { + // Check if the init options were applied. If not we do this in an + // asynchronous way and save the promise reference in a global object. + // This is an ugly hack, but at the same time is way more robust than + // checking the sender parameters before and after the createOffer + // Also note that after the createoffer we are not 100% sure that + // the params were asynchronously applied so we might miss the + // opportunity to recreate offer. + var sender = transceiver.sender; + var params = sender.getParameters(); + if (!('encodings' in params) || + // Avoid being fooled by patched getParameters() below. + params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) { + params.encodings = sendEncodings; + sender.sendEncodings = sendEncodings; + this.setParametersPromises.push(sender.setParameters(params).then(function () { + delete sender.sendEncodings; + })["catch"](function () { + delete sender.sendEncodings; + })); + } + } + return transceiver; + }; + } +} +function shimGetParameters(window) { + if (!(_typeof(window) === 'object' && window.RTCRtpSender)) { + return; + } + var origGetParameters = window.RTCRtpSender.prototype.getParameters; + if (origGetParameters) { + window.RTCRtpSender.prototype.getParameters = function getParameters() { + var params = origGetParameters.apply(this, arguments); + if (!('encodings' in params)) { + params.encodings = [].concat(this.sendEncodings || [{}]); + } + return params; + }; + } +} +function shimCreateOffer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer() { + var _arguments2 = arguments, + _this4 = this; + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateOffer.apply(_this4, _arguments2); + })["finally"](function () { + _this4.setParametersPromises = []; + }); + } + return origCreateOffer.apply(this, arguments); + }; +} +function shimCreateAnswer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; + window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { + var _arguments3 = arguments, + _this5 = this; + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateAnswer.apply(_this5, _arguments3); + })["finally"](function () { + _this5.setParametersPromises = []; + }); + } + return origCreateAnswer.apply(this, arguments); + }; +} + +},{"../utils":10,"./getdisplaymedia":7,"./getusermedia":8}],7:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, preferredMediaSource) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + if (!(constraints && constraints.video)) { + var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined'); err.name = 'NotFoundError'; // from https://heycam.github.io/webidl/#idl-DOMException-error-names err.code = 8; return Promise.reject(err); } if (constraints.video === true) { - constraints.video = { mediaSource: preferredMediaSource }; + constraints.video = { + mediaSource: preferredMediaSource + }; } else { constraints.video.mediaSource = preferredMediaSource; } @@ -2065,7 +1810,7 @@ function shimGetDisplayMedia(window, preferredMediaSource) { }; } -},{}],13:[function(require,module,exports){ +},{}],8:[function(require,module,exports){ /* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * @@ -2079,28 +1824,18 @@ function shimGetDisplayMedia(window, preferredMediaSource) { Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - exports.shimGetUserMedia = shimGetUserMedia; - -var _utils = require('../utils'); - -var utils = _interopRequireWildcard(_utils); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function shimGetUserMedia(window) { - var browserDetails = utils.detectBrowser(window); +var utils = _interopRequireWildcard(require("../utils")); +function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function shimGetUserMedia(window, browserDetails) { var navigator = window && window.navigator; var MediaStreamTrack = window && window.MediaStreamTrack; - navigator.getUserMedia = function (constraints, onSuccess, onError) { // Replace Firefox 44+'s deprecation warning with unprefixed version. utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia'); navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError); }; - if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) { var remap = function remap(obj, a, b) { if (a in obj && !(b in obj)) { @@ -2108,17 +1843,15 @@ function shimGetUserMedia(window) { delete obj[a]; } }; - var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); navigator.mediaDevices.getUserMedia = function (c) { - if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object' && _typeof(c.audio) === 'object') { + if (_typeof(c) === 'object' && _typeof(c.audio) === 'object') { c = JSON.parse(JSON.stringify(c)); remap(c.audio, 'autoGainControl', 'mozAutoGainControl'); remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression'); } return nativeGetUserMedia(c); }; - if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) { var nativeGetSettings = MediaStreamTrack.prototype.getSettings; MediaStreamTrack.prototype.getSettings = function () { @@ -2128,11 +1861,10 @@ function shimGetUserMedia(window) { return obj; }; } - if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) { var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints; MediaStreamTrack.prototype.applyConstraints = function (c) { - if (this.kind === 'audio' && (typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object') { + if (this.kind === 'audio' && _typeof(c) === 'object') { c = JSON.parse(JSON.stringify(c)); remap(c, 'autoGainControl', 'mozAutoGainControl'); remap(c, 'noiseSuppression', 'mozNoiseSuppression'); @@ -2143,7 +1875,7 @@ function shimGetUserMedia(window) { } } -},{"../utils":15}],14:[function(require,module,exports){ +},{"../utils":10}],9:[function(require,module,exports){ /* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * @@ -2156,26 +1888,20 @@ function shimGetUserMedia(window) { Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.shimLocalStreamsAPI = shimLocalStreamsAPI; -exports.shimRemoteStreamsAPI = shimRemoteStreamsAPI; +exports.shimAudioContext = shimAudioContext; exports.shimCallbacksAPI = shimCallbacksAPI; -exports.shimGetUserMedia = shimGetUserMedia; exports.shimConstraints = shimConstraints; +exports.shimCreateOfferLegacy = shimCreateOfferLegacy; +exports.shimGetUserMedia = shimGetUserMedia; +exports.shimLocalStreamsAPI = shimLocalStreamsAPI; exports.shimRTCIceServerUrls = shimRTCIceServerUrls; +exports.shimRemoteStreamsAPI = shimRemoteStreamsAPI; exports.shimTrackEventTransceiver = shimTrackEventTransceiver; -exports.shimCreateOfferLegacy = shimCreateOfferLegacy; - -var _utils = require('../utils'); - -var utils = _interopRequireWildcard(_utils); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - +var utils = _interopRequireWildcard(require("../utils")); +function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function shimLocalStreamsAPI(window) { - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + if (_typeof(window) !== 'object' || !window.RTCPeerConnection) { return; } if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) { @@ -2190,7 +1916,6 @@ function shimLocalStreamsAPI(window) { var _addTrack = window.RTCPeerConnection.prototype.addTrack; window.RTCPeerConnection.prototype.addStream = function addStream(stream) { var _this = this; - if (!this._localStreams) { this._localStreams = []; } @@ -2206,23 +1931,26 @@ function shimLocalStreamsAPI(window) { return _addTrack.call(_this, track, stream); }); }; - window.RTCPeerConnection.prototype.addTrack = function addTrack(track) { - var stream = arguments[1]; - if (stream) { - if (!this._localStreams) { - this._localStreams = [stream]; - } else if (!this._localStreams.includes(stream)) { - this._localStreams.push(stream); - } + var _this2 = this; + for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + streams[_key - 1] = arguments[_key]; + } + if (streams) { + streams.forEach(function (stream) { + if (!_this2._localStreams) { + _this2._localStreams = [stream]; + } else if (!_this2._localStreams.includes(stream)) { + _this2._localStreams.push(stream); + } + }); } return _addTrack.apply(this, arguments); }; } if (!('removeStream' in window.RTCPeerConnection.prototype)) { window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { - var _this2 = this; - + var _this3 = this; if (!this._localStreams) { this._localStreams = []; } @@ -2234,15 +1962,14 @@ function shimLocalStreamsAPI(window) { var tracks = stream.getTracks(); this.getSenders().forEach(function (sender) { if (tracks.includes(sender.track)) { - _this2.removeTrack(sender); + _this3.removeTrack(sender); } }); }; } } - function shimRemoteStreamsAPI(window) { - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + if (_typeof(window) !== 'object' || !window.RTCPeerConnection) { return; } if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) { @@ -2256,8 +1983,7 @@ function shimRemoteStreamsAPI(window) { return this._onaddstream; }, set: function set(f) { - var _this3 = this; - + var _this4 = this; if (this._onaddstream) { this.removeEventListener('addstream', this._onaddstream); this.removeEventListener('track', this._onaddstreampoly); @@ -2265,16 +1991,16 @@ function shimRemoteStreamsAPI(window) { this.addEventListener('addstream', this._onaddstream = f); this.addEventListener('track', this._onaddstreampoly = function (e) { e.streams.forEach(function (stream) { - if (!_this3._remoteStreams) { - _this3._remoteStreams = []; + if (!_this4._remoteStreams) { + _this4._remoteStreams = []; } - if (_this3._remoteStreams.includes(stream)) { + if (_this4._remoteStreams.includes(stream)) { return; } - _this3._remoteStreams.push(stream); + _this4._remoteStreams.push(stream); var event = new Event('addstream'); event.stream = stream; - _this3.dispatchEvent(event); + _this4.dispatchEvent(event); }); }); } @@ -2302,9 +2028,8 @@ function shimRemoteStreamsAPI(window) { }; } } - function shimCallbacksAPI(window) { - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + if (_typeof(window) !== 'object' || !window.RTCPeerConnection) { return; } var prototype = window.RTCPeerConnection.prototype; @@ -2313,7 +2038,6 @@ function shimCallbacksAPI(window) { var setLocalDescription = prototype.setLocalDescription; var setRemoteDescription = prototype.setRemoteDescription; var addIceCandidate = prototype.addIceCandidate; - prototype.createOffer = function createOffer(successCallback, failureCallback) { var options = arguments.length >= 2 ? arguments[2] : arguments[0]; var promise = origCreateOffer.apply(this, [options]); @@ -2323,7 +2047,6 @@ function shimCallbacksAPI(window) { promise.then(successCallback, failureCallback); return Promise.resolve(); }; - prototype.createAnswer = function createAnswer(successCallback, failureCallback) { var options = arguments.length >= 2 ? arguments[2] : arguments[0]; var promise = origCreateAnswer.apply(this, [options]); @@ -2333,7 +2056,6 @@ function shimCallbacksAPI(window) { promise.then(successCallback, failureCallback); return Promise.resolve(); }; - var withCallback = function withCallback(description, successCallback, failureCallback) { var promise = setLocalDescription.apply(this, [description]); if (!failureCallback) { @@ -2343,7 +2065,6 @@ function shimCallbacksAPI(window) { return Promise.resolve(); }; prototype.setLocalDescription = withCallback; - withCallback = function withCallback(description, successCallback, failureCallback) { var promise = setRemoteDescription.apply(this, [description]); if (!failureCallback) { @@ -2353,7 +2074,6 @@ function shimCallbacksAPI(window) { return Promise.resolve(); }; prototype.setRemoteDescription = withCallback; - withCallback = function withCallback(candidate, successCallback, failureCallback) { var promise = addIceCandidate.apply(this, [candidate]); if (!failureCallback) { @@ -2364,10 +2084,8 @@ function shimCallbacksAPI(window) { }; prototype.addIceCandidate = withCallback; } - function shimGetUserMedia(window) { var navigator = window && window.navigator; - if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { // shim not needed in Safari 12.1 var mediaDevices = navigator.mediaDevices; @@ -2376,23 +2094,24 @@ function shimGetUserMedia(window) { return _getUserMedia(shimConstraints(constraints)); }; } - if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) { navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb); }.bind(navigator); } } - function shimConstraints(constraints) { if (constraints && constraints.video !== undefined) { - return Object.assign({}, constraints, { video: utils.compactObject(constraints.video) }); + return Object.assign({}, constraints, { + video: utils.compactObject(constraints.video) + }); } - return constraints; } - function shimRTCIceServerUrls(window) { + if (!window.RTCPeerConnection) { + return; + } // migrate from non-spec RTCIceServer.url to RTCIceServer.urls var OrigPeerConnection = window.RTCPeerConnection; window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) { @@ -2400,7 +2119,7 @@ function shimRTCIceServerUrls(window) { var newIceServers = []; for (var i = 0; i < pcConfig.iceServers.length; i++) { var server = pcConfig.iceServers[i]; - if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) { + if (server.urls === undefined && server.url) { utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls'); server = JSON.parse(JSON.stringify(server)); server.urls = server.url; @@ -2416,7 +2135,7 @@ function shimRTCIceServerUrls(window) { }; window.RTCPeerConnection.prototype = OrigPeerConnection.prototype; // wrap static methods. Currently just generateCertificate. - if ('generateCertificate' in window.RTCPeerConnection) { + if ('generateCertificate' in OrigPeerConnection) { Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', { get: function get() { return OrigPeerConnection.generateCertificate; @@ -2424,18 +2143,18 @@ function shimRTCIceServerUrls(window) { }); } } - function shimTrackEventTransceiver(window) { // Add event.transceiver member over deprecated event.receiver - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + if (_typeof(window) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { get: function get() { - return { receiver: this.receiver }; + return { + receiver: this.receiver + }; } }); } } - function shimCreateOfferLegacy(window) { var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) { @@ -2462,9 +2181,10 @@ function shimCreateOfferLegacy(window) { } } } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) { - this.addTransceiver('audio'); + this.addTransceiver('audio', { + direction: 'recvonly' + }); } - if (typeof offerOptions.offerToReceiveVideo !== 'undefined') { // support bit values offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo; @@ -2487,14 +2207,22 @@ function shimCreateOfferLegacy(window) { } } } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) { - this.addTransceiver('video'); + this.addTransceiver('video', { + direction: 'recvonly' + }); } } return origCreateOffer.apply(this, arguments); }; } +function shimAudioContext(window) { + if (_typeof(window) !== 'object' || window.AudioContext) { + return; + } + window.AudioContext = window.webkitAudioContext; +} -},{"../utils":15}],15:[function(require,module,exports){ +},{"../utils":10}],10:[function(require,module,exports){ /* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * @@ -2508,22 +2236,20 @@ function shimCreateOfferLegacy(window) { Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.extractVersion = extractVersion; -exports.wrapPeerConnectionEvent = wrapPeerConnectionEvent; +exports.compactObject = compactObject; +exports.deprecated = deprecated; +exports.detectBrowser = detectBrowser; exports.disableLog = disableLog; exports.disableWarnings = disableWarnings; +exports.extractVersion = extractVersion; +exports.filterStats = filterStats; exports.log = log; -exports.deprecated = deprecated; -exports.detectBrowser = detectBrowser; -exports.compactObject = compactObject; exports.walkStats = walkStats; -exports.filterStats = filterStats; - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - +exports.wrapPeerConnectionEvent = wrapPeerConnectionEvent; +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var logDisabled_ = true; var deprecationWarnings_ = true; @@ -2537,7 +2263,7 @@ var deprecationWarnings_ = true; */ function extractVersion(uastring, expr, pos) { var match = uastring.match(expr); - return match && match.length >= pos && parseInt(match[pos], 10); + return match && match.length >= pos && parseFloat(match[pos], 10); } // Wraps the peerconnection event eventNameToWrap in a function @@ -2547,6 +2273,11 @@ function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) { if (!window.RTCPeerConnection) { return; } + var addEventListener = Object.getOwnPropertyDescriptor(EventTarget.prototype, 'addEventListener'); + if (!addEventListener.writable) { + log('Unable to polyfill events'); + return; + } var proto = window.RTCPeerConnection.prototype; var nativeAddEventListener = proto.addEventListener; proto.addEventListener = function (nativeEventName, cb) { @@ -2556,24 +2287,38 @@ function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) { var wrappedCallback = function wrappedCallback(e) { var modifiedEvent = wrapper(e); if (modifiedEvent) { - cb(modifiedEvent); + if (cb.handleEvent) { + cb.handleEvent(modifiedEvent); + } else { + cb(modifiedEvent); + } } }; this._eventMap = this._eventMap || {}; - this._eventMap[cb] = wrappedCallback; + if (!this._eventMap[eventNameToWrap]) { + this._eventMap[eventNameToWrap] = new Map(); + } + this._eventMap[eventNameToWrap].set(cb, wrappedCallback); return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]); }; - var nativeRemoveEventListener = proto.removeEventListener; proto.removeEventListener = function (nativeEventName, cb) { - if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[cb]) { + if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) { + return nativeRemoveEventListener.apply(this, arguments); + } + if (!this._eventMap[eventNameToWrap].has(cb)) { return nativeRemoveEventListener.apply(this, arguments); } - var unwrappedCb = this._eventMap[cb]; - delete this._eventMap[cb]; + var unwrappedCb = this._eventMap[eventNameToWrap].get(cb); + this._eventMap[eventNameToWrap]["delete"](cb); + if (this._eventMap[eventNameToWrap].size === 0) { + delete this._eventMap[eventNameToWrap]; + } + if (Object.keys(this._eventMap).length === 0) { + delete this._eventMap; + } return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]); }; - Object.defineProperty(proto, 'on' + eventNameToWrap, { get: function get() { return this['_on' + eventNameToWrap]; @@ -2587,15 +2332,13 @@ function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) { this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb); } }, - enumerable: true, configurable: true }); } - function disableLog(bool) { if (typeof bool !== 'boolean') { - return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + return new Error('Argument type: ' + _typeof(bool) + '. Please use a boolean.'); } logDisabled_ = bool; return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled'; @@ -2607,2066 +2350,211 @@ function disableLog(bool) { */ function disableWarnings(bool) { if (typeof bool !== 'boolean') { - return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + return new Error('Argument type: ' + _typeof(bool) + '. Please use a boolean.'); } deprecationWarnings_ = !bool; return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled'); } - function log() { - if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object') { - if (logDisabled_) { - return; - } - if (typeof console !== 'undefined' && typeof console.log === 'function') { - console.log.apply(console, arguments); - } - } -} - -/** - * Shows a deprecation warning suggesting the modern and spec-compatible API. - */ -function deprecated(oldMethod, newMethod) { - if (!deprecationWarnings_) { - return; - } - console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.'); -} - -/** - * Browser detector. - * - * @return {object} result containing browser and version - * properties. - */ -function detectBrowser(window) { - var navigator = window.navigator; - - // Returned result object. - - var result = { browser: null, version: null }; - - // Fail early if it's not a browser - if (typeof window === 'undefined' || !window.navigator) { - result.browser = 'Not a browser.'; - return result; - } - - if (navigator.mozGetUserMedia) { - // Firefox. - result.browser = 'firefox'; - result.version = extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1); - } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection && !window.RTCIceGatherer) { - // Chrome, Chromium, Webview, Opera. - // Version matches Chrome/WebRTC version. - // Chrome 74 removed webkitGetUserMedia on http as well so we need the - // more complicated fallback to webkitRTCPeerConnection. - result.browser = 'chrome'; - result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2); - } else if (navigator.mediaDevices && navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)) { - // Edge. - result.browser = 'edge'; - result.version = extractVersion(navigator.userAgent, /Edge\/(\d+).(\d+)$/, 2); - } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { - // Safari. - result.browser = 'safari'; - result.version = extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1); - result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype; - } else { - // Default fallthrough: not supported. - result.browser = 'Not a supported browser.'; - return result; - } - - return result; -} - -/** - * Checks if something is an object. - * - * @param {*} val The something you want to check. - * @return true if val is an object, false otherwise. - */ -function isObject(val) { - return Object.prototype.toString.call(val) === '[object Object]'; -} - -/** - * Remove all empty objects and undefined values - * from a nested object -- an enhanced and vanilla version - * of Lodash's `compact`. - */ -function compactObject(data) { - if (!isObject(data)) { - return data; - } - - return Object.keys(data).reduce(function (accumulator, key) { - var isObj = isObject(data[key]); - var value = isObj ? compactObject(data[key]) : data[key]; - var isEmptyObject = isObj && !Object.keys(value).length; - if (value === undefined || isEmptyObject) { - return accumulator; - } - return Object.assign(accumulator, _defineProperty({}, key, value)); - }, {}); -} - -/* iterates the stats graph recursively. */ -function walkStats(stats, base, resultSet) { - if (!base || resultSet.has(base.id)) { - return; - } - resultSet.set(base.id, base); - Object.keys(base).forEach(function (name) { - if (name.endsWith('Id')) { - walkStats(stats, stats.get(base[name]), resultSet); - } else if (name.endsWith('Ids')) { - base[name].forEach(function (id) { - walkStats(stats, stats.get(id), resultSet); - }); - } - }); -} - -/* filter getStats for a sender/receiver track. */ -function filterStats(result, track, outbound) { - var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp'; - var filteredResult = new Map(); - if (track === null) { - return filteredResult; - } - var trackStats = []; - result.forEach(function (value) { - if (value.type === 'track' && value.trackIdentifier === track.id) { - trackStats.push(value); - } - }); - trackStats.forEach(function (trackStat) { - result.forEach(function (stats) { - if (stats.type === streamStatsType && stats.trackId === trackStat.id) { - walkStats(result, stats, filteredResult); - } - }); - }); - return filteredResult; -} - -},{}],16:[function(require,module,exports){ -/* - * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ -'use strict'; - -var SDPUtils = require('sdp'); - -function fixStatsType(stat) { - return { - inboundrtp: 'inbound-rtp', - outboundrtp: 'outbound-rtp', - candidatepair: 'candidate-pair', - localcandidate: 'local-candidate', - remotecandidate: 'remote-candidate' - }[stat.type] || stat.type; -} - -function writeMediaSection(transceiver, caps, type, stream, dtlsRole) { - var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps); - - // Map ICE parameters (ufrag, pwd) to SDP. - sdp += SDPUtils.writeIceParameters( - transceiver.iceGatherer.getLocalParameters()); - - // Map DTLS parameters to SDP. - sdp += SDPUtils.writeDtlsParameters( - transceiver.dtlsTransport.getLocalParameters(), - type === 'offer' ? 'actpass' : dtlsRole || 'active'); - - sdp += 'a=mid:' + transceiver.mid + '\r\n'; - - if (transceiver.rtpSender && transceiver.rtpReceiver) { - sdp += 'a=sendrecv\r\n'; - } else if (transceiver.rtpSender) { - sdp += 'a=sendonly\r\n'; - } else if (transceiver.rtpReceiver) { - sdp += 'a=recvonly\r\n'; - } else { - sdp += 'a=inactive\r\n'; - } - - if (transceiver.rtpSender) { - var trackId = transceiver.rtpSender._initialTrackId || - transceiver.rtpSender.track.id; - transceiver.rtpSender._initialTrackId = trackId; - // spec. - var msid = 'msid:' + (stream ? stream.id : '-') + ' ' + - trackId + '\r\n'; - sdp += 'a=' + msid; - // for Chrome. Legacy should no longer be required. - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + - ' ' + msid; - - // RTX - if (transceiver.sendEncodingParameters[0].rtx) { - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + - ' ' + msid; - sdp += 'a=ssrc-group:FID ' + - transceiver.sendEncodingParameters[0].ssrc + ' ' + - transceiver.sendEncodingParameters[0].rtx.ssrc + - '\r\n'; - } - } - // FIXME: this should be written by writeRtpDescription. - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + - ' cname:' + SDPUtils.localCName + '\r\n'; - if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) { - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + - ' cname:' + SDPUtils.localCName + '\r\n'; - } - return sdp; -} - -// Edge does not like -// 1) stun: filtered after 14393 unless ?transport=udp is present -// 2) turn: that does not have all of turn:host:port?transport=udp -// 3) turn: with ipv6 addresses -// 4) turn: occurring muliple times -function filterIceServers(iceServers, edgeVersion) { - var hasTurn = false; - iceServers = JSON.parse(JSON.stringify(iceServers)); - return iceServers.filter(function(server) { - if (server && (server.urls || server.url)) { - var urls = server.urls || server.url; - if (server.url && !server.urls) { - console.warn('RTCIceServer.url is deprecated! Use urls instead.'); - } - var isString = typeof urls === 'string'; - if (isString) { - urls = [urls]; - } - urls = urls.filter(function(url) { - var validTurn = url.indexOf('turn:') === 0 && - url.indexOf('transport=udp') !== -1 && - url.indexOf('turn:[') === -1 && - !hasTurn; - - if (validTurn) { - hasTurn = true; - return true; - } - return url.indexOf('stun:') === 0 && edgeVersion >= 14393 && - url.indexOf('?transport=udp') === -1; - }); - - delete server.url; - server.urls = isString ? urls[0] : urls; - return !!urls.length; - } - }); -} - -// Determines the intersection of local and remote capabilities. -function getCommonCapabilities(localCapabilities, remoteCapabilities) { - var commonCapabilities = { - codecs: [], - headerExtensions: [], - fecMechanisms: [] - }; - - var findCodecByPayloadType = function(pt, codecs) { - pt = parseInt(pt, 10); - for (var i = 0; i < codecs.length; i++) { - if (codecs[i].payloadType === pt || - codecs[i].preferredPayloadType === pt) { - return codecs[i]; - } - } - }; - - var rtxCapabilityMatches = function(lRtx, rRtx, lCodecs, rCodecs) { - var lCodec = findCodecByPayloadType(lRtx.parameters.apt, lCodecs); - var rCodec = findCodecByPayloadType(rRtx.parameters.apt, rCodecs); - return lCodec && rCodec && - lCodec.name.toLowerCase() === rCodec.name.toLowerCase(); - }; - - localCapabilities.codecs.forEach(function(lCodec) { - for (var i = 0; i < remoteCapabilities.codecs.length; i++) { - var rCodec = remoteCapabilities.codecs[i]; - if (lCodec.name.toLowerCase() === rCodec.name.toLowerCase() && - lCodec.clockRate === rCodec.clockRate) { - if (lCodec.name.toLowerCase() === 'rtx' && - lCodec.parameters && rCodec.parameters.apt) { - // for RTX we need to find the local rtx that has a apt - // which points to the same local codec as the remote one. - if (!rtxCapabilityMatches(lCodec, rCodec, - localCapabilities.codecs, remoteCapabilities.codecs)) { - continue; - } - } - rCodec = JSON.parse(JSON.stringify(rCodec)); // deepcopy - // number of channels is the highest common number of channels - rCodec.numChannels = Math.min(lCodec.numChannels, - rCodec.numChannels); - // push rCodec so we reply with offerer payload type - commonCapabilities.codecs.push(rCodec); - - // determine common feedback mechanisms - rCodec.rtcpFeedback = rCodec.rtcpFeedback.filter(function(fb) { - for (var j = 0; j < lCodec.rtcpFeedback.length; j++) { - if (lCodec.rtcpFeedback[j].type === fb.type && - lCodec.rtcpFeedback[j].parameter === fb.parameter) { - return true; - } - } - return false; - }); - // FIXME: also need to determine .parameters - // see https://github.com/openpeer/ortc/issues/569 - break; - } - } - }); - - localCapabilities.headerExtensions.forEach(function(lHeaderExtension) { - for (var i = 0; i < remoteCapabilities.headerExtensions.length; - i++) { - var rHeaderExtension = remoteCapabilities.headerExtensions[i]; - if (lHeaderExtension.uri === rHeaderExtension.uri) { - commonCapabilities.headerExtensions.push(rHeaderExtension); - break; - } - } - }); - - // FIXME: fecMechanisms - return commonCapabilities; -} - -// is action=setLocalDescription with type allowed in signalingState -function isActionAllowedInSignalingState(action, type, signalingState) { - return { - offer: { - setLocalDescription: ['stable', 'have-local-offer'], - setRemoteDescription: ['stable', 'have-remote-offer'] - }, - answer: { - setLocalDescription: ['have-remote-offer', 'have-local-pranswer'], - setRemoteDescription: ['have-local-offer', 'have-remote-pranswer'] - } - }[type][action].indexOf(signalingState) !== -1; -} - -function maybeAddCandidate(iceTransport, candidate) { - // Edge's internal representation adds some fields therefore - // not all fieldѕ are taken into account. - var alreadyAdded = iceTransport.getRemoteCandidates() - .find(function(remoteCandidate) { - return candidate.foundation === remoteCandidate.foundation && - candidate.ip === remoteCandidate.ip && - candidate.port === remoteCandidate.port && - candidate.priority === remoteCandidate.priority && - candidate.protocol === remoteCandidate.protocol && - candidate.type === remoteCandidate.type; - }); - if (!alreadyAdded) { - iceTransport.addRemoteCandidate(candidate); - } - return !alreadyAdded; -} - - -function makeError(name, description) { - var e = new Error(description); - e.name = name; - // legacy error codes from https://heycam.github.io/webidl/#idl-DOMException-error-names - e.code = { - NotSupportedError: 9, - InvalidStateError: 11, - InvalidAccessError: 15, - TypeError: undefined, - OperationError: undefined - }[name]; - return e; -} - -module.exports = function(window, edgeVersion) { - // https://w3c.github.io/mediacapture-main/#mediastream - // Helper function to add the track to the stream and - // dispatch the event ourselves. - function addTrackToStreamAndFireEvent(track, stream) { - stream.addTrack(track); - stream.dispatchEvent(new window.MediaStreamTrackEvent('addtrack', - {track: track})); - } - - function removeTrackFromStreamAndFireEvent(track, stream) { - stream.removeTrack(track); - stream.dispatchEvent(new window.MediaStreamTrackEvent('removetrack', - {track: track})); - } - - function fireAddTrack(pc, track, receiver, streams) { - var trackEvent = new Event('track'); - trackEvent.track = track; - trackEvent.receiver = receiver; - trackEvent.transceiver = {receiver: receiver}; - trackEvent.streams = streams; - window.setTimeout(function() { - pc._dispatchEvent('track', trackEvent); - }); - } - - var RTCPeerConnection = function(config) { - var pc = this; - - var _eventTarget = document.createDocumentFragment(); - ['addEventListener', 'removeEventListener', 'dispatchEvent'] - .forEach(function(method) { - pc[method] = _eventTarget[method].bind(_eventTarget); - }); - - this.canTrickleIceCandidates = null; - - this.needNegotiation = false; - - this.localStreams = []; - this.remoteStreams = []; - - this._localDescription = null; - this._remoteDescription = null; - - this.signalingState = 'stable'; - this.iceConnectionState = 'new'; - this.connectionState = 'new'; - this.iceGatheringState = 'new'; - - config = JSON.parse(JSON.stringify(config || {})); - - this.usingBundle = config.bundlePolicy === 'max-bundle'; - if (config.rtcpMuxPolicy === 'negotiate') { - throw(makeError('NotSupportedError', - 'rtcpMuxPolicy \'negotiate\' is not supported')); - } else if (!config.rtcpMuxPolicy) { - config.rtcpMuxPolicy = 'require'; - } - - switch (config.iceTransportPolicy) { - case 'all': - case 'relay': - break; - default: - config.iceTransportPolicy = 'all'; - break; - } - - switch (config.bundlePolicy) { - case 'balanced': - case 'max-compat': - case 'max-bundle': - break; - default: - config.bundlePolicy = 'balanced'; - break; - } - - config.iceServers = filterIceServers(config.iceServers || [], edgeVersion); - - this._iceGatherers = []; - if (config.iceCandidatePoolSize) { - for (var i = config.iceCandidatePoolSize; i > 0; i--) { - this._iceGatherers.push(new window.RTCIceGatherer({ - iceServers: config.iceServers, - gatherPolicy: config.iceTransportPolicy - })); - } - } else { - config.iceCandidatePoolSize = 0; - } - - this._config = config; - - // per-track iceGathers, iceTransports, dtlsTransports, rtpSenders, ... - // everything that is needed to describe a SDP m-line. - this.transceivers = []; - - this._sdpSessionId = SDPUtils.generateSessionId(); - this._sdpSessionVersion = 0; - - this._dtlsRole = undefined; // role for a=setup to use in answers. - - this._isClosed = false; - }; - - Object.defineProperty(RTCPeerConnection.prototype, 'localDescription', { - configurable: true, - get: function() { - return this._localDescription; - } - }); - Object.defineProperty(RTCPeerConnection.prototype, 'remoteDescription', { - configurable: true, - get: function() { - return this._remoteDescription; - } - }); - - // set up event handlers on prototype - RTCPeerConnection.prototype.onicecandidate = null; - RTCPeerConnection.prototype.onaddstream = null; - RTCPeerConnection.prototype.ontrack = null; - RTCPeerConnection.prototype.onremovestream = null; - RTCPeerConnection.prototype.onsignalingstatechange = null; - RTCPeerConnection.prototype.oniceconnectionstatechange = null; - RTCPeerConnection.prototype.onconnectionstatechange = null; - RTCPeerConnection.prototype.onicegatheringstatechange = null; - RTCPeerConnection.prototype.onnegotiationneeded = null; - RTCPeerConnection.prototype.ondatachannel = null; - - RTCPeerConnection.prototype._dispatchEvent = function(name, event) { - if (this._isClosed) { - return; - } - this.dispatchEvent(event); - if (typeof this['on' + name] === 'function') { - this['on' + name](event); - } - }; - - RTCPeerConnection.prototype._emitGatheringStateChange = function() { - var event = new Event('icegatheringstatechange'); - this._dispatchEvent('icegatheringstatechange', event); - }; - - RTCPeerConnection.prototype.getConfiguration = function() { - return this._config; - }; - - RTCPeerConnection.prototype.getLocalStreams = function() { - return this.localStreams; - }; - - RTCPeerConnection.prototype.getRemoteStreams = function() { - return this.remoteStreams; - }; - - // internal helper to create a transceiver object. - // (which is not yet the same as the WebRTC 1.0 transceiver) - RTCPeerConnection.prototype._createTransceiver = function(kind, doNotAdd) { - var hasBundleTransport = this.transceivers.length > 0; - var transceiver = { - track: null, - iceGatherer: null, - iceTransport: null, - dtlsTransport: null, - localCapabilities: null, - remoteCapabilities: null, - rtpSender: null, - rtpReceiver: null, - kind: kind, - mid: null, - sendEncodingParameters: null, - recvEncodingParameters: null, - stream: null, - associatedRemoteMediaStreams: [], - wantReceive: true - }; - if (this.usingBundle && hasBundleTransport) { - transceiver.iceTransport = this.transceivers[0].iceTransport; - transceiver.dtlsTransport = this.transceivers[0].dtlsTransport; - } else { - var transports = this._createIceAndDtlsTransports(); - transceiver.iceTransport = transports.iceTransport; - transceiver.dtlsTransport = transports.dtlsTransport; - } - if (!doNotAdd) { - this.transceivers.push(transceiver); - } - return transceiver; - }; - - RTCPeerConnection.prototype.addTrack = function(track, stream) { - if (this._isClosed) { - throw makeError('InvalidStateError', - 'Attempted to call addTrack on a closed peerconnection.'); - } - - var alreadyExists = this.transceivers.find(function(s) { - return s.track === track; - }); - - if (alreadyExists) { - throw makeError('InvalidAccessError', 'Track already exists.'); - } - - var transceiver; - for (var i = 0; i < this.transceivers.length; i++) { - if (!this.transceivers[i].track && - this.transceivers[i].kind === track.kind) { - transceiver = this.transceivers[i]; - } - } - if (!transceiver) { - transceiver = this._createTransceiver(track.kind); - } - - this._maybeFireNegotiationNeeded(); - - if (this.localStreams.indexOf(stream) === -1) { - this.localStreams.push(stream); - } - - transceiver.track = track; - transceiver.stream = stream; - transceiver.rtpSender = new window.RTCRtpSender(track, - transceiver.dtlsTransport); - return transceiver.rtpSender; - }; - - RTCPeerConnection.prototype.addStream = function(stream) { - var pc = this; - if (edgeVersion >= 15025) { - stream.getTracks().forEach(function(track) { - pc.addTrack(track, stream); - }); - } else { - // Clone is necessary for local demos mostly, attaching directly - // to two different senders does not work (build 10547). - // Fixed in 15025 (or earlier) - var clonedStream = stream.clone(); - stream.getTracks().forEach(function(track, idx) { - var clonedTrack = clonedStream.getTracks()[idx]; - track.addEventListener('enabled', function(event) { - clonedTrack.enabled = event.enabled; - }); - }); - clonedStream.getTracks().forEach(function(track) { - pc.addTrack(track, clonedStream); - }); - } - }; - - RTCPeerConnection.prototype.removeTrack = function(sender) { - if (this._isClosed) { - throw makeError('InvalidStateError', - 'Attempted to call removeTrack on a closed peerconnection.'); - } - - if (!(sender instanceof window.RTCRtpSender)) { - throw new TypeError('Argument 1 of RTCPeerConnection.removeTrack ' + - 'does not implement interface RTCRtpSender.'); - } - - var transceiver = this.transceivers.find(function(t) { - return t.rtpSender === sender; - }); - - if (!transceiver) { - throw makeError('InvalidAccessError', - 'Sender was not created by this connection.'); - } - var stream = transceiver.stream; - - transceiver.rtpSender.stop(); - transceiver.rtpSender = null; - transceiver.track = null; - transceiver.stream = null; - - // remove the stream from the set of local streams - var localStreams = this.transceivers.map(function(t) { - return t.stream; - }); - if (localStreams.indexOf(stream) === -1 && - this.localStreams.indexOf(stream) > -1) { - this.localStreams.splice(this.localStreams.indexOf(stream), 1); - } - - this._maybeFireNegotiationNeeded(); - }; - - RTCPeerConnection.prototype.removeStream = function(stream) { - var pc = this; - stream.getTracks().forEach(function(track) { - var sender = pc.getSenders().find(function(s) { - return s.track === track; - }); - if (sender) { - pc.removeTrack(sender); - } - }); - }; - - RTCPeerConnection.prototype.getSenders = function() { - return this.transceivers.filter(function(transceiver) { - return !!transceiver.rtpSender; - }) - .map(function(transceiver) { - return transceiver.rtpSender; - }); - }; - - RTCPeerConnection.prototype.getReceivers = function() { - return this.transceivers.filter(function(transceiver) { - return !!transceiver.rtpReceiver; - }) - .map(function(transceiver) { - return transceiver.rtpReceiver; - }); - }; - - - RTCPeerConnection.prototype._createIceGatherer = function(sdpMLineIndex, - usingBundle) { - var pc = this; - if (usingBundle && sdpMLineIndex > 0) { - return this.transceivers[0].iceGatherer; - } else if (this._iceGatherers.length) { - return this._iceGatherers.shift(); - } - var iceGatherer = new window.RTCIceGatherer({ - iceServers: this._config.iceServers, - gatherPolicy: this._config.iceTransportPolicy - }); - Object.defineProperty(iceGatherer, 'state', - {value: 'new', writable: true} - ); - - this.transceivers[sdpMLineIndex].bufferedCandidateEvents = []; - this.transceivers[sdpMLineIndex].bufferCandidates = function(event) { - var end = !event.candidate || Object.keys(event.candidate).length === 0; - // polyfill since RTCIceGatherer.state is not implemented in - // Edge 10547 yet. - iceGatherer.state = end ? 'completed' : 'gathering'; - if (pc.transceivers[sdpMLineIndex].bufferedCandidateEvents !== null) { - pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event); - } - }; - iceGatherer.addEventListener('localcandidate', - this.transceivers[sdpMLineIndex].bufferCandidates); - return iceGatherer; - }; - - // start gathering from an RTCIceGatherer. - RTCPeerConnection.prototype._gather = function(mid, sdpMLineIndex) { - var pc = this; - var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer; - if (iceGatherer.onlocalcandidate) { - return; - } - var bufferedCandidateEvents = - this.transceivers[sdpMLineIndex].bufferedCandidateEvents; - this.transceivers[sdpMLineIndex].bufferedCandidateEvents = null; - iceGatherer.removeEventListener('localcandidate', - this.transceivers[sdpMLineIndex].bufferCandidates); - iceGatherer.onlocalcandidate = function(evt) { - if (pc.usingBundle && sdpMLineIndex > 0) { - // if we know that we use bundle we can drop candidates with - // ѕdpMLineIndex > 0. If we don't do this then our state gets - // confused since we dispose the extra ice gatherer. - return; - } - var event = new Event('icecandidate'); - event.candidate = {sdpMid: mid, sdpMLineIndex: sdpMLineIndex}; - - var cand = evt.candidate; - // Edge emits an empty object for RTCIceCandidateComplete‥ - var end = !cand || Object.keys(cand).length === 0; - if (end) { - // polyfill since RTCIceGatherer.state is not implemented in - // Edge 10547 yet. - if (iceGatherer.state === 'new' || iceGatherer.state === 'gathering') { - iceGatherer.state = 'completed'; - } - } else { - if (iceGatherer.state === 'new') { - iceGatherer.state = 'gathering'; - } - // RTCIceCandidate doesn't have a component, needs to be added - cand.component = 1; - // also the usernameFragment. TODO: update SDP to take both variants. - cand.ufrag = iceGatherer.getLocalParameters().usernameFragment; - - var serializedCandidate = SDPUtils.writeCandidate(cand); - event.candidate = Object.assign(event.candidate, - SDPUtils.parseCandidate(serializedCandidate)); - - event.candidate.candidate = serializedCandidate; - event.candidate.toJSON = function() { - return { - candidate: event.candidate.candidate, - sdpMid: event.candidate.sdpMid, - sdpMLineIndex: event.candidate.sdpMLineIndex, - usernameFragment: event.candidate.usernameFragment - }; - }; - } - - // update local description. - var sections = SDPUtils.getMediaSections(pc._localDescription.sdp); - if (!end) { - sections[event.candidate.sdpMLineIndex] += - 'a=' + event.candidate.candidate + '\r\n'; - } else { - sections[event.candidate.sdpMLineIndex] += - 'a=end-of-candidates\r\n'; - } - pc._localDescription.sdp = - SDPUtils.getDescription(pc._localDescription.sdp) + - sections.join(''); - var complete = pc.transceivers.every(function(transceiver) { - return transceiver.iceGatherer && - transceiver.iceGatherer.state === 'completed'; - }); - - if (pc.iceGatheringState !== 'gathering') { - pc.iceGatheringState = 'gathering'; - pc._emitGatheringStateChange(); - } - - // Emit candidate. Also emit null candidate when all gatherers are - // complete. - if (!end) { - pc._dispatchEvent('icecandidate', event); - } - if (complete) { - pc._dispatchEvent('icecandidate', new Event('icecandidate')); - pc.iceGatheringState = 'complete'; - pc._emitGatheringStateChange(); - } - }; - - // emit already gathered candidates. - window.setTimeout(function() { - bufferedCandidateEvents.forEach(function(e) { - iceGatherer.onlocalcandidate(e); - }); - }, 0); - }; - - // Create ICE transport and DTLS transport. - RTCPeerConnection.prototype._createIceAndDtlsTransports = function() { - var pc = this; - var iceTransport = new window.RTCIceTransport(null); - iceTransport.onicestatechange = function() { - pc._updateIceConnectionState(); - pc._updateConnectionState(); - }; - - var dtlsTransport = new window.RTCDtlsTransport(iceTransport); - dtlsTransport.ondtlsstatechange = function() { - pc._updateConnectionState(); - }; - dtlsTransport.onerror = function() { - // onerror does not set state to failed by itself. - Object.defineProperty(dtlsTransport, 'state', - {value: 'failed', writable: true}); - pc._updateConnectionState(); - }; - - return { - iceTransport: iceTransport, - dtlsTransport: dtlsTransport - }; - }; - - // Destroy ICE gatherer, ICE transport and DTLS transport. - // Without triggering the callbacks. - RTCPeerConnection.prototype._disposeIceAndDtlsTransports = function( - sdpMLineIndex) { - var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer; - if (iceGatherer) { - delete iceGatherer.onlocalcandidate; - delete this.transceivers[sdpMLineIndex].iceGatherer; - } - var iceTransport = this.transceivers[sdpMLineIndex].iceTransport; - if (iceTransport) { - delete iceTransport.onicestatechange; - delete this.transceivers[sdpMLineIndex].iceTransport; - } - var dtlsTransport = this.transceivers[sdpMLineIndex].dtlsTransport; - if (dtlsTransport) { - delete dtlsTransport.ondtlsstatechange; - delete dtlsTransport.onerror; - delete this.transceivers[sdpMLineIndex].dtlsTransport; - } - }; - - // Start the RTP Sender and Receiver for a transceiver. - RTCPeerConnection.prototype._transceive = function(transceiver, - send, recv) { - var params = getCommonCapabilities(transceiver.localCapabilities, - transceiver.remoteCapabilities); - if (send && transceiver.rtpSender) { - params.encodings = transceiver.sendEncodingParameters; - params.rtcp = { - cname: SDPUtils.localCName, - compound: transceiver.rtcpParameters.compound - }; - if (transceiver.recvEncodingParameters.length) { - params.rtcp.ssrc = transceiver.recvEncodingParameters[0].ssrc; - } - transceiver.rtpSender.send(params); - } - if (recv && transceiver.rtpReceiver && params.codecs.length > 0) { - // remove RTX field in Edge 14942 - if (transceiver.kind === 'video' - && transceiver.recvEncodingParameters - && edgeVersion < 15019) { - transceiver.recvEncodingParameters.forEach(function(p) { - delete p.rtx; - }); - } - if (transceiver.recvEncodingParameters.length) { - params.encodings = transceiver.recvEncodingParameters; - } else { - params.encodings = [{}]; - } - params.rtcp = { - compound: transceiver.rtcpParameters.compound - }; - if (transceiver.rtcpParameters.cname) { - params.rtcp.cname = transceiver.rtcpParameters.cname; - } - if (transceiver.sendEncodingParameters.length) { - params.rtcp.ssrc = transceiver.sendEncodingParameters[0].ssrc; - } - transceiver.rtpReceiver.receive(params); - } - }; - - RTCPeerConnection.prototype.setLocalDescription = function(description) { - var pc = this; - - // Note: pranswer is not supported. - if (['offer', 'answer'].indexOf(description.type) === -1) { - return Promise.reject(makeError('TypeError', - 'Unsupported type "' + description.type + '"')); - } - - if (!isActionAllowedInSignalingState('setLocalDescription', - description.type, pc.signalingState) || pc._isClosed) { - return Promise.reject(makeError('InvalidStateError', - 'Can not set local ' + description.type + - ' in state ' + pc.signalingState)); - } - - var sections; - var sessionpart; - if (description.type === 'offer') { - // VERY limited support for SDP munging. Limited to: - // * changing the order of codecs - sections = SDPUtils.splitSections(description.sdp); - sessionpart = sections.shift(); - sections.forEach(function(mediaSection, sdpMLineIndex) { - var caps = SDPUtils.parseRtpParameters(mediaSection); - pc.transceivers[sdpMLineIndex].localCapabilities = caps; - }); - - pc.transceivers.forEach(function(transceiver, sdpMLineIndex) { - pc._gather(transceiver.mid, sdpMLineIndex); - }); - } else if (description.type === 'answer') { - sections = SDPUtils.splitSections(pc._remoteDescription.sdp); - sessionpart = sections.shift(); - var isIceLite = SDPUtils.matchPrefix(sessionpart, - 'a=ice-lite').length > 0; - sections.forEach(function(mediaSection, sdpMLineIndex) { - var transceiver = pc.transceivers[sdpMLineIndex]; - var iceGatherer = transceiver.iceGatherer; - var iceTransport = transceiver.iceTransport; - var dtlsTransport = transceiver.dtlsTransport; - var localCapabilities = transceiver.localCapabilities; - var remoteCapabilities = transceiver.remoteCapabilities; - - // treat bundle-only as not-rejected. - var rejected = SDPUtils.isRejected(mediaSection) && - SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0; - - if (!rejected && !transceiver.rejected) { - var remoteIceParameters = SDPUtils.getIceParameters( - mediaSection, sessionpart); - var remoteDtlsParameters = SDPUtils.getDtlsParameters( - mediaSection, sessionpart); - if (isIceLite) { - remoteDtlsParameters.role = 'server'; - } - - if (!pc.usingBundle || sdpMLineIndex === 0) { - pc._gather(transceiver.mid, sdpMLineIndex); - if (iceTransport.state === 'new') { - iceTransport.start(iceGatherer, remoteIceParameters, - isIceLite ? 'controlling' : 'controlled'); - } - if (dtlsTransport.state === 'new') { - dtlsTransport.start(remoteDtlsParameters); - } - } - - // Calculate intersection of capabilities. - var params = getCommonCapabilities(localCapabilities, - remoteCapabilities); - - // Start the RTCRtpSender. The RTCRtpReceiver for this - // transceiver has already been started in setRemoteDescription. - pc._transceive(transceiver, - params.codecs.length > 0, - false); - } - }); - } - - pc._localDescription = { - type: description.type, - sdp: description.sdp - }; - if (description.type === 'offer') { - pc._updateSignalingState('have-local-offer'); - } else { - pc._updateSignalingState('stable'); - } - - return Promise.resolve(); - }; - - RTCPeerConnection.prototype.setRemoteDescription = function(description) { - var pc = this; - - // Note: pranswer is not supported. - if (['offer', 'answer'].indexOf(description.type) === -1) { - return Promise.reject(makeError('TypeError', - 'Unsupported type "' + description.type + '"')); - } - - if (!isActionAllowedInSignalingState('setRemoteDescription', - description.type, pc.signalingState) || pc._isClosed) { - return Promise.reject(makeError('InvalidStateError', - 'Can not set remote ' + description.type + - ' in state ' + pc.signalingState)); - } - - var streams = {}; - pc.remoteStreams.forEach(function(stream) { - streams[stream.id] = stream; - }); - var receiverList = []; - var sections = SDPUtils.splitSections(description.sdp); - var sessionpart = sections.shift(); - var isIceLite = SDPUtils.matchPrefix(sessionpart, - 'a=ice-lite').length > 0; - var usingBundle = SDPUtils.matchPrefix(sessionpart, - 'a=group:BUNDLE ').length > 0; - pc.usingBundle = usingBundle; - var iceOptions = SDPUtils.matchPrefix(sessionpart, - 'a=ice-options:')[0]; - if (iceOptions) { - pc.canTrickleIceCandidates = iceOptions.substr(14).split(' ') - .indexOf('trickle') >= 0; - } else { - pc.canTrickleIceCandidates = false; - } - - sections.forEach(function(mediaSection, sdpMLineIndex) { - var lines = SDPUtils.splitLines(mediaSection); - var kind = SDPUtils.getKind(mediaSection); - // treat bundle-only as not-rejected. - var rejected = SDPUtils.isRejected(mediaSection) && - SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0; - var protocol = lines[0].substr(2).split(' ')[2]; - - var direction = SDPUtils.getDirection(mediaSection, sessionpart); - var remoteMsid = SDPUtils.parseMsid(mediaSection); - - var mid = SDPUtils.getMid(mediaSection) || SDPUtils.generateIdentifier(); - - // Reject datachannels which are not implemented yet. - if (rejected || (kind === 'application' && (protocol === 'DTLS/SCTP' || - protocol === 'UDP/DTLS/SCTP'))) { - // TODO: this is dangerous in the case where a non-rejected m-line - // becomes rejected. - pc.transceivers[sdpMLineIndex] = { - mid: mid, - kind: kind, - protocol: protocol, - rejected: true - }; - return; - } - - if (!rejected && pc.transceivers[sdpMLineIndex] && - pc.transceivers[sdpMLineIndex].rejected) { - // recycle a rejected transceiver. - pc.transceivers[sdpMLineIndex] = pc._createTransceiver(kind, true); - } - - var transceiver; - var iceGatherer; - var iceTransport; - var dtlsTransport; - var rtpReceiver; - var sendEncodingParameters; - var recvEncodingParameters; - var localCapabilities; - - var track; - // FIXME: ensure the mediaSection has rtcp-mux set. - var remoteCapabilities = SDPUtils.parseRtpParameters(mediaSection); - var remoteIceParameters; - var remoteDtlsParameters; - if (!rejected) { - remoteIceParameters = SDPUtils.getIceParameters(mediaSection, - sessionpart); - remoteDtlsParameters = SDPUtils.getDtlsParameters(mediaSection, - sessionpart); - remoteDtlsParameters.role = 'client'; - } - recvEncodingParameters = - SDPUtils.parseRtpEncodingParameters(mediaSection); - - var rtcpParameters = SDPUtils.parseRtcpParameters(mediaSection); - - var isComplete = SDPUtils.matchPrefix(mediaSection, - 'a=end-of-candidates', sessionpart).length > 0; - var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:') - .map(function(cand) { - return SDPUtils.parseCandidate(cand); - }) - .filter(function(cand) { - return cand.component === 1; - }); - - // Check if we can use BUNDLE and dispose transports. - if ((description.type === 'offer' || description.type === 'answer') && - !rejected && usingBundle && sdpMLineIndex > 0 && - pc.transceivers[sdpMLineIndex]) { - pc._disposeIceAndDtlsTransports(sdpMLineIndex); - pc.transceivers[sdpMLineIndex].iceGatherer = - pc.transceivers[0].iceGatherer; - pc.transceivers[sdpMLineIndex].iceTransport = - pc.transceivers[0].iceTransport; - pc.transceivers[sdpMLineIndex].dtlsTransport = - pc.transceivers[0].dtlsTransport; - if (pc.transceivers[sdpMLineIndex].rtpSender) { - pc.transceivers[sdpMLineIndex].rtpSender.setTransport( - pc.transceivers[0].dtlsTransport); - } - if (pc.transceivers[sdpMLineIndex].rtpReceiver) { - pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport( - pc.transceivers[0].dtlsTransport); - } - } - if (description.type === 'offer' && !rejected) { - transceiver = pc.transceivers[sdpMLineIndex] || - pc._createTransceiver(kind); - transceiver.mid = mid; - - if (!transceiver.iceGatherer) { - transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex, - usingBundle); - } - - if (cands.length && transceiver.iceTransport.state === 'new') { - if (isComplete && (!usingBundle || sdpMLineIndex === 0)) { - transceiver.iceTransport.setRemoteCandidates(cands); - } else { - cands.forEach(function(candidate) { - maybeAddCandidate(transceiver.iceTransport, candidate); - }); - } - } - - localCapabilities = window.RTCRtpReceiver.getCapabilities(kind); - - // filter RTX until additional stuff needed for RTX is implemented - // in adapter.js - if (edgeVersion < 15019) { - localCapabilities.codecs = localCapabilities.codecs.filter( - function(codec) { - return codec.name !== 'rtx'; - }); - } - - sendEncodingParameters = transceiver.sendEncodingParameters || [{ - ssrc: (2 * sdpMLineIndex + 2) * 1001 - }]; - - // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams - var isNewTrack = false; - if (direction === 'sendrecv' || direction === 'sendonly') { - isNewTrack = !transceiver.rtpReceiver; - rtpReceiver = transceiver.rtpReceiver || - new window.RTCRtpReceiver(transceiver.dtlsTransport, kind); - - if (isNewTrack) { - var stream; - track = rtpReceiver.track; - // FIXME: does not work with Plan B. - if (remoteMsid && remoteMsid.stream === '-') { - // no-op. a stream id of '-' means: no associated stream. - } else if (remoteMsid) { - if (!streams[remoteMsid.stream]) { - streams[remoteMsid.stream] = new window.MediaStream(); - Object.defineProperty(streams[remoteMsid.stream], 'id', { - get: function() { - return remoteMsid.stream; - } - }); - } - Object.defineProperty(track, 'id', { - get: function() { - return remoteMsid.track; - } - }); - stream = streams[remoteMsid.stream]; - } else { - if (!streams.default) { - streams.default = new window.MediaStream(); - } - stream = streams.default; - } - if (stream) { - addTrackToStreamAndFireEvent(track, stream); - transceiver.associatedRemoteMediaStreams.push(stream); - } - receiverList.push([track, rtpReceiver, stream]); - } - } else if (transceiver.rtpReceiver && transceiver.rtpReceiver.track) { - transceiver.associatedRemoteMediaStreams.forEach(function(s) { - var nativeTrack = s.getTracks().find(function(t) { - return t.id === transceiver.rtpReceiver.track.id; - }); - if (nativeTrack) { - removeTrackFromStreamAndFireEvent(nativeTrack, s); - } - }); - transceiver.associatedRemoteMediaStreams = []; - } - - transceiver.localCapabilities = localCapabilities; - transceiver.remoteCapabilities = remoteCapabilities; - transceiver.rtpReceiver = rtpReceiver; - transceiver.rtcpParameters = rtcpParameters; - transceiver.sendEncodingParameters = sendEncodingParameters; - transceiver.recvEncodingParameters = recvEncodingParameters; - - // Start the RTCRtpReceiver now. The RTPSender is started in - // setLocalDescription. - pc._transceive(pc.transceivers[sdpMLineIndex], - false, - isNewTrack); - } else if (description.type === 'answer' && !rejected) { - transceiver = pc.transceivers[sdpMLineIndex]; - iceGatherer = transceiver.iceGatherer; - iceTransport = transceiver.iceTransport; - dtlsTransport = transceiver.dtlsTransport; - rtpReceiver = transceiver.rtpReceiver; - sendEncodingParameters = transceiver.sendEncodingParameters; - localCapabilities = transceiver.localCapabilities; - - pc.transceivers[sdpMLineIndex].recvEncodingParameters = - recvEncodingParameters; - pc.transceivers[sdpMLineIndex].remoteCapabilities = - remoteCapabilities; - pc.transceivers[sdpMLineIndex].rtcpParameters = rtcpParameters; - - if (cands.length && iceTransport.state === 'new') { - if ((isIceLite || isComplete) && - (!usingBundle || sdpMLineIndex === 0)) { - iceTransport.setRemoteCandidates(cands); - } else { - cands.forEach(function(candidate) { - maybeAddCandidate(transceiver.iceTransport, candidate); - }); - } - } - - if (!usingBundle || sdpMLineIndex === 0) { - if (iceTransport.state === 'new') { - iceTransport.start(iceGatherer, remoteIceParameters, - 'controlling'); - } - if (dtlsTransport.state === 'new') { - dtlsTransport.start(remoteDtlsParameters); - } - } - - // If the offer contained RTX but the answer did not, - // remove RTX from sendEncodingParameters. - var commonCapabilities = getCommonCapabilities( - transceiver.localCapabilities, - transceiver.remoteCapabilities); - - var hasRtx = commonCapabilities.codecs.filter(function(c) { - return c.name.toLowerCase() === 'rtx'; - }).length; - if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) { - delete transceiver.sendEncodingParameters[0].rtx; - } - - pc._transceive(transceiver, - direction === 'sendrecv' || direction === 'recvonly', - direction === 'sendrecv' || direction === 'sendonly'); - - // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams - if (rtpReceiver && - (direction === 'sendrecv' || direction === 'sendonly')) { - track = rtpReceiver.track; - if (remoteMsid) { - if (!streams[remoteMsid.stream]) { - streams[remoteMsid.stream] = new window.MediaStream(); - } - addTrackToStreamAndFireEvent(track, streams[remoteMsid.stream]); - receiverList.push([track, rtpReceiver, streams[remoteMsid.stream]]); - } else { - if (!streams.default) { - streams.default = new window.MediaStream(); - } - addTrackToStreamAndFireEvent(track, streams.default); - receiverList.push([track, rtpReceiver, streams.default]); - } - } else { - // FIXME: actually the receiver should be created later. - delete transceiver.rtpReceiver; - } - } - }); - - if (pc._dtlsRole === undefined) { - pc._dtlsRole = description.type === 'offer' ? 'active' : 'passive'; - } - - pc._remoteDescription = { - type: description.type, - sdp: description.sdp - }; - if (description.type === 'offer') { - pc._updateSignalingState('have-remote-offer'); - } else { - pc._updateSignalingState('stable'); - } - Object.keys(streams).forEach(function(sid) { - var stream = streams[sid]; - if (stream.getTracks().length) { - if (pc.remoteStreams.indexOf(stream) === -1) { - pc.remoteStreams.push(stream); - var event = new Event('addstream'); - event.stream = stream; - window.setTimeout(function() { - pc._dispatchEvent('addstream', event); - }); - } - - receiverList.forEach(function(item) { - var track = item[0]; - var receiver = item[1]; - if (stream.id !== item[2].id) { - return; - } - fireAddTrack(pc, track, receiver, [stream]); - }); - } - }); - receiverList.forEach(function(item) { - if (item[2]) { - return; - } - fireAddTrack(pc, item[0], item[1], []); - }); - - // check whether addIceCandidate({}) was called within four seconds after - // setRemoteDescription. - window.setTimeout(function() { - if (!(pc && pc.transceivers)) { - return; - } - pc.transceivers.forEach(function(transceiver) { - if (transceiver.iceTransport && - transceiver.iceTransport.state === 'new' && - transceiver.iceTransport.getRemoteCandidates().length > 0) { - console.warn('Timeout for addRemoteCandidate. Consider sending ' + - 'an end-of-candidates notification'); - transceiver.iceTransport.addRemoteCandidate({}); - } - }); - }, 4000); - - return Promise.resolve(); - }; - - RTCPeerConnection.prototype.close = function() { - this.transceivers.forEach(function(transceiver) { - /* not yet - if (transceiver.iceGatherer) { - transceiver.iceGatherer.close(); - } - */ - if (transceiver.iceTransport) { - transceiver.iceTransport.stop(); - } - if (transceiver.dtlsTransport) { - transceiver.dtlsTransport.stop(); - } - if (transceiver.rtpSender) { - transceiver.rtpSender.stop(); - } - if (transceiver.rtpReceiver) { - transceiver.rtpReceiver.stop(); - } - }); - // FIXME: clean up tracks, local streams, remote streams, etc - this._isClosed = true; - this._updateSignalingState('closed'); - }; - - // Update the signaling state. - RTCPeerConnection.prototype._updateSignalingState = function(newState) { - this.signalingState = newState; - var event = new Event('signalingstatechange'); - this._dispatchEvent('signalingstatechange', event); - }; - - // Determine whether to fire the negotiationneeded event. - RTCPeerConnection.prototype._maybeFireNegotiationNeeded = function() { - var pc = this; - if (this.signalingState !== 'stable' || this.needNegotiation === true) { - return; - } - this.needNegotiation = true; - window.setTimeout(function() { - if (pc.needNegotiation) { - pc.needNegotiation = false; - var event = new Event('negotiationneeded'); - pc._dispatchEvent('negotiationneeded', event); - } - }, 0); - }; - - // Update the ice connection state. - RTCPeerConnection.prototype._updateIceConnectionState = function() { - var newState; - var states = { - 'new': 0, - closed: 0, - checking: 0, - connected: 0, - completed: 0, - disconnected: 0, - failed: 0 - }; - this.transceivers.forEach(function(transceiver) { - if (transceiver.iceTransport && !transceiver.rejected) { - states[transceiver.iceTransport.state]++; - } - }); - - newState = 'new'; - if (states.failed > 0) { - newState = 'failed'; - } else if (states.checking > 0) { - newState = 'checking'; - } else if (states.disconnected > 0) { - newState = 'disconnected'; - } else if (states.new > 0) { - newState = 'new'; - } else if (states.connected > 0) { - newState = 'connected'; - } else if (states.completed > 0) { - newState = 'completed'; - } - - if (newState !== this.iceConnectionState) { - this.iceConnectionState = newState; - var event = new Event('iceconnectionstatechange'); - this._dispatchEvent('iceconnectionstatechange', event); - } - }; - - // Update the connection state. - RTCPeerConnection.prototype._updateConnectionState = function() { - var newState; - var states = { - 'new': 0, - closed: 0, - connecting: 0, - connected: 0, - completed: 0, - disconnected: 0, - failed: 0 - }; - this.transceivers.forEach(function(transceiver) { - if (transceiver.iceTransport && transceiver.dtlsTransport && - !transceiver.rejected) { - states[transceiver.iceTransport.state]++; - states[transceiver.dtlsTransport.state]++; - } - }); - // ICETransport.completed and connected are the same for this purpose. - states.connected += states.completed; - - newState = 'new'; - if (states.failed > 0) { - newState = 'failed'; - } else if (states.connecting > 0) { - newState = 'connecting'; - } else if (states.disconnected > 0) { - newState = 'disconnected'; - } else if (states.new > 0) { - newState = 'new'; - } else if (states.connected > 0) { - newState = 'connected'; - } - - if (newState !== this.connectionState) { - this.connectionState = newState; - var event = new Event('connectionstatechange'); - this._dispatchEvent('connectionstatechange', event); - } - }; - - RTCPeerConnection.prototype.createOffer = function() { - var pc = this; - - if (pc._isClosed) { - return Promise.reject(makeError('InvalidStateError', - 'Can not call createOffer after close')); - } - - var numAudioTracks = pc.transceivers.filter(function(t) { - return t.kind === 'audio'; - }).length; - var numVideoTracks = pc.transceivers.filter(function(t) { - return t.kind === 'video'; - }).length; - - // Determine number of audio and video tracks we need to send/recv. - var offerOptions = arguments[0]; - if (offerOptions) { - // Reject Chrome legacy constraints. - if (offerOptions.mandatory || offerOptions.optional) { - throw new TypeError( - 'Legacy mandatory/optional constraints not supported.'); - } - if (offerOptions.offerToReceiveAudio !== undefined) { - if (offerOptions.offerToReceiveAudio === true) { - numAudioTracks = 1; - } else if (offerOptions.offerToReceiveAudio === false) { - numAudioTracks = 0; - } else { - numAudioTracks = offerOptions.offerToReceiveAudio; - } - } - if (offerOptions.offerToReceiveVideo !== undefined) { - if (offerOptions.offerToReceiveVideo === true) { - numVideoTracks = 1; - } else if (offerOptions.offerToReceiveVideo === false) { - numVideoTracks = 0; - } else { - numVideoTracks = offerOptions.offerToReceiveVideo; - } - } - } - - pc.transceivers.forEach(function(transceiver) { - if (transceiver.kind === 'audio') { - numAudioTracks--; - if (numAudioTracks < 0) { - transceiver.wantReceive = false; - } - } else if (transceiver.kind === 'video') { - numVideoTracks--; - if (numVideoTracks < 0) { - transceiver.wantReceive = false; - } - } - }); - - // Create M-lines for recvonly streams. - while (numAudioTracks > 0 || numVideoTracks > 0) { - if (numAudioTracks > 0) { - pc._createTransceiver('audio'); - numAudioTracks--; - } - if (numVideoTracks > 0) { - pc._createTransceiver('video'); - numVideoTracks--; - } - } - - var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId, - pc._sdpSessionVersion++); - pc.transceivers.forEach(function(transceiver, sdpMLineIndex) { - // For each track, create an ice gatherer, ice transport, - // dtls transport, potentially rtpsender and rtpreceiver. - var track = transceiver.track; - var kind = transceiver.kind; - var mid = transceiver.mid || SDPUtils.generateIdentifier(); - transceiver.mid = mid; - - if (!transceiver.iceGatherer) { - transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex, - pc.usingBundle); - } - - var localCapabilities = window.RTCRtpSender.getCapabilities(kind); - // filter RTX until additional stuff needed for RTX is implemented - // in adapter.js - if (edgeVersion < 15019) { - localCapabilities.codecs = localCapabilities.codecs.filter( - function(codec) { - return codec.name !== 'rtx'; - }); - } - localCapabilities.codecs.forEach(function(codec) { - // work around https://bugs.chromium.org/p/webrtc/issues/detail?id=6552 - // by adding level-asymmetry-allowed=1 - if (codec.name === 'H264' && - codec.parameters['level-asymmetry-allowed'] === undefined) { - codec.parameters['level-asymmetry-allowed'] = '1'; - } - - // for subsequent offers, we might have to re-use the payload - // type of the last offer. - if (transceiver.remoteCapabilities && - transceiver.remoteCapabilities.codecs) { - transceiver.remoteCapabilities.codecs.forEach(function(remoteCodec) { - if (codec.name.toLowerCase() === remoteCodec.name.toLowerCase() && - codec.clockRate === remoteCodec.clockRate) { - codec.preferredPayloadType = remoteCodec.payloadType; - } - }); - } - }); - localCapabilities.headerExtensions.forEach(function(hdrExt) { - var remoteExtensions = transceiver.remoteCapabilities && - transceiver.remoteCapabilities.headerExtensions || []; - remoteExtensions.forEach(function(rHdrExt) { - if (hdrExt.uri === rHdrExt.uri) { - hdrExt.id = rHdrExt.id; - } - }); - }); - - // generate an ssrc now, to be used later in rtpSender.send - var sendEncodingParameters = transceiver.sendEncodingParameters || [{ - ssrc: (2 * sdpMLineIndex + 1) * 1001 - }]; - if (track) { - // add RTX - if (edgeVersion >= 15019 && kind === 'video' && - !sendEncodingParameters[0].rtx) { - sendEncodingParameters[0].rtx = { - ssrc: sendEncodingParameters[0].ssrc + 1 - }; - } - } - - if (transceiver.wantReceive) { - transceiver.rtpReceiver = new window.RTCRtpReceiver( - transceiver.dtlsTransport, kind); - } - - transceiver.localCapabilities = localCapabilities; - transceiver.sendEncodingParameters = sendEncodingParameters; - }); - - // always offer BUNDLE and dispose on return if not supported. - if (pc._config.bundlePolicy !== 'max-compat') { - sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) { - return t.mid; - }).join(' ') + '\r\n'; - } - sdp += 'a=ice-options:trickle\r\n'; - - pc.transceivers.forEach(function(transceiver, sdpMLineIndex) { - sdp += writeMediaSection(transceiver, transceiver.localCapabilities, - 'offer', transceiver.stream, pc._dtlsRole); - sdp += 'a=rtcp-rsize\r\n'; - - if (transceiver.iceGatherer && pc.iceGatheringState !== 'new' && - (sdpMLineIndex === 0 || !pc.usingBundle)) { - transceiver.iceGatherer.getLocalCandidates().forEach(function(cand) { - cand.component = 1; - sdp += 'a=' + SDPUtils.writeCandidate(cand) + '\r\n'; - }); - - if (transceiver.iceGatherer.state === 'completed') { - sdp += 'a=end-of-candidates\r\n'; - } - } - }); - - var desc = new window.RTCSessionDescription({ - type: 'offer', - sdp: sdp - }); - return Promise.resolve(desc); - }; - - RTCPeerConnection.prototype.createAnswer = function() { - var pc = this; - - if (pc._isClosed) { - return Promise.reject(makeError('InvalidStateError', - 'Can not call createAnswer after close')); - } - - if (!(pc.signalingState === 'have-remote-offer' || - pc.signalingState === 'have-local-pranswer')) { - return Promise.reject(makeError('InvalidStateError', - 'Can not call createAnswer in signalingState ' + pc.signalingState)); + if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object') { + if (logDisabled_) { + return; } - - var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId, - pc._sdpSessionVersion++); - if (pc.usingBundle) { - sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) { - return t.mid; - }).join(' ') + '\r\n'; + if (typeof console !== 'undefined' && typeof console.log === 'function') { + console.log.apply(console, arguments); } - sdp += 'a=ice-options:trickle\r\n'; - - var mediaSectionsInOffer = SDPUtils.getMediaSections( - pc._remoteDescription.sdp).length; - pc.transceivers.forEach(function(transceiver, sdpMLineIndex) { - if (sdpMLineIndex + 1 > mediaSectionsInOffer) { - return; - } - if (transceiver.rejected) { - if (transceiver.kind === 'application') { - if (transceiver.protocol === 'DTLS/SCTP') { // legacy fmt - sdp += 'm=application 0 DTLS/SCTP 5000\r\n'; - } else { - sdp += 'm=application 0 ' + transceiver.protocol + - ' webrtc-datachannel\r\n'; - } - } else if (transceiver.kind === 'audio') { - sdp += 'm=audio 0 UDP/TLS/RTP/SAVPF 0\r\n' + - 'a=rtpmap:0 PCMU/8000\r\n'; - } else if (transceiver.kind === 'video') { - sdp += 'm=video 0 UDP/TLS/RTP/SAVPF 120\r\n' + - 'a=rtpmap:120 VP8/90000\r\n'; - } - sdp += 'c=IN IP4 0.0.0.0\r\n' + - 'a=inactive\r\n' + - 'a=mid:' + transceiver.mid + '\r\n'; - return; - } - - // FIXME: look at direction. - if (transceiver.stream) { - var localTrack; - if (transceiver.kind === 'audio') { - localTrack = transceiver.stream.getAudioTracks()[0]; - } else if (transceiver.kind === 'video') { - localTrack = transceiver.stream.getVideoTracks()[0]; - } - if (localTrack) { - // add RTX - if (edgeVersion >= 15019 && transceiver.kind === 'video' && - !transceiver.sendEncodingParameters[0].rtx) { - transceiver.sendEncodingParameters[0].rtx = { - ssrc: transceiver.sendEncodingParameters[0].ssrc + 1 - }; - } - } - } + } +} - // Calculate intersection of capabilities. - var commonCapabilities = getCommonCapabilities( - transceiver.localCapabilities, - transceiver.remoteCapabilities); +/** + * Shows a deprecation warning suggesting the modern and spec-compatible API. + */ +function deprecated(oldMethod, newMethod) { + if (!deprecationWarnings_) { + return; + } + console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.'); +} - var hasRtx = commonCapabilities.codecs.filter(function(c) { - return c.name.toLowerCase() === 'rtx'; - }).length; - if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) { - delete transceiver.sendEncodingParameters[0].rtx; - } +/** + * Browser detector. + * + * @return {object} result containing browser and version + * properties. + */ +function detectBrowser(window) { + // Returned result object. + var result = { + browser: null, + version: null + }; - sdp += writeMediaSection(transceiver, commonCapabilities, - 'answer', transceiver.stream, pc._dtlsRole); - if (transceiver.rtcpParameters && - transceiver.rtcpParameters.reducedSize) { - sdp += 'a=rtcp-rsize\r\n'; - } - }); + // Fail early if it's not a browser + if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent) { + result.browser = 'Not a browser.'; + return result; + } + var navigator = window.navigator; - var desc = new window.RTCSessionDescription({ - type: 'answer', - sdp: sdp + // Prefer navigator.userAgentData. + if (navigator.userAgentData && navigator.userAgentData.brands) { + var chromium = navigator.userAgentData.brands.find(function (brand) { + return brand.brand === 'Chromium'; }); - return Promise.resolve(desc); - }; - - RTCPeerConnection.prototype.addIceCandidate = function(candidate) { - var pc = this; - var sections; - if (candidate && !(candidate.sdpMLineIndex !== undefined || - candidate.sdpMid)) { - return Promise.reject(new TypeError('sdpMLineIndex or sdpMid required')); + if (chromium) { + return { + browser: 'chrome', + version: parseInt(chromium.version, 10) + }; } + } + if (navigator.mozGetUserMedia) { + // Firefox. + result.browser = 'firefox'; + result.version = parseInt(extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1)); + } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) { + // Chrome, Chromium, Webview, Opera. + // Version matches Chrome/WebRTC version. + // Chrome 74 removed webkitGetUserMedia on http as well so we need the + // more complicated fallback to webkitRTCPeerConnection. + result.browser = 'chrome'; + result.version = parseInt(extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2)) || null; + } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { + // Safari. + result.browser = 'safari'; + result.version = parseInt(extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1)); + result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype; + // Only for internal usage. + result._safariVersion = extractVersion(navigator.userAgent, /Version\/(\d+(\.?\d+))/, 1); + } else { + // Default fallthrough: not supported. + result.browser = 'Not a supported browser.'; + return result; + } + return result; +} - // TODO: needs to go into ops queue. - return new Promise(function(resolve, reject) { - if (!pc._remoteDescription) { - return reject(makeError('InvalidStateError', - 'Can not add ICE candidate without a remote description')); - } else if (!candidate || candidate.candidate === '') { - for (var j = 0; j < pc.transceivers.length; j++) { - if (pc.transceivers[j].rejected) { - continue; - } - pc.transceivers[j].iceTransport.addRemoteCandidate({}); - sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp); - sections[j] += 'a=end-of-candidates\r\n'; - pc._remoteDescription.sdp = - SDPUtils.getDescription(pc._remoteDescription.sdp) + - sections.join(''); - if (pc.usingBundle) { - break; - } - } - } else { - var sdpMLineIndex = candidate.sdpMLineIndex; - if (candidate.sdpMid) { - for (var i = 0; i < pc.transceivers.length; i++) { - if (pc.transceivers[i].mid === candidate.sdpMid) { - sdpMLineIndex = i; - break; - } - } - } - var transceiver = pc.transceivers[sdpMLineIndex]; - if (transceiver) { - if (transceiver.rejected) { - return resolve(); - } - var cand = Object.keys(candidate.candidate).length > 0 ? - SDPUtils.parseCandidate(candidate.candidate) : {}; - // Ignore Chrome's invalid candidates since Edge does not like them. - if (cand.protocol === 'tcp' && (cand.port === 0 || cand.port === 9)) { - return resolve(); - } - // Ignore RTCP candidates, we assume RTCP-MUX. - if (cand.component && cand.component !== 1) { - return resolve(); - } - // when using bundle, avoid adding candidates to the wrong - // ice transport. And avoid adding candidates added in the SDP. - if (sdpMLineIndex === 0 || (sdpMLineIndex > 0 && - transceiver.iceTransport !== pc.transceivers[0].iceTransport)) { - if (!maybeAddCandidate(transceiver.iceTransport, cand)) { - return reject(makeError('OperationError', - 'Can not add ICE candidate')); - } - } - - // update the remoteDescription. - var candidateString = candidate.candidate.trim(); - if (candidateString.indexOf('a=') === 0) { - candidateString = candidateString.substr(2); - } - sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp); - sections[sdpMLineIndex] += 'a=' + - (cand.type ? candidateString : 'end-of-candidates') - + '\r\n'; - pc._remoteDescription.sdp = - SDPUtils.getDescription(pc._remoteDescription.sdp) + - sections.join(''); - } else { - return reject(makeError('OperationError', - 'Can not add ICE candidate')); - } - } - resolve(); - }); - }; +/** + * Checks if something is an object. + * + * @param {*} val The something you want to check. + * @return true if val is an object, false otherwise. + */ +function isObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; +} - RTCPeerConnection.prototype.getStats = function(selector) { - if (selector && selector instanceof window.MediaStreamTrack) { - var senderOrReceiver = null; - this.transceivers.forEach(function(transceiver) { - if (transceiver.rtpSender && - transceiver.rtpSender.track === selector) { - senderOrReceiver = transceiver.rtpSender; - } else if (transceiver.rtpReceiver && - transceiver.rtpReceiver.track === selector) { - senderOrReceiver = transceiver.rtpReceiver; - } - }); - if (!senderOrReceiver) { - throw makeError('InvalidAccessError', 'Invalid selector.'); - } - return senderOrReceiver.getStats(); +/** + * Remove all empty objects and undefined values + * from a nested object -- an enhanced and vanilla version + * of Lodash's `compact`. + */ +function compactObject(data) { + if (!isObject(data)) { + return data; + } + return Object.keys(data).reduce(function (accumulator, key) { + var isObj = isObject(data[key]); + var value = isObj ? compactObject(data[key]) : data[key]; + var isEmptyObject = isObj && !Object.keys(value).length; + if (value === undefined || isEmptyObject) { + return accumulator; } + return Object.assign(accumulator, _defineProperty({}, key, value)); + }, {}); +} - var promises = []; - this.transceivers.forEach(function(transceiver) { - ['rtpSender', 'rtpReceiver', 'iceGatherer', 'iceTransport', - 'dtlsTransport'].forEach(function(method) { - if (transceiver[method]) { - promises.push(transceiver[method].getStats()); - } - }); - }); - return Promise.all(promises).then(function(allStats) { - var results = new Map(); - allStats.forEach(function(stats) { - stats.forEach(function(stat) { - results.set(stat.id, stat); - }); +/* iterates the stats graph recursively. */ +function walkStats(stats, base, resultSet) { + if (!base || resultSet.has(base.id)) { + return; + } + resultSet.set(base.id, base); + Object.keys(base).forEach(function (name) { + if (name.endsWith('Id')) { + walkStats(stats, stats.get(base[name]), resultSet); + } else if (name.endsWith('Ids')) { + base[name].forEach(function (id) { + walkStats(stats, stats.get(id), resultSet); }); - return results; - }); - }; - - // fix low-level stat names and return Map instead of object. - var ortcObjects = ['RTCRtpSender', 'RTCRtpReceiver', 'RTCIceGatherer', - 'RTCIceTransport', 'RTCDtlsTransport']; - ortcObjects.forEach(function(ortcObjectName) { - var obj = window[ortcObjectName]; - if (obj && obj.prototype && obj.prototype.getStats) { - var nativeGetstats = obj.prototype.getStats; - obj.prototype.getStats = function() { - return nativeGetstats.apply(this) - .then(function(nativeStats) { - var mapStats = new Map(); - Object.keys(nativeStats).forEach(function(id) { - nativeStats[id].type = fixStatsType(nativeStats[id]); - mapStats.set(id, nativeStats[id]); - }); - return mapStats; - }); - }; } }); +} - // legacy callback shims. Should be moved to adapter.js some days. - var methods = ['createOffer', 'createAnswer']; - methods.forEach(function(method) { - var nativeMethod = RTCPeerConnection.prototype[method]; - RTCPeerConnection.prototype[method] = function() { - var args = arguments; - if (typeof args[0] === 'function' || - typeof args[1] === 'function') { // legacy - return nativeMethod.apply(this, [arguments[2]]) - .then(function(description) { - if (typeof args[0] === 'function') { - args[0].apply(null, [description]); - } - }, function(error) { - if (typeof args[1] === 'function') { - args[1].apply(null, [error]); - } - }); - } - return nativeMethod.apply(this, arguments); - }; - }); - - methods = ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']; - methods.forEach(function(method) { - var nativeMethod = RTCPeerConnection.prototype[method]; - RTCPeerConnection.prototype[method] = function() { - var args = arguments; - if (typeof args[1] === 'function' || - typeof args[2] === 'function') { // legacy - return nativeMethod.apply(this, arguments) - .then(function() { - if (typeof args[1] === 'function') { - args[1].apply(null); - } - }, function(error) { - if (typeof args[2] === 'function') { - args[2].apply(null, [error]); - } - }); - } - return nativeMethod.apply(this, arguments); - }; +/* filter getStats for a sender/receiver track. */ +function filterStats(result, track, outbound) { + var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp'; + var filteredResult = new Map(); + if (track === null) { + return filteredResult; + } + var trackStats = []; + result.forEach(function (value) { + if (value.type === 'track' && value.trackIdentifier === track.id) { + trackStats.push(value); + } }); - - // getStats is special. It doesn't have a spec legacy method yet we support - // getStats(something, cb) without error callbacks. - ['getStats'].forEach(function(method) { - var nativeMethod = RTCPeerConnection.prototype[method]; - RTCPeerConnection.prototype[method] = function() { - var args = arguments; - if (typeof args[1] === 'function') { - return nativeMethod.apply(this, arguments) - .then(function() { - if (typeof args[1] === 'function') { - args[1].apply(null); - } - }); + trackStats.forEach(function (trackStat) { + result.forEach(function (stats) { + if (stats.type === streamStatsType && stats.trackId === trackStat.id) { + walkStats(result, stats, filteredResult); } - return nativeMethod.apply(this, arguments); - }; + }); }); + return filteredResult; +} - return RTCPeerConnection; -}; - -},{"sdp":17}],17:[function(require,module,exports){ - /* eslint-env node */ +},{}],11:[function(require,module,exports){ +/* eslint-env node */ 'use strict'; // SDP helpers. -var SDPUtils = {}; + +const SDPUtils = {}; // Generate an alphanumeric identifier for cname or mids. // TODO: use UUIDs instead? https://gist.github.com/jed/982883 -SDPUtils.generateIdentifier = function() { - return Math.random().toString(36).substr(2, 10); +SDPUtils.generateIdentifier = function () { + return Math.random().toString(36).substring(2, 12); }; // The RTCP CNAME used by all peerconnections from the same JS. SDPUtils.localCName = SDPUtils.generateIdentifier(); // Splits SDP into lines, dealing with both CRLF and LF. -SDPUtils.splitLines = function(blob) { - return blob.trim().split('\n').map(function(line) { - return line.trim(); - }); +SDPUtils.splitLines = function (blob) { + return blob.trim().split('\n').map(line => line.trim()); }; // Splits SDP into sessionpart and mediasections. Ensures CRLF. -SDPUtils.splitSections = function(blob) { - var parts = blob.split('\nm='); - return parts.map(function(part, index) { - return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; - }); +SDPUtils.splitSections = function (blob) { + const parts = blob.split('\nm='); + return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\r\n'); }; -// returns the session description. -SDPUtils.getDescription = function(blob) { - var sections = SDPUtils.splitSections(blob); +// Returns the session description. +SDPUtils.getDescription = function (blob) { + const sections = SDPUtils.splitSections(blob); return sections && sections[0]; }; -// returns the individual media sections. -SDPUtils.getMediaSections = function(blob) { - var sections = SDPUtils.splitSections(blob); +// Returns the individual media sections. +SDPUtils.getMediaSections = function (blob) { + const sections = SDPUtils.splitSections(blob); sections.shift(); return sections; }; // Returns lines that start with a certain prefix. -SDPUtils.matchPrefix = function(blob, prefix) { - return SDPUtils.splitLines(blob).filter(function(line) { - return line.indexOf(prefix) === 0; - }); +SDPUtils.matchPrefix = function (blob, prefix) { + return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0); }; // Parses an ICE candidate line. Sample input: // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 // rport 55996" -SDPUtils.parseCandidate = function(line) { - var parts; +// Input can be prefixed with a=. +SDPUtils.parseCandidate = function (line) { + let parts; // Parse both variants. if (line.indexOf('a=candidate:') === 0) { parts = line.substring(12).split(' '); @@ -4674,9 +2562,9 @@ SDPUtils.parseCandidate = function(line) { parts = line.substring(10).split(' '); } - var candidate = { + const candidate = { foundation: parts[0], - component: parseInt(parts[1], 10), + component: { 1: 'rtp', 2: 'rtcp' }[parts[1]] || parts[1], protocol: parts[2].toLowerCase(), priority: parseInt(parts[3], 10), ip: parts[4], @@ -4686,7 +2574,7 @@ SDPUtils.parseCandidate = function(line) { type: parts[7] }; - for (var i = 8; i < parts.length; i += 2) { + for (let i = 8; i < parts.length; i += 2) { switch (parts[i]) { case 'raddr': candidate.relatedAddress = parts[i + 1]; @@ -4698,11 +2586,14 @@ SDPUtils.parseCandidate = function(line) { candidate.tcpType = parts[i + 1]; break; case 'ufrag': - candidate.ufrag = parts[i + 1]; // for backward compability. + candidate.ufrag = parts[i + 1]; // for backward compatibility. candidate.usernameFragment = parts[i + 1]; break; - default: // extension handling, in particular ufrag - candidate[parts[i]] = parts[i + 1]; + default: + // extension handling, in particular ufrag. Don't overwrite. + if (candidate[parts[i]] === undefined) { + candidate[parts[i]] = parts[i + 1]; + } break; } } @@ -4710,20 +2601,28 @@ SDPUtils.parseCandidate = function(line) { }; // Translates a candidate object into SDP candidate attribute. -SDPUtils.writeCandidate = function(candidate) { - var sdp = []; +// This does not include the a= prefix! +SDPUtils.writeCandidate = function (candidate) { + const sdp = []; sdp.push(candidate.foundation); - sdp.push(candidate.component); + + const component = candidate.component; + if (component === 'rtp') { + sdp.push(1); + } else if (component === 'rtcp') { + sdp.push(2); + } else { + sdp.push(component); + } sdp.push(candidate.protocol.toUpperCase()); sdp.push(candidate.priority); sdp.push(candidate.address || candidate.ip); sdp.push(candidate.port); - var type = candidate.type; + const type = candidate.type; sdp.push('typ'); sdp.push(type); - if (type !== 'host' && candidate.relatedAddress && - candidate.relatedPort) { + if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort !== undefined) { sdp.push('raddr'); sdp.push(candidate.relatedAddress); sdp.push('rport'); @@ -4741,16 +2640,17 @@ SDPUtils.writeCandidate = function(candidate) { }; // Parses an ice-options line, returns an array of option tags. +// Sample input: // a=ice-options:foo bar -SDPUtils.parseIceOptions = function(line) { - return line.substr(14).split(' '); +SDPUtils.parseIceOptions = function (line) { + return line.substring(14).split(' '); }; -// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input: +// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input: // a=rtpmap:111 opus/48000/2 -SDPUtils.parseRtpMap = function(line) { - var parts = line.substr(9).split(' '); - var parsed = { +SDPUtils.parseRtpMap = function (line) { + let parts = line.substring(9).split(' '); + const parsed = { payloadType: parseInt(parts.shift(), 10) // was: id }; @@ -4764,65 +2664,63 @@ SDPUtils.parseRtpMap = function(line) { return parsed; }; -// Generate an a=rtpmap line from RTCRtpCodecCapability or +// Generates a rtpmap line from RTCRtpCodecCapability or // RTCRtpCodecParameters. -SDPUtils.writeRtpMap = function(codec) { - var pt = codec.payloadType; +SDPUtils.writeRtpMap = function (codec) { + let pt = codec.payloadType; if (codec.preferredPayloadType !== undefined) { pt = codec.preferredPayloadType; } - var channels = codec.channels || codec.numChannels || 1; - return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + - (channels !== 1 ? '/' + channels : '') + '\r\n'; + const channels = codec.channels || codec.numChannels || 1; + return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\r\n'; }; -// Parses an a=extmap line (headerextension from RFC 5285). Sample input: +// Parses a extmap line (headerextension from RFC 5285). Sample input: // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset -SDPUtils.parseExtmap = function(line) { - var parts = line.substr(9).split(' '); +SDPUtils.parseExtmap = function (line) { + const parts = line.substring(9).split(' '); return { id: parseInt(parts[0], 10), direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv', - uri: parts[1] + uri: parts[1], + attributes: parts.slice(2).join(' ') }; }; -// Generates a=extmap line from RTCRtpHeaderExtensionParameters or +// Generates an extmap line from RTCRtpHeaderExtensionParameters or // RTCRtpHeaderExtension. -SDPUtils.writeExtmap = function(headerExtension) { - return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + - (headerExtension.direction && headerExtension.direction !== 'sendrecv' - ? '/' + headerExtension.direction - : '') + - ' ' + headerExtension.uri + '\r\n'; +SDPUtils.writeExtmap = function (headerExtension) { + return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + (headerExtension.attributes ? ' ' + headerExtension.attributes : '') + '\r\n'; }; -// Parses an ftmp line, returns dictionary. Sample input: +// Parses a fmtp line, returns dictionary. Sample input: // a=fmtp:96 vbr=on;cng=on // Also deals with vbr=on; cng=on -SDPUtils.parseFmtp = function(line) { - var parsed = {}; - var kv; - var parts = line.substr(line.indexOf(' ') + 1).split(';'); - for (var j = 0; j < parts.length; j++) { +// Non-key-value such as telephone-events `0-15` get parsed as +// {`0-15`:undefined} +SDPUtils.parseFmtp = function (line) { + const parsed = {}; + let kv; + const parts = line.substring(line.indexOf(' ') + 1).split(';'); + for (let j = 0; j < parts.length; j++) { kv = parts[j].trim().split('='); parsed[kv[0].trim()] = kv[1]; } return parsed; }; -// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters. -SDPUtils.writeFmtp = function(codec) { - var line = ''; - var pt = codec.payloadType; +// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeFmtp = function (codec) { + let line = ''; + let pt = codec.payloadType; if (codec.preferredPayloadType !== undefined) { pt = codec.preferredPayloadType; } if (codec.parameters && Object.keys(codec.parameters).length) { - var params = []; - Object.keys(codec.parameters).forEach(function(param) { - if (codec.parameters[param]) { + const params = []; + Object.keys(codec.parameters).forEach(param => { + if (codec.parameters[param] !== undefined) { params.push(param + '=' + codec.parameters[param]); } else { params.push(param); @@ -4833,85 +2731,83 @@ SDPUtils.writeFmtp = function(codec) { return line; }; -// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: +// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: // a=rtcp-fb:98 nack rpsi -SDPUtils.parseRtcpFb = function(line) { - var parts = line.substr(line.indexOf(' ') + 1).split(' '); +SDPUtils.parseRtcpFb = function (line) { + const parts = line.substring(line.indexOf(' ') + 1).split(' '); return { type: parts.shift(), parameter: parts.join(' ') }; }; + // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. -SDPUtils.writeRtcpFb = function(codec) { - var lines = ''; - var pt = codec.payloadType; +SDPUtils.writeRtcpFb = function (codec) { + let lines = ''; + let pt = codec.payloadType; if (codec.preferredPayloadType !== undefined) { pt = codec.preferredPayloadType; } if (codec.rtcpFeedback && codec.rtcpFeedback.length) { // FIXME: special handling for trr-int? - codec.rtcpFeedback.forEach(function(fb) { - lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + - (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + - '\r\n'; + codec.rtcpFeedback.forEach(fb => { + lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\r\n'; }); } return lines; }; -// Parses an RFC 5576 ssrc media attribute. Sample input: +// Parses a RFC 5576 ssrc media attribute. Sample input: // a=ssrc:3735928559 cname:something -SDPUtils.parseSsrcMedia = function(line) { - var sp = line.indexOf(' '); - var parts = { - ssrc: parseInt(line.substr(7, sp - 7), 10) +SDPUtils.parseSsrcMedia = function (line) { + const sp = line.indexOf(' '); + const parts = { + ssrc: parseInt(line.substring(7, sp), 10) }; - var colon = line.indexOf(':', sp); + const colon = line.indexOf(':', sp); if (colon > -1) { - parts.attribute = line.substr(sp + 1, colon - sp - 1); - parts.value = line.substr(colon + 1); + parts.attribute = line.substring(sp + 1, colon); + parts.value = line.substring(colon + 1); } else { - parts.attribute = line.substr(sp + 1); + parts.attribute = line.substring(sp + 1); } return parts; }; -SDPUtils.parseSsrcGroup = function(line) { - var parts = line.substr(13).split(' '); +// Parse a ssrc-group line (see RFC 5576). Sample input: +// a=ssrc-group:semantics 12 34 +SDPUtils.parseSsrcGroup = function (line) { + const parts = line.substring(13).split(' '); return { semantics: parts.shift(), - ssrcs: parts.map(function(ssrc) { - return parseInt(ssrc, 10); - }) + ssrcs: parts.map(ssrc => parseInt(ssrc, 10)) }; }; // Extracts the MID (RFC 5888) from a media section. -// returns the MID or undefined if no mid line was found. -SDPUtils.getMid = function(mediaSection) { - var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; +// Returns the MID or undefined if no mid line was found. +SDPUtils.getMid = function (mediaSection) { + const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; if (mid) { - return mid.substr(6); + return mid.substring(6); } }; -SDPUtils.parseFingerprint = function(line) { - var parts = line.substr(14).split(' '); +// Parses a fingerprint line for DTLS-SRTP. +SDPUtils.parseFingerprint = function (line) { + const parts = line.substring(14).split(' '); return { algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. - value: parts[1] + value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572. }; }; // Extracts DTLS parameters from SDP media section or sessionpart. // FIXME: for consistency with other functions this should only // get the fingerprint line as input. See also getIceParameters. -SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) { - var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, - 'a=fingerprint:'); - // Note: a=setup line is ignored since we use the 'auto' role. - // Note2: 'algorithm' is not case sensitive except in Edge. +SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) { + const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:'); + // Note: a=setup line is ignored since we use the 'auto' role in Edge. return { role: 'auto', fingerprints: lines.map(SDPUtils.parseFingerprint) @@ -4919,60 +2815,101 @@ SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) { }; // Serializes DTLS parameters to SDP. -SDPUtils.writeDtlsParameters = function(params, setupType) { - var sdp = 'a=setup:' + setupType + '\r\n'; - params.fingerprints.forEach(function(fp) { +SDPUtils.writeDtlsParameters = function (params, setupType) { + let sdp = 'a=setup:' + setupType + '\r\n'; + params.fingerprints.forEach(fp => { sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; }); return sdp; }; + +// Parses a=crypto lines into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members +SDPUtils.parseCryptoLine = function (line) { + const parts = line.substring(9).split(' '); + return { + tag: parseInt(parts[0], 10), + cryptoSuite: parts[1], + keyParams: parts[2], + sessionParams: parts.slice(3) + }; +}; + +SDPUtils.writeCryptoLine = function (parameters) { + return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\r\n'; +}; + +// Parses the crypto key parameters into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam* +SDPUtils.parseCryptoKeyParams = function (keyParams) { + if (keyParams.indexOf('inline:') !== 0) { + return null; + } + const parts = keyParams.substring(7).split('|'); + return { + keyMethod: 'inline', + keySalt: parts[0], + lifeTime: parts[1], + mkiValue: parts[2] ? parts[2].split(':')[0] : undefined, + mkiLength: parts[2] ? parts[2].split(':')[1] : undefined + }; +}; + +SDPUtils.writeCryptoKeyParams = function (keyParams) { + return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : ''); +}; + +// Extracts all SDES parameters. +SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) { + const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:'); + return lines.map(SDPUtils.parseCryptoLine); +}; + // Parses ICE information from SDP media section or sessionpart. // FIXME: for consistency with other functions this should only // get the ice-ufrag and ice-pwd lines as input. -SDPUtils.getIceParameters = function(mediaSection, sessionpart) { - var lines = SDPUtils.splitLines(mediaSection); - // Search in session part, too. - lines = lines.concat(SDPUtils.splitLines(sessionpart)); - var iceParameters = { - usernameFragment: lines.filter(function(line) { - return line.indexOf('a=ice-ufrag:') === 0; - })[0].substr(12), - password: lines.filter(function(line) { - return line.indexOf('a=ice-pwd:') === 0; - })[0].substr(10) +SDPUtils.getIceParameters = function (mediaSection, sessionpart) { + const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0]; + const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0]; + if (!(ufrag && pwd)) { + return null; + } + return { + usernameFragment: ufrag.substring(12), + password: pwd.substring(10) }; - return iceParameters; }; // Serializes ICE parameters to SDP. -SDPUtils.writeIceParameters = function(params) { - return 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + - 'a=ice-pwd:' + params.password + '\r\n'; +SDPUtils.writeIceParameters = function (params) { + let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + 'a=ice-pwd:' + params.password + '\r\n'; + if (params.iceLite) { + sdp += 'a=ice-lite\r\n'; + } + return sdp; }; // Parses the SDP media section and returns RTCRtpParameters. -SDPUtils.parseRtpParameters = function(mediaSection) { - var description = { +SDPUtils.parseRtpParameters = function (mediaSection) { + const description = { codecs: [], headerExtensions: [], fecMechanisms: [], rtcp: [] }; - var lines = SDPUtils.splitLines(mediaSection); - var mline = lines[0].split(' '); - for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..] - var pt = mline[i]; - var rtpmapline = SDPUtils.matchPrefix( - mediaSection, 'a=rtpmap:' + pt + ' ')[0]; + const lines = SDPUtils.splitLines(mediaSection); + const mline = lines[0].split(' '); + description.profile = mline[2]; + for (let i = 3; i < mline.length; i++) { + // find all codecs from mline[3..] + const pt = mline[i]; + const rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0]; if (rtpmapline) { - var codec = SDPUtils.parseRtpMap(rtpmapline); - var fmtps = SDPUtils.matchPrefix( - mediaSection, 'a=fmtp:' + pt + ' '); + const codec = SDPUtils.parseRtpMap(rtpmapline); + const fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' '); // Only the first a=fmtp: is considered. codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; - codec.rtcpFeedback = SDPUtils.matchPrefix( - mediaSection, 'a=rtcp-fb:' + pt + ' ') - .map(SDPUtils.parseRtcpFb); + codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb); description.codecs.push(codec); // parse FEC mechanisms from rtpmap lines. switch (codec.name.toUpperCase()) { @@ -4980,28 +2917,40 @@ SDPUtils.parseRtpParameters = function(mediaSection) { case 'ULPFEC': description.fecMechanisms.push(codec.name.toUpperCase()); break; - default: // only RED and ULPFEC are recognized as FEC mechanisms. + default: + // only RED and ULPFEC are recognized as FEC mechanisms. break; } } } - SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) { + SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => { description.headerExtensions.push(SDPUtils.parseExtmap(line)); }); + const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ').map(SDPUtils.parseRtcpFb); + description.codecs.forEach(codec => { + wildcardRtcpFb.forEach(fb => { + const duplicate = codec.rtcpFeedback.find(existingFeedback => { + return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter; + }); + if (!duplicate) { + codec.rtcpFeedback.push(fb); + } + }); + }); // FIXME: parse rtcp. return description; }; // Generates parts of the SDP media section describing the capabilities / // parameters. -SDPUtils.writeRtpDescription = function(kind, caps) { - var sdp = ''; +SDPUtils.writeRtpDescription = function (kind, caps) { + let sdp = ''; // Build the mline. sdp += 'm=' + kind + ' '; sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. - sdp += ' UDP/TLS/RTP/SAVPF '; - sdp += caps.codecs.map(function(codec) { + sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' '; + sdp += caps.codecs.map(codec => { if (codec.preferredPayloadType !== undefined) { return codec.preferredPayloadType; } @@ -5012,13 +2961,13 @@ SDPUtils.writeRtpDescription = function(kind, caps) { sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. - caps.codecs.forEach(function(codec) { + caps.codecs.forEach(codec => { sdp += SDPUtils.writeRtpMap(codec); sdp += SDPUtils.writeFmtp(codec); sdp += SDPUtils.writeRtcpFb(codec); }); - var maxptime = 0; - caps.codecs.forEach(function(codec) { + let maxptime = 0; + caps.codecs.forEach(codec => { if (codec.maxptime > maxptime) { maxptime = codec.maxptime; } @@ -5026,10 +2975,9 @@ SDPUtils.writeRtpDescription = function(kind, caps) { if (maxptime > 0) { sdp += 'a=maxptime:' + maxptime + '\r\n'; } - sdp += 'a=rtcp-mux\r\n'; if (caps.headerExtensions) { - caps.headerExtensions.forEach(function(extension) { + caps.headerExtensions.forEach(extension => { sdp += SDPUtils.writeExtmap(extension); }); } @@ -5039,42 +2987,33 @@ SDPUtils.writeRtpDescription = function(kind, caps) { // Parses the SDP media section and returns an array of // RTCRtpEncodingParameters. -SDPUtils.parseRtpEncodingParameters = function(mediaSection) { - var encodingParameters = []; - var description = SDPUtils.parseRtpParameters(mediaSection); - var hasRed = description.fecMechanisms.indexOf('RED') !== -1; - var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; +SDPUtils.parseRtpEncodingParameters = function (mediaSection) { + const encodingParameters = []; + const description = SDPUtils.parseRtpParameters(mediaSection); + const hasRed = description.fecMechanisms.indexOf('RED') !== -1; + const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; // filter a=ssrc:... cname:, ignore PlanB-msid - var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') - .map(function(line) { - return SDPUtils.parseSsrcMedia(line); - }) - .filter(function(parts) { - return parts.attribute === 'cname'; - }); - var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; - var secondarySsrc; - - var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID') - .map(function(line) { - var parts = line.substr(17).split(' '); - return parts.map(function(part) { - return parseInt(part, 10); - }); + const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname'); + const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; + let secondarySsrc; + + const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => { + const parts = line.substring(17).split(' '); + return parts.map(part => parseInt(part, 10)); }); if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { secondarySsrc = flows[0][1]; } - description.codecs.forEach(function(codec) { + description.codecs.forEach(codec => { if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { - var encParam = { + let encParam = { ssrc: primarySsrc, codecPayloadType: parseInt(codec.parameters.apt, 10) }; if (primarySsrc && secondarySsrc) { - encParam.rtx = {ssrc: secondarySsrc}; + encParam.rtx = { ssrc: secondarySsrc }; } encodingParameters.push(encParam); if (hasRed) { @@ -5094,18 +3033,17 @@ SDPUtils.parseRtpEncodingParameters = function(mediaSection) { } // we support both b=AS and b=TIAS but interpret AS as TIAS. - var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); + let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); if (bandwidth.length) { if (bandwidth[0].indexOf('b=TIAS:') === 0) { - bandwidth = parseInt(bandwidth[0].substr(7), 10); + bandwidth = parseInt(bandwidth[0].substring(7), 10); } else if (bandwidth[0].indexOf('b=AS:') === 0) { // use formula from JSEP to convert b=AS to TIAS value. - bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 - - (50 * 40 * 8); + bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95 - 50 * 40 * 8; } else { bandwidth = undefined; } - encodingParameters.forEach(function(params) { + encodingParameters.forEach(params => { params.maxBitrate = bandwidth; }); } @@ -5113,18 +3051,12 @@ SDPUtils.parseRtpEncodingParameters = function(mediaSection) { }; // parses http://draft.ortc.org/#rtcrtcpparameters* -SDPUtils.parseRtcpParameters = function(mediaSection) { - var rtcpParameters = {}; +SDPUtils.parseRtcpParameters = function (mediaSection) { + const rtcpParameters = {}; - // Gets the first SSRC. Note tha with RTX there might be multiple + // Gets the first SSRC. Note that with RTX there might be multiple // SSRCs. - var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') - .map(function(line) { - return SDPUtils.parseSsrcMedia(line); - }) - .filter(function(obj) { - return obj.attribute === 'cname'; - })[0]; + const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0]; if (remoteSsrc) { rtcpParameters.cname = remoteSsrc.value; rtcpParameters.ssrc = remoteSsrc.ssrc; @@ -5132,137 +3064,137 @@ SDPUtils.parseRtcpParameters = function(mediaSection) { // Edge uses the compound attribute instead of reducedSize // compound is !reducedSize - var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); + const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); rtcpParameters.reducedSize = rsize.length > 0; rtcpParameters.compound = rsize.length === 0; // parses the rtcp-mux attrіbute. // Note that Edge does not support unmuxed RTCP. - var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); + const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); rtcpParameters.mux = mux.length > 0; return rtcpParameters; }; +SDPUtils.writeRtcpParameters = function (rtcpParameters) { + let sdp = ''; + if (rtcpParameters.reducedSize) { + sdp += 'a=rtcp-rsize\r\n'; + } + if (rtcpParameters.mux) { + sdp += 'a=rtcp-mux\r\n'; + } + if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) { + sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\r\n'; + } + return sdp; +}; + // parses either a=msid: or a=ssrc:... msid lines and returns // the id of the MediaStream and MediaStreamTrack. -SDPUtils.parseMsid = function(mediaSection) { - var parts; - var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); +SDPUtils.parseMsid = function (mediaSection) { + let parts; + const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); if (spec.length === 1) { - parts = spec[0].substr(7).split(' '); - return {stream: parts[0], track: parts[1]}; - } - var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') - .map(function(line) { - return SDPUtils.parseSsrcMedia(line); - }) - .filter(function(msidParts) { - return msidParts.attribute === 'msid'; - }); + parts = spec[0].substring(7).split(' '); + return { stream: parts[0], track: parts[1] }; + } + const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid'); if (planB.length > 0) { parts = planB[0].value.split(' '); - return {stream: parts[0], track: parts[1]}; + return { stream: parts[0], track: parts[1] }; + } +}; + +// SCTP +// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back +// to draft-ietf-mmusic-sctp-sdp-05 +SDPUtils.parseSctpDescription = function (mediaSection) { + const mline = SDPUtils.parseMLine(mediaSection); + const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:'); + let maxMessageSize; + if (maxSizeLine.length > 0) { + maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10); + } + if (isNaN(maxMessageSize)) { + maxMessageSize = 65536; + } + const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:'); + if (sctpPort.length > 0) { + return { + port: parseInt(sctpPort[0].substring(12), 10), + protocol: mline.fmt, + maxMessageSize + }; + } + const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:'); + if (sctpMapLines.length > 0) { + const parts = sctpMapLines[0].substring(10).split(' '); + return { + port: parseInt(parts[0], 10), + protocol: parts[1], + maxMessageSize + }; + } +}; + +// SCTP +// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers +// support by now receiving in this format, unless we originally parsed +// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line +// protocol of DTLS/SCTP -- without UDP/ or TCP/) +SDPUtils.writeSctpDescription = function (media, sctp) { + let output = []; + if (media.protocol !== 'DTLS/SCTP') { + output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctp-port:' + sctp.port + '\r\n']; + } else { + output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n']; + } + if (sctp.maxMessageSize !== undefined) { + output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n'); } + return output.join(''); }; // Generate a session ID for SDP. // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1 // recommends using a cryptographically random +ve 64-bit value // but right now this should be acceptable and within the right range -SDPUtils.generateSessionId = function() { - return Math.random().toString().substr(2, 21); +SDPUtils.generateSessionId = function () { + return Math.random().toString().substr(2, 22); }; -// Write boilder plate for start of SDP +// Write boiler plate for start of SDP // sessId argument is optional - if not supplied it will // be generated randomly // sessVersion is optional and defaults to 2 // sessUser is optional and defaults to 'thisisadapterortc' -SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) { - var sessionId; - var version = sessVer !== undefined ? sessVer : 2; +SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) { + let sessionId; + const version = sessVer !== undefined ? sessVer : 2; if (sessId) { sessionId = sessId; } else { sessionId = SDPUtils.generateSessionId(); } - var user = sessUser || 'thisisadapterortc'; + const user = sessUser || 'thisisadapterortc'; // FIXME: sess-id should be an NTP timestamp. - return 'v=0\r\n' + - 'o=' + user + ' ' + sessionId + ' ' + version + - ' IN IP4 127.0.0.1\r\n' + - 's=-\r\n' + - 't=0 0\r\n'; -}; - -SDPUtils.writeMediaSection = function(transceiver, caps, type, stream) { - var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps); - - // Map ICE parameters (ufrag, pwd) to SDP. - sdp += SDPUtils.writeIceParameters( - transceiver.iceGatherer.getLocalParameters()); - - // Map DTLS parameters to SDP. - sdp += SDPUtils.writeDtlsParameters( - transceiver.dtlsTransport.getLocalParameters(), - type === 'offer' ? 'actpass' : 'active'); - - sdp += 'a=mid:' + transceiver.mid + '\r\n'; - - if (transceiver.direction) { - sdp += 'a=' + transceiver.direction + '\r\n'; - } else if (transceiver.rtpSender && transceiver.rtpReceiver) { - sdp += 'a=sendrecv\r\n'; - } else if (transceiver.rtpSender) { - sdp += 'a=sendonly\r\n'; - } else if (transceiver.rtpReceiver) { - sdp += 'a=recvonly\r\n'; - } else { - sdp += 'a=inactive\r\n'; - } - - if (transceiver.rtpSender) { - // spec. - var msid = 'msid:' + stream.id + ' ' + - transceiver.rtpSender.track.id + '\r\n'; - sdp += 'a=' + msid; - - // for Chrome. - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + - ' ' + msid; - if (transceiver.sendEncodingParameters[0].rtx) { - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + - ' ' + msid; - sdp += 'a=ssrc-group:FID ' + - transceiver.sendEncodingParameters[0].ssrc + ' ' + - transceiver.sendEncodingParameters[0].rtx.ssrc + - '\r\n'; - } - } - // FIXME: this should be written by writeRtpDescription. - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + - ' cname:' + SDPUtils.localCName + '\r\n'; - if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) { - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + - ' cname:' + SDPUtils.localCName + '\r\n'; - } - return sdp; + return 'v=0\r\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\r\n' + 's=-\r\n' + 't=0 0\r\n'; }; // Gets the direction from the mediaSection or the sessionpart. -SDPUtils.getDirection = function(mediaSection, sessionpart) { +SDPUtils.getDirection = function (mediaSection, sessionpart) { // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. - var lines = SDPUtils.splitLines(mediaSection); - for (var i = 0; i < lines.length; i++) { + const lines = SDPUtils.splitLines(mediaSection); + for (let i = 0; i < lines.length; i++) { switch (lines[i]) { case 'a=sendrecv': case 'a=sendonly': case 'a=recvonly': case 'a=inactive': - return lines[i].substr(2); + return lines[i].substring(2); default: - // FIXME: What should happen here? + // FIXME: What should happen here? } } if (sessionpart) { @@ -5271,19 +3203,19 @@ SDPUtils.getDirection = function(mediaSection, sessionpart) { return 'sendrecv'; }; -SDPUtils.getKind = function(mediaSection) { - var lines = SDPUtils.splitLines(mediaSection); - var mline = lines[0].split(' '); - return mline[0].substr(2); +SDPUtils.getKind = function (mediaSection) { + const lines = SDPUtils.splitLines(mediaSection); + const mline = lines[0].split(' '); + return mline[0].substring(2); }; -SDPUtils.isRejected = function(mediaSection) { +SDPUtils.isRejected = function (mediaSection) { return mediaSection.split(' ', 2)[1] === '0'; }; -SDPUtils.parseMLine = function(mediaSection) { - var lines = SDPUtils.splitLines(mediaSection); - var parts = lines[0].substr(2).split(' '); +SDPUtils.parseMLine = function (mediaSection) { + const lines = SDPUtils.splitLines(mediaSection); + const parts = lines[0].substring(2).split(' '); return { kind: parts[0], port: parseInt(parts[1], 10), @@ -5292,9 +3224,9 @@ SDPUtils.parseMLine = function(mediaSection) { }; }; -SDPUtils.parseOLine = function(mediaSection) { - var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; - var parts = line.substr(2).split(' '); +SDPUtils.parseOLine = function (mediaSection) { + const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; + const parts = line.substring(2).split(' '); return { username: parts[0], sessionId: parts[1], @@ -5306,12 +3238,12 @@ SDPUtils.parseOLine = function(mediaSection) { }; // a very naive interpretation of a valid SDP. -SDPUtils.isValidSDP = function(blob) { +SDPUtils.isValidSDP = function (blob) { if (typeof blob !== 'string' || blob.length === 0) { return false; } - var lines = SDPUtils.splitLines(blob); - for (var i = 0; i < lines.length; i++) { + const lines = SDPUtils.splitLines(blob); + for (let i = 0; i < lines.length; i++) { if (lines[i].length < 2 || lines[i].charAt(1) !== '=') { return false; } @@ -5324,6 +3256,5 @@ SDPUtils.isValidSDP = function(blob) { if (typeof module === 'object') { module.exports = SDPUtils; } - },{}]},{},[1])(1) }); From 8bfc8ade9fa8ca80850b41600df476314dee6ec0 Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 27 Apr 2026 11:29:31 -0400 Subject: [PATCH 12/13] Update Microphone.qex --- example/Microphone.qex | Bin 205078 -> 183546 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/example/Microphone.qex b/example/Microphone.qex index 78cf7026808a59fad45f99013b05234496f5688f..5c94b0249ee760eec76d6675997827f0e13dee81 100644 GIT binary patch delta 111346 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

    X{kJdY$E{yGJsSdq;)f1BYC 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%0DnH(EJcT8)`zp-LC9~zRKa;8WFc`#D4#TiTvyI7h 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

    d!qp{bURL0CxSN{|AKfsN-+Q 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 Date: Tue, 28 Apr 2026 11:17:36 -0400 Subject: [PATCH 13/13] v2.0.5 changed to button type instead of input type changed to addeventhandler instead of onclick listeners --- bin/Microphone.adc | Bin 79297 -> 79620 bytes changelog.md | 3 +- config.xml | 2 +- example/Microphone.qex | Bin 183546 -> 183917 bytes resources/dynamic/open.html | 99 ++++++++++++++++++++++++++++-------- 5 files changed, 81 insertions(+), 23 deletions(-) diff --git a/bin/Microphone.adc b/bin/Microphone.adc index 20d2472a11b4dfa7006601c68a5d6767a7cefae8..0bc85f5c113ef58b2d2693209ee1e11d9835c255 100644 GIT binary patch delta 5050 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

    - + class="btn primary"> + {%=CurrentADC.PropValue("startBtnText")%} + - + disabled="disabled"> + {%=CurrentADC.PropValue("stopBtnText")%} +
    @@ -98,20 +104,20 @@
    {%if allowSaveFile then%} - + class="btn"> + {%=CurrentADC.PropValue("btnSaveFileText")%} + {%EndIf%} - + class="btn"> + {%=CurrentADC.PropValue("UploadButtonText")%} + - \ No newline at end of file + + + \ No newline at end of file

    X{kJdY$E{yGJsSdq;)n}6XC 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 delta 45614 zcmYhiV{9he_x)Yly=vQTr*=EFZQFLQ+P0_m)V6J7YTMRxe}Bn8c}`C9d9mM~tn9tc z+P$ri;VqB|iZb93a3CNcFd$xji3n1#UVbUM{Rbki8HxIoz(cNeJC(Iu>VDP=$KRG_U8Y1OB!3)(Qk9;$ zd5EXU17&u#xQwi|W8kDhe}$V*#GIbhcMmc#pGFfj(UNzi-ZijN=!Q9D8b6*su#Z-v ze_~&UbqZsR*`>vLt==}Xv(M+l>TbFH{ai_a~!;h5?&X>Xj7@Iz@ zg?o#ffQhIONRagSa^7M-t%2UwC&$9E)iRZ@mVuReDd}dpVh*&@AWrfIUITSLn$(*j$*L z;qtHWt5=OPYdyADJd03CsI~2rw5zcM`qdOlj<@AuScGQCT^0 z91Jedzkcxq=zo!{WjGY5v+6bFc>DFy_r0XoP2rMT!H7T)l2^gVK$Vg|z;J*a_%I|g zH4>jKmy)*;l+l>U)|s@-ZD-|*(v$9fQQO*tRgb}yo{&Q60PqjNy>zo}w5Qlh~5W6`ne=uMP_K_!4 zC6yASkFSiU|NI1CjCGtRng=u{7vhH2__fXyY+DC56D3yWC|Uf-I$eYTtEI0-Ay0zE zr?8J}eGE(KI+2_aHEQNEmIIsTAhh{Gv0ZerNa`dT7Hx{}&j1M==3J|}f3dV}d>Ju*5mNo%n~uk-2reH!5zArqf7KGIG%5Wr~cHy8eG2Y;Q{s-CB>rcJT?lpb?ah_ zhN^IT#RitV**|pUea*J6a7C*WyJsuhT~Up_fIs&xn4cP3C1$;VBnb&Q_;Y(+ z{GE+*Eq3`Rigr){cmH?RC*N2yYjQ4Hy!`J&kqJ#v>uw!nM-lONCXO3b(wt4*EldoT z0`*MKDrk(WBe@G>`K6T+p>MQ z^cYLEFyyu5?!1JGs%cSSPhjT!Dd@^Dw`A2}zb=85BXDo;p!!kSI*l8a}!!EHd622&V4*@l{;Geft!y%M)wEJhxyDx9S!yDO}Doj*A5`F(zj~o3Ad)O zqm`bA5!W)ocD7UmoI6)t4m~z2my&dvfK(v=1TA)5ZKb_(%SVv2MZrv%Q=%;<-qm_M zvB~&mB!A=N92|X7;#4m$*wa?s@TNtcuS{F}hsMt`=TsN{>Kc;f$24&1f_i2^e}Hm* zUko0Xy<{EyBj_G)caqTJ?B+B~iP3vPz*MuJu=1vD&BiV_|3-VBj0}xOJ@03TPY^i5 z@c1P%>u-c7^Lb?{KKzv9?xfMemuc|mYa;HRPix?7OVUzL#>b!9vtNna^hN$pP1`KC zS$-J~{DNui#t^LeE?TrfH@;S5bQNJNW%m6@TqPXlv0(UWan-N7^*Yf!Z};t9snqVr z%~qCcw%d>D_|0uoeL9k2Sr?V1H5#=E%l!x9|KDdM99=yp>Yhh z5cGevg@^nl89_@X!6E^sYU;V* zasvEjWxsNBU3!^MOmj!0oG^pY3MovF&bOQ+r%!A*HX(b6#Eu+g zB^?DnxRh4sXYPDzgY@WlqxA6PDCzOMA((s=Ht%?ow&WB$x6S~+MA8?Q11JO!kcb`r zHG6({pAC0<|JXeQbvN7(NJmY80KYOq4exGTx2@dMs~e{$}9so02tZ+9KXp zHr)U(SGw!_oC#E=x|w$x|PLAEWcFAw2SC;CKTTlG13FWggb7Xq4>YTv2FvYlzaur zlPl}j6;B`?O!x#xQMM%v~I~2<)11+|EW@!CURfYnHBx$tK!&_ zF6C(Fz>ybNF~m@gAsY-79oV6zeiPb~gpWun{G>_cIg=6^404NYVyN6v{aTXudIH?@ zLi-R;0x9~WAt4}qL}c7o7($|g6_m7#-X2$@^X}RaBdbgi6vWdmaeD`$jpsJG4XHFug8z0#+f; zU%PHnlDYD*a5Q4@W+td&a{N|!b^ZR=94VFA=Hy+1w*BIxW&*UWe=AT4zUu584M04o zSQ8_c8@0JTMOWE~D*Bq(5Ms*0%UgR6*vNe+A;yT*S|^(hI(PbgRpkA%D?hm=AHxgm z{-V-uU@JnCrgSC7UYORHIxJ?&WS`KC!-9CHd%y=%;?-6e>zvwuC9Qfp&j`J z!-bZYz#iR{UOw;P!Ao%_Mz~nG1v-gGk|MVZ^zd18G7N7BdO5Tkhn}Ya1CHE*x zk9R@=0TE5ssAm9fj@|hLe1;>=|6UR=&AlK{6nkoJIk54S+wXG@0P|Q4K+`~D0*pIL zZCcC!bhCZzGqx8Wt~NtT6Q>R3X6CNWO!YWpV3JoCa&_i6R!3N}_`e^XC4bfC3A{yh z6-dcPYZT|3sTGrxS5G`tQ(KWMj?wBXDc872A8QFum`wr4n#O8y7(o1f&XT=SXC}C0 z#)Hz(Lw!QZZ$KW}uvlJb~@Yw5E%96~sC z=^yQIZJPt5hcTT&_9D{-<1zk}YY}C}295`__+LTX2;I5)%hcU`gIBa}3!nq8pO~gzcgrIq=ETjZ_H2H;gj=g}mRvLaJ~@0&IU9alDcCe8}uQHy)wiBA3bP3yd{SXcMdYPIv*t>Q~3@a2nxQFs(^ zYgDHSOw}6vf1aOwhBy+Dxa{$BwKfTr1rps=dMpysfkvPf@oc^%@{ zF%RLbFA`MpR2qIc#WR`jCd|v;47m z3#k`cjShG4p#LsIay6~_5|*KMO@n6kXB2RS7@3aSJyf%?E{7p9UVS^`puK=SP%ckU z!`1a+Za%VNq)9rdR8XcasHTC=TQyCb@2~X4$K!e3J|^+_KzTAS-FlLq$|wn>-SIgy zF~-8WW~)>b^e}`|*IChwo32{A)6fvZ0Nl|7^agvTrjPbb5lQ{Prb3rn&d`mLeIAHl zMJ+`0S=zeH%Gh}EK&KtR_{C*rmN9dx#lA#_kLa8f67$x#QsH=a@N~f;mg4D-DU1Rb z`!k2obo+ZKpB0z>fV%KZDBfj@iGA+ce~{X{Pd@ZZ@EC@H)G#BM#Z?RHa#x3Xu;#U# z6gWNzX8V3b&u|umi5JYr?IV|e*Z|zOWVhjxAMV^|nI*xG^4A7v-NmtDGM2-#)(BHB z+d_fZ6AyxlTTp57#A8vaq8#7toM!o$Qy~u z74hX!CrzDyrPpIyR<8t<#WR@#iJFNo+Yk!!O4&n^xPXeP9$qCA z&nDGDNCZs?-vQ{12**`YpG+z*MOhP$mX-*AAmyw;6TkVpd!_^ymo&b2(_b55;}pu2 zxuI^y1xM|~eyhw7LPVuZ*MrC;A^pNz%Vw;yol+gK4Bq5z3sK%Vn~qVg8%c{hk|?_2 zedG<4<)f?j(1>?e=F(D*=?2#G7kYKaZUfM+VL}42JrEIa&)hV_@Z|A&QNP2>{(D-n zmJ3(WQEAQ$kIuf~m-n(psyBPFzMB>NAWCBgJUyoZQy@mJg&W}CK7YFSUf;8y=W5P& zC09;&XnJ&0Z}=cI>fkNcl`%1zgFg(8)=Z3tnDs7?ap*|4sUodlOMn}Q4w)jQUQ7X{G5{iL*#)yT?kMrjwJY=P#-;+_&m}LPK&Y`;Bo%24gvwu53k6-@SJXN?oe5sH;fJy z56h#6jaI4Y_J(QtH#MaRyG?MN9hWuy-Y-P#nu%OU}TxV6L zUft}P|3hl6`ZKq9PdccD`6uQjPXDXMPYlTS*%5vLw>?J;(xa1t z!uR2=!Ayw@fa#{5LprEo_0m&yVnS*ejG>js@*WbZk7zWdpM&IiMSq2qZ7O5dE3BST zU&EbBGjdXWhZYTzsWj*+I8SbEu!cMQN*}Dpiv?mWvNcHP!;#`~CI+Kg1?^DcMngpm zv>o1CTm%1{y#rBJ^;=XkKz?)?P@Fuo_LD9~qZ^ZLQ!Qv>uyXutj|wE&S(l)jU5e;Fdb&a%PN;^C1!(S^5mFI4aXo-2nBe zARYF8AqtubO#24;BuS%s=IvC|UgFomunxaLqS%I+TvK!LJj|$8m=;nL)ie0y0{r+Y zd0C?;p^Cs(s5bq`+ZA&1!%LRSF3EItPwy%l1#kr>Jq{Kfc77h?uuEEZVF^%i6tVSK z>8cU6*wNyih(7&~MCe7^T5uATRW>ZHqpqs2MU~gu+QJl`la*`n0AAv-f!;+It!(x1 z=4QJm&>*QWP5=hglzR%l8~G$z2HPeghcJX3o55@oFUqF02fC;h;%0r& z56DM+5$csU_V(|aNob5UG3w+anCV~;zdra{GEucrk^1f0a{yz{w-p7KN>`qfds^KP%vr&P>89FdLX ziy6#fNxP2`X~`H~s+*XuWBn?XwujMj+ZL_^ew)q>wvs*R;b1ng;mG$^6qg0F7d0e# zBROY36lgX!WDhZi2de1;4$z0jM{abh6N$fbk~EkbK9jpf{`})_-1}|974Qz=1$qe& zW$z$D52ndG_J(p4A6DaaU>7_nwu@N>{^AfO)W$dtQ&hqGSCn1ZfUk|P8ye%uTR!Tj zC^Ih9ukI~eFp{CUT|{kdiJ2riI7`13Y!dI4Rmp$&mN3O zO<*b;(J-bNR2vuh@gZjK^Q_@f$p!^s7H^n!Y8y=*de&^#4jtAmlL86U?2%^%14MK2 z&rG0QA}4=4Am8K7?v_h;;8dciI3FKYN(XVtS@rYZ)Cp9%4bQ^$;qj-V040!31$)wm zvNp+)i1$R>__ao0hb-{G(bs%3B~i z8{n+@zm>hx3LBx#cIcd4T-cI+2#vXS_@!2_E82a?6~t5B+pVwsRsP}#?2Nu?)@Qu) zL0LWtrw|}%m$QXBcE`wU0PTC@iku^_n2?eDckE}3x&ks88*>JIvv*tvPUq)ASFlCF z@kQ;*X?A+MVT!Qns99e{5r@(-9+(4OQ*YedgJ9^Ki!$^`UnJ1 z$8MNyEO)yUvP@+=)eIES&mL=AzK8YDvc+f<=ScTdnq)yvYNTfvp4kk*a& z#aDA>VCA&9Nl^R@g#EOdqdG7N`#=$>Ax0*wO1RqZ^w9%EbQhkytPgr zD<6rE!Tb!G^FyAn7LmB;iu3W9ELlCy`}2W6hQ#_B2IEWKg9aTI14rOXw0%!V@nsYs z(Q_{PH+Jy$)m2}Z8Pa8I!7_M!@T;oQmN(W}&uglc3wZLuIVHdrj%;t&MGDTiZ)n;Y z3Eto|E&$RfL>;T2m~QZMx4YY?3F+Wg;qcg9WcCerZzrM}r zpxM-eM7^qgcQSl59!{z=9MiyQgiFyhhiU0*E7wuoxWF2Qw`ydISg>bG1%)`;5(5ge zv}6a+1rpSIZ0lhur-;bm&i+C7B3kgogR%9eQueA@UGRo4cy>MsoB9^u)+ugF$5uz# z1;P6*oudkg0j=;Bn%fnSC{c^2LqEt^Rq>&XXqG)*y=`a}C+-6X`f7k+%9v&Y=GPyQ zyb;4dx#wGnTVCv5)m0=u(*$N^xc0D>4RT8oY3GPUysVo17BfbF<-*cEwCJL~`YgWq}<(~f>Q?pHTU@~?v8%3hKwEvw>_NkEG*O^{EOE0q{`08{Z;Cr?j!xM)5 z)+&jES*Y!bw^rX!yJVy0v@czK!B~ADui=4Oo>JFbZMhA1Bz;a#{%z2FD^vFh)*9!| zplP4`(DL?Fl#1J3B-ier#NZoG1xKJI28_L(V2cXfGONdmeFbdhn!JjjEpdT|E%^B- zT!MCg{iY+*0k5GV#--^N7?_*-j4d*X_oPydWKIvS*TW**c$7E>IvGNeQDk?$J4_AY zWc}bDtF!ZC{xCt`zosz`tY_u?hVSC^aNi)T*P-ElQ@M8~KpyOw?GJ=oxlX*90zTys z!*o-sg{DSk%rMa|8TFPBUxDCm<5bkoViR826TCGA}Tl``Yz-^0{+oo7_bZ^mf-u}e8ZO&H4Ca2XE*!T^(uGfV+|bJ_g8aC&2)_8nf|vMn(|SurSqPb0r#vC`Qy;k@sC z^m-IXPEJAz%LpR9Lg@|sxG*tirUE&a?9w5!=EMx-_Wtj5`22UPSTW4hOp_~Hf0luM zPX;me;qx*-~r`M-=TF+0cdI-q(YApR}@m1DZ*LHRUX3KZhd|8JNf8S`|R&N)b z8rBvV#wrJ!i7KDbZ~;F7P>=$mPTt-;10Jt%K8GT+JCRuHujZQ8N&48NKxC6&Ex&uyRF99RYrkdw0eZjO(ijBXh8Az$Yh4mkNm2R0?p_Yb zxibLk4QP$Fy5z%|TvPCg)umcJZb@>By5uEXau#f#tvLXz4wUiY3HgR|S-_HI3m0zW zNh-C*q?x{IiKnmb;e#u2o|(9J29R)f3UgeDPggdYFB?e=*pLyGzFs^w`B{giP$qFE z*_BCw;mXhS0zXH!;vnZ@;r-AZ}kCTqzw z_1rd7eo@p2sL0xrHoNTQcdQeIW`p5TF3ZsHo;Y5p%aTZCS^(0dn4i;D6+3q0o}Gz(MMK zL6kc%9c~Q%UD`TC)P@B(s{)9WPnS@|IL9jBK;g+6=Ql~>tI!u{lSPXqBea&wPF07b zg3T?_;-;E#6Bd57J%|QY0Myv9p0H|r0DtposxwsLy=P53SIr%3E`dn=vXlC`IXhf# zbN|+rHZ|$zU3j7}ggOp)3+tbfA}#-=8=Ori?Uc4+h+8NKGjapl>(ylrYd0XLNCGtw zV#=J^g6kR$Rk1X6ES)P0O@DwoN4P%fwU73lpFb$i0Ir`5Z80=Y z65!*w4~}31r#sGY(eG*hL%(3HMjw$@)!zk=H=@F zOLeOg>)Rnq=&6J+xm~82A?lD*!CWbvPmwdc<@d#Nz2>y}M_XSrh#`_x%IF)=`WMCl zpg3{eHX_x~=&(;t0twfoF z4_eH89HHf@f`Jvp!9(4D8bu-+0`i6M9OSK1yQb2J;sP6CY>(S$gTBhw%2u6ZBOCj$ z;5!6ygS^Xy2z6Taik${?j${`&S|qKnB=?zw=^2?!LdfSy>^%wLUSl+#t7Wd>a6@ZS1az7dTC>5=pg+GT3U!`cs!f*p7QHgwe_ zYUdH;X7fee!~ss@^@{W{C(~emk#3+^fN1Z`a3O;s+7%F1q>aBv)McsaA<*!cl9?JI z6nOL~k}ZjCXV3d3Y4(%as>^4(|ByvKK411&?J8D|$~;mwe%Pizt5}XGp^i?JKQLMo z0T+Y^fkPx#Y%4HV#%l@uqqnCYX}YIQv^SX#;z1@Uer^*owsi0UN-zm*JKumH;TXyi zC!k!PQiLY}@Cbh0p|TUSlM7HX4Rj3g2egFmfX?FmQL}nuln~DrOuJn*7b1S#gSpN- z@3+#yU~>q9AsN;}&`^X#`8wFdDuQ(!q%|uH-+|EeWRXv@cBTiu)7VcHT-OA%faIj_ zBGhjXB-BvyYpK0`kX9{tyd_s7%nEb%IH#zWYm&rq{AAompH8h|^XXJ(TBWK1TO|-~v8l02^Y_;^ zG-4N+QylNH)$9in?3D|zu*|L5MLaRq7B93Vu@;hk(an)=D;kWT=oQe&Lg(3jTA+!@ zM)ktc?goC-n4&CV3TNvdVrXyQN|pge$EBn(#jSMFEvzs!6rH#7Oy9%7**bjTd(Cjkdx|jO&5_0?wCi#&<`oJFz1S_Fcy< zBd&&&A3c*(JUdF4wYKnZNG=!|5{DW!scFVq_<-6Iwzt=`G_G0gK!?42e0==mNzF1}yzXE} zB&JN8GfIKXLc3Jt*o;ZZm(;?O<9t7>$W~7#nV7ER2mNsm-dS;GI>RfrZ`W1B)dPB($s|N_~U!q7KJNF2e(L5F=EnQg$>|8dd?R zR8y`~W_U>gX8pb_lgVeHQ2G>*C`fm$S{MUD2~a@m_K`o;21^ouFhWA@O^m{e?T0WJ z%f6wv?#m~TD}$bAg*9icNDNvn3&Yy~lv0-$ffn1NUinbt?@LG_p78hDd0FCn9wurv z=*~32t~a&%%gHAt`NDuP^mN5>G@ulK(6TD*jA{E5p2B2cCLX z8{P=k97p8#-DFha|Zb(JPFDFNJIa~t~?TG``-$`WZIfM==Z-{#Qo<5h6nL7x1 z$V$$-AS&o9tVeNB0?VwlFy3(TNHL5D1$?*rz^MC7;SbqV?nB_#20Zk4?3eGw|Ca$Hez-?t}M~^Zl@0*?44X$^@Cf!c|iy~;#cTmxb=aZyHJS_@eY3+GU6Px;Ykc4 z6)LDT#HFJOa7}1J-E6P9rr`ii(B_NQ`5 z2kJBF1NMq=sHVsM+JX<$jFec*zNKD9JLwZdL!iK%>ZuZcPIawBbo@4BNfh8C?kmXI zN5M|54i%<_StHw&d29JF2(SeK4Zu};bw?%wM&b2HO8 z#{ZQm+YXr=epnAp0NRPIi&-1}sk-;8iZsH_`nsKor|8$BJOBvrj$Hd|C;ZVTyGZdE z@Beav(t1P&FrzZB;J?ryt04rY{Xv-J(M-T5(mZqZf_;n{95!zUTx@_pCUdc7DwnI17hjDAZSR|`}b7}0SW#M$TzaK z(6q!@u;t5fT<5OxiMiCm2lQwZ?WhnylUkQ@EaBJUUT`)CGL>7)@YVtixDUgs|4ZW- z0}vY68hW3zn5Q)QECN-?7q&VH66&rI9}c@WkyRgQN*n301Qz7cu?u$USaxE|_O=W! z9La4fF7#gD0ofowuI5nx5`3*&4IiZ5_(qcA=ilA8SQk;@KHs7!9<1EUedkB5+@e}d zf5EgMc9=Krd4bT4&zJ#MV?X4giR#;Hx(j^}<;w{Cl5ypc?#|p5cZS(`K(-*e#JuC{ zo!BL&N|CHWW@I1#!~)(#6*15S)1JBW3ux>$-v@tRMckEKIBfkYFl-*QO~bVSd?ByR zNVxik8dy>h<(3|JF`3Htjj~hQDoNF@d0|oC8^^Ji5GM+X@)QASd87lf8A|=Y0K2@! zWMs-_>8?Tzfd}(gqyc_K_BwkUqhhwi-oLt9+K)Rwi5cYQkoDb{NkczV(^Y8v2i0c- zAzsVG$2^@9d{R+jNiT(Fw$cY64zB^Op^K^7t0cyTuLqkaZ5x#UN@(>7vK`ijn$)96 z+vjM5{0{klZ)ZTSazcU9f7H?MRRbmCZP;3(brzpnJi%02N`I5q)l+BExwjIA8>x3o zJ$IojDbnC-6~S`M9;%akdLMmil9+bj+*t^U^}l?jwQ7IJW7t{Cb@0$1La{}Ose72+ zQFuC@w1$qg`A7#J3dC929?je`8SqMq-aq*M)C8%r>0KQBp=yJ}821Kb zy9DKrAK1Qr>x*$5zq~IybFd-~fkzwhc?fg@G6|l$F##YT`;*Jn&dh*9|JFz))?DYm z4L_j2%tUg!WC_;Ny3ff~7E3g@;0&aZTb&5CRBMm;4V%jgRTt|1bimkZ%NBgqu;B=n zk+CUJQk?-&o_#FAigh~f#flc_ES zK0yGEDDoi)y$lmMy7PFc3o#(xN;Dm3e5u6*{<2}OX05~cSMehK{r zwhPKnJZ|UqTe6>@t0$-`?6?o!j0F3hqq&+Pwklv>H>gAd>=1V@5M-B5aCtn2=AA*Cl!f z-a_r{F7pG!ev(apzw0yhhyyK!3w#M}0|1S8TVdmVUOwBe?(ormW%9E&q0XXd>$_}_ zS9dHRVTrYIaa#=KW9b3SY-S+^TQ=qPF-O zhvCc1tVh++jT3z|1ZkxMfM~*D^pdcJ&4tZ}Y0S8HC=23-2dt|+17x9ej(J^|zshSq z?>lJh)j#IlbDCMKyfe&GWK1P@&)=KTkJC4)tTnSJX|bc*HgNkUMJ{BND2fYY?<_+X zQSYX~nFzP@nr3#zNe5U&dl&S;o9G}CNQT9@$`CO#x2|r%feEI4}^jAx{Z(N{1;%rNtk|6zZ*(3uqN%E_45E%9_^rQ zPrq{C__1SisjoZG+aIPf^X|$7Q==(*Q(2ZePSo4qKg> zQ5S9NJimnwAk>y^#2+>JCo^u&c1I(Z-ZVM(I!%g0cS7tDgXI7COoxYbJ+SE8Ksx>P zr>cpISJHxJ1aR>Z=i!}QWD8145(YmE&l5%Kzd}7-oMLuO<|;mZM#g)&DgH0pa^W*P zVk{2RD{*_kL7#Udm5~sb*pW2s4~QT0d*LN1`tZZe0Q1prK#dKNy;pWmG?j zPA-ZC+U?cJLnIo!7K@jV?#Nt?mjW78((AODRw-TNhK7j;IDAb-kYw{soxiCVXupaTr zg>`lYW&2=Jb}MeIvU%VnpjgG(=>leJaRg2OG!L3-(2*Y+q!unArgo0b$#I4ZV65oC zVTu3L?Fzut;gq`Q?EfQiW+Bb#=pu8fv}Q2%Q2+;5gk=w0ou8_M{$`dwR@q|iWlcka zsUs2?xekz|&&WkT{^h5OT^3)8wwohVIdZ^ad6*00_Zc&RZL5!+bx4nm*=>$YtfJb+ za8V?gG6(}Ug2=v(z7tJo9crd<3G0WN^(dCme(S))Bw-PUmsOjwH=I|Jit|f}kQ{l4 z381*rO``{t*eaeelJ}p#)x4X&Re9vo8U;}*+bqpM>G-sd@yK;QqBfk>nMsnGFmmz+ zEV8;<<(3=n$R5o*hJtJ%;kO1Rbz9^$Is{#1?Utb`?yZFHb51{to-EqT1r`z$$s#P1?j1OQM?8|2k>FG4@!d#TSCN7Os@Au?rBy;Cfnz=ngmDzG2ru|U6ekyJru`V$ElEQLOmj`x849-DSLio{Xi4(65 zN( zUbdhw+%PM5W){R}OHph^g04F5^BHQkN*m3C-;b4h*d>~OFe(B2LyaWgFb-OFihC+Ij z&8bOVN*@w}pIv}kOk7eXC6fcQmH7B=qp#Kd=iibDE}Nux9scT#%Y0iz|C4uAVw*R} zfBbx&klEl@t ziHh3qG+-1vnu0};7z-oE0+Nv7h-^{eMUOb$%`0E2Pa_{cOTM1b)E}u(2d}gMVv6Zx ziOdAzXnozmZ6XdiazQB9k^Q4)dqR#z;8dkz7%;GRjhRknTK}owu(- zMAvW{n$N{H`G5mHsqPJY79CC7TE^AFePG%3PCaxkqPWh5jondbR7L5-I{ig3cT}Ro zp3mG=)CVxideW0`)aT9JvOJBN{O!}2I*!t9ULx)p|M13I!7AhkM6cJ+VB0S*y|ys1 z1V$Kc$|(tnT$TETghqM}IJJCF;zsWMu2VwY z4eAY|Z88*yF(`IJUCZVFDYY&Zd)z6DN?1hw0{dW|Ss{w#6Fq1bIBcelD;+Z(3fj}T zW`;QMi7=Hr{k&x<7$#x{4rwC*5Sy_b?@a~`j2y$>u_)Y}?h~+QkOb4hs)FS~?bJq& z{u;EM<#%_1K@Ba(=4q6soYKdP&m>r?w-%U4(WI`(%|X0|WaYbZmGlV1*pq0dDN6w#KEpJNb|bhF4b?$$7ynA8 z4%iN}P=w0w6wMiR~d5q+tgo27w zOJ_+wgVp=V{%;#&hPhrNJD2aUf`Nhi%*$Sba+Gkb2&HgTiBS=Sjbt@9%$`f~@2ggv zh5{TMUnT=kb4~PQ9sYb;hnb;*^fhb2pEGTR4iRU;+{jtL<+|dJvp_Z#(mOV zWL6b}Cn3E66l^D1Z*}@lyek_)-81vtrI6X2<;c!%5=;uSwg!_dvUs%Lcznx+2UUw0 zWXT2R7TJop9P*&SKPe?%qNAQTzoF5gvWfdKLGTXXlD}(9GqC%D)p|Iqkc(&xm)er} z4lD~w`;Cueo#boMIzbA4BhX+SXw9hCnarxw>{)Fde1erzjD#1%mVN!*|3}nktg}^6 zK+lJ)BHM)%efeMN4YgbP0(#mDMv;t<&EEZqFc^~2sIc7E3bqj);)YcL`>@`daqL!U z<8LeAe<|R~W(YTZ`bZQ!(GU0jfa;pfa!x&ak+0uaMn1zbVv~xX$5@e-`vg7X|f&8JlOlDOny*hhhd*sw<+PnNKu-vrdzOt%X!!jLe) zq>@<9nJ$SWKCTPur2Juu#F2~L0S@b7EZMeMct-5;AI5sa^3WE@U>}NVWQN;~`x;~m zJUqnu)@U~Hkhn16YMefsy@gBN-PXZ`Nt6EayTu`Jsb)8<{*MuLf+bOyCVxanuFeLq zu`I5Ga*};zEJ!>e6u#wx6L#pM`{fIu2d$~9RJ~|800x1gwz0|D_GG@2b)!-THe%$? z9l!9>TxNvIFeZL;`K~=p$|jJu>q-%Q-cI6Wz3Ge@2img;?ZZtlkhPk0LgbT7@f;<$ zpXTvZiZwa(uSZ+Sr7aNDN7^<=qooXD!bSU@Q_77#dX-6}6gM$G?MWM91br}Y~aST zk*gbuh|X07?t;X)ZvoOS{_rgDM}4(Z8fI`mOouZq8IK6geqZXRr>|tPMj~Y1k9saG zb)Ah6of7G-gJCzglao?Jy{n}-WenTxV9F65%z4y>eHYi0o3werNf%d&A^2Rg^WbSG zPM4%u&_I!visA>2m3t{38H@%Y1oz6O7T+@`)l zz3#G|IvaY0U0wzJg-wyVkqpOQ_(`3t+ev!cY8HNDXwx6(p`Ox zcn~qppo=0Xy{F_Tom#-ZWEo>3%>}Dw1k)@kd^B_jwUgVmVEPqtwa7P0gUgkDB0X@L zRGH7krj?tZm_GL3-5QbIwjlal)v%OU;pvSA;91*~crLavUesy)*5{ zgd3EbG;WBE1fd7#r9NMbD_J*b$DML*E-|&rK&5MHGTIUZuw|eUq37xU2Vp>-zf~lG zU0%~y>8U7ooT{~`5KK1{Q4ho|+b_?1#@yy;a+(kM<~V+)1<%>DtPr z_M4c23QlW=pw&j4tC!2Ye}JsqgTaRk^YBuE3Lun)T0@1Lm7Oef76u(UPItOeB>FJ z1xvg}(1aNM;M*2!dwGr5Yn*{Dcnjg|D#zHJ$}UD9UB=jblGnEp+ecQ~2ImZ}j_kX= z9bBL4Rwtbdw%*UAK>@QlO~D@WAZu51JgRu+uK}lgt2&o zowxLDj?zutPW7WlGVC6j)E4v_L6O9?3G0d`)C*`NWeHr{hai;^KbVG1%?(K>sT{F;j zSbU5`#^Milt~_nqW7x=>X9tD7;dSwAoas@5#Y z_#89tS@J2x8@~^aK=;51diY}N?r2-|@vqkho8ln|)G4SA|H!JXo!#4_{|^lHH4w85 zcJ3e2$)|i%P_3Qa(e2TlyZ62x-Ty|t!55q@s5Ww8>Rda{uJr~VnG;a*nn0wf(`+#X ze?hfL6mD(f2&O2R@giBP4Xy~9%1L&Va1t@2&Pt(kFNkDge>87f+ezX)>6b&Ca=$WI zhy|$qNgXIPk9=fA9dWUMyMMTFS`>NFh_rBpV5gy%j?<03nVEr7V2`5gm8G>mH4Iy& zyKIDh>!zd&RhmLeTbad>Tt{_dE{y7ne+-1T7t*spOHCKk$H&=h+LRv9rbF0@L-v5U zIlvOMbh1y@=_PcS$4-ARFZP=s=J~%KJKvg98Uia1XC?%amr3~67&f#P8h60ju$(1M zy2W6rgkt%%6`K~x>2r*z(O$GtX30xWX6U+Lbv6SSesd=}tV!F*vPpml*A3L@e@tf6 z0-EJ)Sn0NaRO!e9svC0=MZwP|`3z)F)NS@$r`6*kMdi(Vos`G;x*Ic)F}FI6gv&<8 zp&D{Wahgr>`iJWfdz@xR$3Xqt-N2-?q)WrdCsHmiwQYNCq#Gk!mt-BQ&xM<9z>gj@ zivjkaX~0rGP#X+NKAX~{eB%RC>&M;7_ zcvo8@S!5hiXGreVEG?^8l=_sBMeJY8W004{@cs7J-_Wqwa82<7AF6hqQ8N!D3P!=t z`<4V5X(2*fp6T&zuzHgOrl%>`vrnqgA;$Yxl;N36VaxjS0FHGYhqn9^e}N769ffs0 zG9pMZ)FDW?b?m4TU3_!^DcFx^S&@~;TRV5Z{^s7-J9Sm0{8>^`>TiH`+uF{q3IpCr z{Qw3{dt*?znXHOJ!h^>IPbjH2YRdT1J4nJBcpLFuj&=vs$CB!JG*3SFw+CY99%#9J z-QZA<)jO7>t7mwwWaL3_e`c)uWK}nR%K*eXH5)X1G-e>!SXdItreV4Kyn)M2&~s`Q zV{)OdHjfL}@5gRD^TOf?A*_1U3(9=!8l3DJe_fZ5Rjbn^n>Bp2 zxo~@(G|0|Cs@DvT(?d5N$HKUr0Y03y5FZfvjfffT=fHX>D1BQakUblx!fuM~+NKo` zMy|_@tZ;!oiBQbUyDIs-=GWVS?cvbQy=K$7bRx~PXGL-s!a1gSA{S^>f`e_f_;qLEFR#$g6}Y(YX+ z1R;?zai#_fLkcpEz6_9U{hxmS`x{*H_hd0Ga$xhL&6_0^*vcA5$qQGvW~NNQAB}VO zxX4}~XwYhQUV~;{$2V{(V;N|gHG_?5ruNba7!=MA)ym||va!YI^zYWIk0~WjG``im zF#=zd!ERByf6OAAreXsx9B!ziFy*%(4gaObU5w`I82@x>u~F7&s@7m%QBKA(JksU} z;Cq@(j*YXJB6L%N>f#sb!Vh}TB8iOCS$&6RlhtR9nH2L-A>Z`llnOEEo%(N zt9h~*7Bbm|K;xe%vwu0~gdFtjT#V0Pb%4(FCMiq#e*=Rt<4G1bCdpamqUB>?us8C$usAx%r3NLgcUXcpuhEe;R3`1 z#GN|V7lkl^lIX_qq4x-j_XeW(k4O05m-OEs=)dnC^;FU=a`q+s;gDp?M-wJ6zDTZ!~BqabX^e?ozUqp6VZ@dJ<&&ic1D@FRz~I3sc^GW$Z*fo zup0ul^(rAn{k4k!P3@D@BE{?7kZu;!A=%h*e_xqz_(a8yPq-mJET53i6M4rWgxKIf zd{6<#Kk8nuBa4+uX91WP77c)PXp3*1D-Gm3XkggFXfGsmQ7e9Gx2iaEd6F(D;+gtD z$*LyDqMsT^sH!(4Rczzw=PF&4eD2V%8-=~y%7$TPr`xFm$RW&{3Shrdf7d(f$lq1< zf4ambDNjdTPj)l1oNROt4|E+nMV>nlU25l}i)A(LXRFyvwpot=^Q_WpD{|O*u=f}`> zL5uW3it{Rff54@E&JCdSWYi_;AQ6|(G%M+(bdfL8{d}2B zFqX^q{v@B}1xQ87q6EeV5bmqh)z>2!=Ti#wqF*?t-J2uhXuGfb-VD)34cTOtVdRZ? z5FMvz-YQExrZ-~1#?e^2+M zwCfyyjaOrkUCN*{B-?;cw()!-H$5Uk3UEEBZ8F((cRqBf+Y4<9ljF3?7h735Or<(w zr6eKdMQ2swroAPY>Q62GzJ&=+3rrr*R||YwP|!Wc6!2M5ko9@ydC#Cy_Gcr-R3Uo~ zE?23WSXjjLGfB3HLaHE$gQ|c4e~G^&zcd%v8#mk{BZcKPpnSsV2l3t|>T4n)k1PrR zgzx_E0=8@n$9Tj?i~m=;$>A1D`2%u;qJjn;7i^C=u4+Fp(;2i)l~fdh%6mk53=LU+ zQfel>H?Lnwou!mftv+Q&{#%k9_zPJ%_|IC?3BmBe+Zp8tw=$|p*{m`Hf2@U^(?m5w zm~D_RfEJ#E7A^-5KY3?QKcDfw=sOQIxTrll};!rnap z*FonN&BBpJ*Mj4s61r8on=|jo7q($)57P7#@?F}&ZAn{S&%I{x+Jz!pELYVd>vEyV zW1l{H`2tw7nB>c|0$oN*e{qCSe5*Xj;b-Yl{wbRrXIm98`SE<_aRO|x(a6B^JMMr_ z(PgjSdoxQDm}x{s-RJ4)DJnHZH5sO#VK>THumKPx#J!+6WZk=?lFr3DEHq6i%9&Z} z3BR(6Re3%`{gw*Qk9}9#ecN))uPzh1vFAzdh|s6AId&>x9Pz(>e;skhzO1Jz_!gJg z$+B_TP?s@v8}o-O>ltSl(KNL$(<(s+^G7R+q=85p&67{5dap>aFWZ{S_vJvfK3(xn zqhCx`Y3cSx;@|^eU}02Z*j=|-G+wxMVQOTcl=@bo5B-4p@UQ%t(UDnabC6a4)FCNx;CQt_9a-EXL= z19>&T&J-x$QfhV1)Cag)q{_~q!WIY92C54QD~dTOtCZ4Qe}klF9^rjqdH&38Oku`5 znDq}u<-V!YLHQ-l?W4@0_(z&95xKAeLBPhmb$~jnjI}3U@h-`S32K&gJfzrhbZoVS zQ6!u*+SujV%XASun7$0VsBt0x@e~Dqs%Ki7 z3A|*UzCJtzL3|)iFnJ39nSHiQ6rqgYmQ;z(h@#?czpv+a4-V5xYy8nc4cuUon$ zzV>7%OivFo7U_UyGhA6D6=)Rm3@tZ{t#X-6h^(dWe@8uOC9nEs{mllL)}hiSxZ0@H)ljW=K*zrG zO>pb=^X~c?HrxcffsA*!#V$mGC{LKt%#t(A6zOkWr?)4{k2A}+C*H*glM>EzS1ym-FArErq6@Lk(>xs;K71W#fK7tsGCsnP|8 zQO{%+l~Rn8QeBDFwE5IRAx*P8h|247drIEO68uBac6XwW2v_2OSD%jc7CB5hn?HdatRK_ zZ)O;M&Sr|~Ad~^DrkjDWMmOp;x-oDGRWS&(`;_8+Hk(Ns5b%G#wFztGFe}PRsJoV8 z!@$S}uAw>TZ|Gqm9?r^K$hLIt4UbE1e^9i+MP8{aQq1#FzL8!tBdrtEnUy<|vgsHR zO620^ZwNagg-*4fwV5mSEP`8HVf4ZgV z#Dk0rCQT)Ba`Qc_-Yp+X+s8BLSXHi*nXGhDlC=!r!}iDS;m}~tJb$@0z-PKRRkmp6WIU zMA#K*Z|nsnK*?#UTo;?YXda~(icEML*)Pz zUObXFGN>nuGb}!!s`;vtTQP;THC;A4h52g8Fdoc=?qI+ScKguyWadS$e|;0F#JO~d zG;k7$h2_MbeQ0+b_6?PKr3vP~%Yfr^g$AY>+_yXjFmiHCfH7 zvi?9RsHCjvL~Eu`bnQmD@!`FGi!)OZB&`zD1!@9UpFtWssFEu6KSWoBS~qIce*;;+ z)En)7j1wB-U}Kn!9{R^3f9)UUvsr#h0x56dqzZci+Nd|ML1_$;H8-n=SkN48^}w#q zII8uh6vP)00L{##iylbTp#GGGp3gf%DQ*w%kl0%4g>L!6pWv^eRKZ4F*PuJRHK zdb48geGx%4AQXfhQ)Q3A&ME08l8QfK5Zw*B3HZc%l&(ayu#)7hYLA@JZd`e+#E}HT zXfo;6^uzV~;M*=ke>P(rO6~O$3nw*u0$cm&) zw1Nd&!T9EEeTRKbX1Ppe*;F7%;l)9aX=&g|Z$hB8k7(n7zo%)sz{sjje&+XjD9Rf8U`*u#J~0-Tj1Wp#65gYabMU zZmmA3#yVYae!I2$;415M(t7{YM^(ODuGNJK9$9by_#!MCg+Jl54(r55C<#HZrTQ~! zZ9gtPE%MU^xyuIR{bpoPQ!ITjCbTGL} zCST&vf5TVf%*P5E+V8znCmg1C0v>^Y#7%yHbh;`|k26p=$Q)4Q%N!*O3SpowNF-?Z zV6Vh+D$>vCWJM_q1~ukgKnx$TwT278>2s~Mhx_vR%cmUcx*rw52coyBu%LUomZ6k@ zrXs7()*ps7W2zYjuo2LZ7|L3lG+y)7^1!n6e+S5t>FZVX`tW5s&x^CTa2g=GA0J{k zNg$Qug#B6JT`ly^sX?+&%ZoatIQZM^A74CCE(HQA&sRW{$#j~@o5Ip?*sXcQ#Em5K$gf3Ua9IzmqUuBCo8sO!c?E25#}ucaycWbJK1M`DM(H5ffB5-k zz|i3xVMz4du+SGn@(sQxDTUe)j@??JXeu#T_`;^8kbS3ZV%#1q5k0tEfE47}8gk}) znkx3gR6%y`RJ)OUCw_Cik(kk)W@YNmQV8JNqkHMCd(D}Ec}%94RP4y#ECcvbwqs;F zRtNShnP;TNZ3}sVYa9{|#Y1(Be~WJgzpm?E?3mO%<na<-7>CS$c-T8yUNAz>FmGCRbu(I9D_(O^Y5fKROvsRoEP>!5R?OCBsR%b zF_d_zWTl`D#q%O)KDhUGV2ch7_Y2$drUv9K{-}teTk+R@%ib9~9ba#+>>N(n@)}V# zRP*E|YFhSfsnT0DAm4lpy+o)?*qxtxHk*%)12 zXPJe5uUz9ybk_$P$eDNv@mR0($B&|HH&C_?&E$)g!Qv()At$-ufAmLO_riX8=4Hya z=JjU#cEX0d;lX9;nyL9YNL3Ff6g>#qTF_~m@5OUjV#@GH3gC^C7X@L&gLSm;*xshk zNJ!K+LK0wkbDR@F<6c};6hT|$L0 zAB>7M4ZvXfK>6^P;7|*ffyTpfFwRw2VdgkMBwP*ET^8oWXrtV~&l@fcT(MH%DFhAo z(YRDZ2e2KBLj(UItsFLiQAfyelz8>ExTMQnz~T;c92s^(e?O2BPt}^Nm!b`#vl0(v zFP9V>4AWbSDjeGCP!V?P8#2Kb+0W^qVK#FIR@Thl^W^R_lc6U6u=#wbAntatAUb;g zQh|Yr<{Jg7U++Qj-J)@6 z5E_K>7~a>ge|pI#fx&&tx=N1Wk!K_Tlo^Qu(p15x46u_d=;UF#n$#B)31rZ%)^vs{;WHntAiU_Z8j1Wngt6s-nX#~ z2fF;#}+US3NE#!?scnXx5`P8Eh`GY0ZoVQ zt|wIm(98k#TdLNt*nW=o=I{ zFv2U8)X-blS@*=9JFskxh!+&54jtFw)Al#_zB1z_7}g&AUxaPD}$1Egp=48vCYskDa&1`u2j)1UZSM`ub~0hNf1qC^IUv9%{6=7~9I-^#JBEp!Edp9cn2E_! z-3(6#PirMqQ^R(k-@{ax45x}EF@zBe!z1ujZ;l>oBSibcJ0DCM#B-F>q`;GYzUZ0F zvg)i}NU{Z_%g2iL9`M;V5{Erpa`?I4J_X@A8hOKKzXyD=h@#NEVK?*#f8GR|qK}*_dz>+^h^F*6_$X^k)A_1i=<~EVN?*Vx z`4*)#j+|Y}l^qCg@7JYqd-ePaiA}Ou)3)llRZ#4PX}$+)EX6C|-rNww;gGH+Rsb=1 zK_Cvk7YE16Q@u#%Ag@io_hCW-L4sdHV!RxwUiSUEg@LoWviY{DcCB>Oe|773fePw) zjZV#gnqfd%G}hjbks^WS)|R?V;*5(xyFo5yqnRj25smR_5Fca6e{>el@YiV@XlScL@%%^y;i2~MM?quPA>{YGs%xvh@-dPW zI@5rs!~?Xa9q2&~P+F>g22sF?LaN943iBNaBMBb407(bpo1$;EEVi7cLz63WTS&hh z%ZJ4*QZCVq`V0gHy5ahY7D(Ufeu#@>3-k3!K=DPWOWECr?TLl{c9A{7)mGejp4cA6B=Yr3N;`oIl*95A{GLii!O>9FR_ ze#|-0Gw2XPXg*b%e?o4iZROSnZQh7@Fat((J&FcJLeA?g(dWrg7{#=avU+EDEbcD# ze*Ou(oq_-Z(uIf>^B_mO>e`vzF+s<>E>HWBG7|#YQ zh{#{jNu4Qq)TpYK!Y!+brWt7_k6DA1z+&=pRXxYM(2_=)rd$`3e|{^6upgay2J8bB zzjf=QJ=PC(=gm}L);H18p@F)@ty|r=)x`+mw8*OT$9K;teRLnAbSios$RrkVGN2VG zGk8ad_F@YUf8f9+^dr#e{k~cuB2zGpU@;bW5cRO?XTdGEg9ulz0Zvk&Oq!s19;JBK zEux&U7<(lOlhK}%Ve3VyrB_q>?-cQBU1{D1!|1!MGY2PHQ8nJhSO9u8(1E2mO-?As zS3vb9T88;%aCGx`?jSLE{oXXrf6Qhy3#V*SM)I&=fBQbq!8Ry*NNhGuEXwfhZ z?CQSRRSO*&tqLWuiU~>ZH#wA`as0a3Fh)S&f9)6o+hA}Gd7C@A(?Uk%YaO9;^|@uS zgqFi?=(C5F!^^>Fw##C;vprawWe`+kqUKt!FE64 zAwCr5Qlbw_Qw9L1<9+&khF(xhiiAVvjsLfMm&W7nhIOA%YMw2u3l+kR=uww8iP%WP zBt+m8JuqFrsE-!XX`a>4BR+d|_($D_5em#%F1>v^O*QAd2CJW@Xj(<@jJhfEe*?ZH zdiYVspglJd^G4J7Cd=hahMU^@H91LGqP0@`+H+ZtRSL}#GuG5=ygOt8RrKH1St@Zi z{?zr*``;^m!o|+o|GncUkW>o|>p3!K+;<$TzlKk>9Rl_o+1#TbySV8iYKXRWp@@%Y zSk87f@7Q_Rp6dzeR5XIp`z_<$H}iuleja$Z@;`bP*$CK7U<2zf9D})CL&>9 z8s|}cjM<4=aINe{=WI-J(2TqBkUo5In3lFLT@im@7|XIT*+!s1)9E*bLyvjS7?X$| z{o;Y)-X9iVCF| z#Q{mhiIq)})$#VGGBXJ-&Bc`J&&iXTR{l`Bb1UcTajH}>_?;$`V_G=1v`xX28K#m9 zJ(AB;k_A#J_6cwTFFVCDW)=p zY525S(m0N084ju*C-Q%SB0pp|b_T2ufLKG_lo7OX#CSTT8}Nrt;S2MHe9JJvjF1Lm zB-49=q@V_Y319miiD1)In!GzN2J;;XrnDgq5YgV142;__8!=Ma1`UQ;UvtGs42Qmhu(8_fp-22CySUIaUZsx~P| z_dvHH0jGgLLnpxA(Y+Q{=>}d0g*`r$PowZ4ej-Xl?H47NAcohj#*)uY*P!YXFnZUc=X@t}7Jk#cb`D z2!&b?&%Cu4)T*vD0O>_9@Letd>7R6gkLX>a>FNRk9Z(RU8vjO03z=c8H8PNK^>NME ze?XCy@kc~by%_OaeI(Ux(X?Djh!cW7(7Mims_t!46NpGG4I+j}EDa`nnRL^uRWOU(2-u~f4$w~p4c{sHtMa=8sit2jj3R{P?~yEzOaPS zU}{IRJaAm4!?_I5)@|Ez!q-ZnpVY9{7aO{>EUHbt1uleJWjX|13$V~D3%X`XPhAcl zG#%s%v$&Q0*~#I|n>q7@|ICnm9Z9r_X|5}SG!QU8-H6yO8D4(p>&%yZfN6^of7*(S zR-O%esIP?>=``rG-Q%sPkYvq(|nWb zZaGsLTw?z8Mi!zI3yS2zZTlDmCAOXZ@{vxyA04>f+bc*COIe+SjYZR**Hf!^w89fmTf3^%#Og|YI zkd8>@9s-;Qqi*48Eoj(P{=0CK-`N>A zZdeKM{PIpNs|GgLL0pcru|QBzd^)+o;u ztOjbX?L*tJ9XR~ItGg^dhM#E{*HC;~+(QY3kP;E5d+ik-pbI}(e|b}eQr&TfE!($? z;1jWp;1jct(6z4_K9*V^o4B)z7heHns9e7tpKFh`h`c2_+RtC%ImE5k~Kd$Dpr+jb?TtOHHlRZ*62Z(V-p{m0l z{?lTRBSA<+oC^ahVkrK(N{h3Dbe5uL<`(E^^3$WU=TqZn`RMFja`Y;hrysUIZpma= zP4UD{WHYW!O}Vx#1cHV)&0-*4xMU$%YO33CVQ+3)du^)>@`qPCIvVR7jn+pG5%XonpQAHXc!u>7h4d2iCRc+8p< z5*|#OQ|1RF0RJYYC)D5Bf6?lUU;PBzG&c4?+%&(RNs6KMmlN=~w)1Qy%~7*O%> z2r)wi`db8UKm9#h%{PDE>VMcCe)I9x=Fg+8O@p55e_>(9#JXkc*N5GYHiPgvd~zfo^)3e{Obf;w?ePUayS{Eiteef-Vjap139p zTubKmsj?U~!f13bdz)wP8Nh zJ)x>$^c_5URK-WhbV`0W{W`6U2R%qxq$~6`LAnmwAOho6J$U$?;C?RXpgMTMb;D~d ze~4qrOfCB2eW*x@A!%EP#V><+1&Vx?qn+&U$wKVh#~U;|_b6}Us^r`fNi_%ruwpLf zCniRO^eUCeBDPAymqi16zCWj0`v}Zc09SL+6yA}2NpctUf)aYt+-?C$&O=v{TVM-0 z#f5jjQ(|W$>B=35-V1s(*=y=hZE1fKf6wLcrANinA~|KuKEoE>X!2g@&*#aJox?MDJ=BpyMtGeNwboIU(^a>}2|B2(j*~$L+n#!Mk7D1#@7**9wV@G_+KR9A!vyKsb1$h~}Cey})(6 z1ijchzqV%c10eq+w}5m2RZOz+kJ#5%9Dd+5a5x)i&5Nr59yPZ+#=2o)JbCa-i3qc{ z`1wTzgR$jV-$$2XmLuw%^mB@4e>w=ef&Cjs4IIMYo%XIB;fL^2f2?v~Bc7}*-nI_w=Ei=ouCcnI9H zJWi)KJnoH8FwQoTsS4F1hZ_b@7gXC_6gacV`iL)nyhnBTh%YK{=`nO3e^_fA3Vbw+ z)i8H%zg1?lBm4P0+`JnUXD8QnO=xWfeEAzftu}y=d~cYe0z!T#mgqn(pAav!C+OO4 zE?vO(a*0bztt58M=y!o{z`r9|8QX05qDx4@T4NS3d5382X}tRDLo7_RV5#GEAob^( zmw{SuUNkbwuq4%mb}f?We{fyFo~fX-Ne?G3=5yop2!-kEiuA-Z9;E5 zcH6hB8aJ3!BjmL!qyF@Er%ov3tu0JFFvVk1JP0x%sT(-Wrlbp-S~zuG7~%HqR#f zJ4K!uC3bxzzW&y;+epX^-y8>ofw;T9-Du6}U_p7%WI>_adKkxrPZ~o&gFvr_<-jjb zxc{=deQ$uiHGfCdFdL;K@z;a&Y@P$FT^BtKiaNU_hlFV)lRbMW2ArtWF!%Id0r|~- z)y8h|X_~#DGl6g2e=vVGZYf{u;5a{}50pCz?Ws;=g5Q6S z6?IUWFA6%2vo4=Z;s*hjqBJ!bH&hD^8E;zGRF_%tFt47qX&#?-=^meMv`>hU^v`@b zZUu|PNpD*hgo-eXUDgLaS2P=upS7-Kg^BBkb226pu4PF+e`_55gsN$OhxzYiydWL- z#0QQXx!>mdXrFyLzK{0Di~ByZx1s5RD5I5=yW<)jjXyaJ9fCN6@ek?-zxoor8Erg% zwWc?tUE2*^_@CpQXsCqertSxf+ds^MspsH_D-4(Rsd#sQ;tkDN}3a`lFaj*|h8$M{TJ9*@ieV$O#A^@`mMyOf5bdFBOe;f*FpY#&%O@}!d+3<6@3m0>1SkQ4xJk>_d~^95;xz*Ruq?+uYy4U z_~UYxoH=CG-5wGb!LQ&5exe*T;nfP~yTonI;06QHyIH@I+GMJ8RUyT!$O18Xu+ zkM=vT@Lw14JG5|*IumJ2D&13LZw}hPpWszue{@Jj6;hqZg51wIuJ>ChO`#xggmE2h ziDO8a;^#oH^VMA6c%vwx^K3TDI20vJ!#J%@F`if*#`!emt`lz3?|Um?hm*sN%SEn0 zBo#CJwI6oT{=Ua@ltIWBHBvMiC&ESv9^=4<$@$r6{QG0tPq+q%7T&ui@6X_|bZ!-a>7X@L>YS#1sRQO)pz zIPopnREurcF8hfxf_5{IZ@+Pq^>nZg841TiK2KSB02(T?k`R?$o~|wAX-1HgXN$>; z98_al8dez&hdW+&A?ePShtl=-t=sgze`84IrKqMwMkdn8rFDEjsA}56J%g?_R`sCl zQKNA~B-1I|Z2q3j#mmWyG@nLs-r(v&;HmHLa>6AJ9u#6vT5}xb&NuBSVgAlir1Kn; zPS41Pj5ijY4`Q4iWeajaRAI4~=>!vcO0OVq0FQA+XjQUw6Pf5?eO zd}dW$g(H^r-{p_7AT+}tbUR{&W(96W=RHV2rxTKF`okTlLa$-*FDXW~?4Ij!8yG5j zE>kKzt}re1|@^;r}OTaYmWICza@f2}LQ>>kI>@?+XM8 z0BIR=*T#7S@y3~6OFbdpL^#_ve^4$m)4%L~a~tXPuP4y*G?@WP&%Av-Up_(@7gPMfObBR2eF>g@5jM&H^7-6JR2xpl+%;)Mu|5AO}tIQ5R?LG!yfRY+A zPAu*1WPVSdjedf)f5n!#6P$4M=)~^8-U(Rx<69Fles$}CxYN28NO)jB$jD|JdSC;# zf&TySZ>~o&d(i zOs_+`NaKdw28et3;H=h(cbp#HEgVJ0+C71@Pm)UQpQ94JLi(1d=Okp;h@h+pMoW^B z0wrumXBtRVf8{(vr&BUSN|C2L&R4T3>hX2FL}a=P6c*;mA_E;a;u|Gf28gP>N@lh6 z1RAqpKTvjpZ_$vtjhAK?;_z_3Opib|NlUyWO-D?p>1;L{xfi4YxU@wNTd{&=z7v#1 z0(7aZS7zf)XL&()E6YOI`Bsa2f6?_C_)@MfuI;4oe??tiTsxP&JDJ|?9g5gQVNdmq zM`I}@i)40Irp^MWl27p865|r#xzLTeN+(+;#>O2TjXW!oG9vAOEVzRXdX0Cz#)?nZtE~8h5hNlMf2Ky#daV^7y^YrcS;H9N0cPK3wPMZf z+xz~Xb)$9dJ^5O0wAvWCwkxC;@RIx^u8=mL3x5H3HrK}6_1xKPIY9q6xV9M-2)huB z1Y1sY`@Kzj#;zg5)MU-`LHoXCn~x`!rmeuJ?f47TH%|61ceBK~{PDn{_Wk;1Nx(ZM ze_4POo>Wy@?A+aAa6;EB?29SJg%ouW1%f1@vwh7xZN_+iQDrp!3S z@eAb@_`QF#=DKdwK(nVs2E8wgW?E+He|PhTyqKY`-8`f$)$DNhYXTI?NyrK9DMnv{ zVRH5f^s7;8;27kEFZn*sR~Nd6)8AB=x9+<4Y?A3zC1R=FFY&J_`$Wm|*feOPoQLb6=x>Wa#K#lw<5wPdNie`DQRQGf<7|RLTh>_S}msL)>)<7;&=N~Bn=YikJ_6z2>!Z)JF8@7Gu`Dz&s z@ul6-V^{yez`KP^u<% zwAG_21;4jP4~$tMs*O9ZyoXyTK&?XwMao%T=8IG4DL@Up1o zX}bhaAU@E#N2ngQk0($3=YOo`K7ab&Wi=LA6EwIkown4}gz#T7 z0^HH@*;)bmMiD!|DNx+dz0sWuD>_8&zvhRFf*&EM+GA&SY41lYj^<<+UP_Dx$vNcPNbo~633H?~4Y8m|qnOXKvr zd+q3E?U*tj9tIzdvJa*=PmG+r{nsf|QNI5)_V3R(pS-NetY2Tu-h6#jWdgF!`}Ovt zage)S{=KqUoLXm3*Dt8#z0kX;s4CRzB*#%JOL0 zrnPYAo2D=K9$}23{?;Kn_h3ti8qqT)aBgwwZqd?HTbHtz4kp`78o5UPD4+?!vh5Co z?R=IV7>xTH0)^W}kJN6JS8jXkW;!D*`i-_vqy!IkKDa)#U$EAi`jJ5T%gwH&qQ_ye zRQ$Vlv|t)Mx%u|C(x?h9n-L|IM)S56!regTcWu$D$mB4O=D$*%l1B#HIU9?cpHFXN zYIherUL!9b<|4bt7GrZ!rUeYqpfkMcUvd+}=RkLNACQqp0)4DHah^ULq~QC_LguTU zk)ai&9YRv2u%AQBv^(%}tH=Gb8+u1=Z!5b48&=Qi^21Kfb9c%&rp7GkgpA9;xWR_ze#&*}w?N<4^VG#e1p~V!id*roeop66dkA=N1^~ zfND?Z)=sDzu>&19jeL1#r->J8Uw=Wnm8;X)+voDEV^Dz5x!U{$JTB#c`099$q#*!e zzc;7LpUXRzCKO00Uy5rkD?@;Os08s^cbh=4!2QX)4F9*y@tDYbOBk5B#&iKe3;q3J zYvfbx!g(#$k(>S};}MJj8A=mf%l|X$?ONYUNDjzAS3rsIupm{v0Th*#rdto052_Y8|DKZlOr5z8{0kRF=) ze0lQrb8+vXhrg#LW{x2YdQaPl^nu#(^Ef``)@}X!uYR2VULIhTDw3A&($B<|daA5N zl?D?+wxsZ|%sDe6$0$gIcvgpe!&%0j#=O8QHfnFYX$4)V_Z+UWQli=oF$Q*fq?sW} zRJNF|8*Xo#T1>eG^0NVHAnS6FKR=W<33FSo_5h`OQ*tMd?^DiKmOsupO+O-nBSf)lQs-H>3AbnO{#$EkGLAMxIg{=9kaSgw7p2!NwK6AskQJ~PsBKwh z{Sb9Ni-I1+^?Wkrdj}RWQ}|y9l&IRp`+|hS&UT&&e1MB$fGSFJ9wX{C`}^BV-S+GA z?T>|AL5It?H_sm@j;EJlf7-RVj?H8R7CZ(}?$_bn{<{Zo@Y9=mL}*ig|^x5HsJ zBM{8dS2W2@Lroood}TI5KY_1vy9KA$LbQ$$N>d=PeO{|mNy2>>=wSG9zA_TxrYUoa zE58V^U7=^3AX4rh1tVbl`N&vm!ou&C>nw~aK{b8@I$-RWbKJzrNF zEnX8+?K2rJ+8L}iyYtIi+dES!@f$GXIp8SiuaL%^;yyZR;C++T>wu@4Yf1XQArgoP zQ_G2z#AD?yrFC^LWOU&y|4s{StVUaV|)%%W3_%DuF4b zB%NsBoE1Y!h-{`sD*{57z$Sk{+^f~Y=puihK#7)UiOhxBz9itI-J{GZ2s|NT6Sb#s znwh~{gt6k5V=?6rbw-`3yS|3b%d^QkDJhOvBi8M5uH=<-yd}F#$22Dv@7toY##xQX za^9;v%?ownjcf^>ov+d>RCv2TO~F{ckPg#KO7WKGI8=qyzibe`ZR4Q z^hi-}?@hd#eg|UTY^z;(p}}u{>y9GfwLv-}k-F=;VMp=U_4eE4#5q|@#q;g5R}gt7 zk8hmE5}+(n$c)f59!lVjEoYiF+PJ#PW4r1zC1tYW%Y$fdU z=4gOlRjt?#p;q&|Bjc=+t8buaBka*w4iRz-4dEEf)B;XHEmG8wv{++ukp6fZOix6d zuV$e(`Dt)NTG`#(P9zf%3d$17mM$GQ@kr_x92-}FQPU@;Yhf$IG3b=ZVii`~XP9p2 zA8T1bzn(op>`RhR1%G`XZ;znyHFt%wl-77|_@|u#qLJg<>+$iBd6Oegb4RcX@ZO_0 zz(84?=>ux02R5`1Dx6yA?NRd%Vu}2UAbL8|Fdt_{54K3-sruV~ObSDO_EtD$~ozYi{x5a5eiXnF7;6093Km+9zG?WHq+KFrR>|`g4;fqQvMmO?2|L5E8&>yJQ0|dt zwFRT93ev&=yJJE~i`X(<+%zTVDtmBr)JtFpMq39|3A;W!xlIn*>&SUS7!EZ$IjJ~sOdt##ZqA~}`(yjw zdH=d~34DGBzJJ^vKjsR)ecX;z7X}Euh9fPwoV%z1i#~OWDSmb|*DW3q!f-^lXli$m z;yj9a{^QTqXK09{MJY($X-T-p^AovI zTKc|18XjOeNFof=4@sTZBc^qJ(C!lIla(#g)splm6Git|5@~1ds64tf6jE02sCuBVLPuCoKgjZZi zGTkb#!|7ybwG}N@Q8SF*_97pnsauT6PpI!(g8ujg&?sRd=CekNSU^FKck96lcQ=m` zTQYNETX!!r81HW3;^Bho(2y6!`gm_a4Isa7Vo=#bf^Q6GpiM6@DqwuDNX=!2o<=J6 z{x`qKqQ6@zJREM7Rvs}liPV%6_4 z@SuOfX2hvX6aJNfhd832)>Gl0;%aP3Ed=-q&^&m(>S;`Q!De!qDa|e)#<6jWO7@tTEmD`& zrF0`NGD*NY*uGY&pmk9>FK}zGP~(x}l8xnC+dw5(AxE@7i4noE=Y$=&0Zi?O@lGz6 zma`n!;X3iE?8f(Y^&yimzu`T1&7zDn5wILE| zm^+-T15$c$oZqGbG!N$K$CU1wQ}`*fU|xWkj7Dr{7HKR{4h;yEe}Dn)GkQlY;#59< zVSXu-Ps#fl+3WD=4MhtHn`=pT%vw{&iVhYAwh$l%ObU$ReY{CD_2T>89F8I-q%$`c z=9%P`S>NrVKwGs{!yjVbSw&0-=DhS%_xVn^Y|LQi6JWEACryaP z<3pahlr$>Aw_3k%3p7>O;_LD87n2l0M8gOFlQ8)D^~<;7vIbh{w64M7x(_ozpz`ZD zqn{qER`Q1p(q?D6Ma%Mqyx#~$RxZ5@!?k5yQmyCU1G}|F%+qchX~oQ>{82C2nn?RW&*p08PbMxZbu$=crSe88`WmU9Vv3~-j1M;&mz}nS($G1om$X2^L^%khNvw6 zvx4WG1vnU4U_!L;am5Bfs&CqH@%Wj0E9!Vi)HVM&JhfUt|AWY0(C8~7ImaSbk+MUO zU}iTwFB#Ryh?|eg$*X*9eHG|YggPR<80}jXUy)AWFGpPDQx+4~JTVskVs!O@~p!$8o`gz}eDCA#QlV3amVoy-~5g`F+=6+}@L=n8#abuAoGu z*1DOM0sc)S3;r4~$XXm`DBFd-_IJVYHQ-FAd1M}=TkyUrx7d)C**&g?yd$HUuKl`0 z1wKar4)%R8sAZKWcX8&{&dGy%h2{+J#E4}xyabx~g}j1$6@brW6NF1ekUK(`doF@$ z4s>*voo4HlAvH--JzQzzi@WkRuX1}z?MTdbXq$Sske~ToWqWJxbbFt3j*)cA@MHaK zrVOhG{3+t3hF6LZ)v*x_VsF#L!Fa|A;8on-xTi(@xllY( zf$<}81?72%`4e^3qZyG}G35>q4hF}~68LuPYfF;xj}{A!Ny7a#Md*myR?G42A7V-k zc@mT~!dr|uQ6CKeDol3#m-#5?CToo90vZDRO;XJIs8ErbgDE2xrQ~+sTe#t#HHDP( z&UbT0qiNbY4amBfx|Rsc07MKMPM2DeX>oSQLC=d9MqLWCB0GxfNy-E7;q$#1Y#^Z- zn(pK<&gr##OG|ESOHQ;~OOix~j)FVU1^KH(63V4PT`F$Q)bRSx)$fphU+f&g=7%m^ zs5TQ^x2JAS!ju2*$DX;(CfXV|-I2jiUeNq%mVmPivh-rFM3<gYFg=+Lim0*ZE$ilOv3G9nr3S85Gxcr^z*ENZv3bV(fPBXV!#^JtgcKR;AoOho z=++WV*}pfp>|D)o3dQ6B|9*G$(M;Wu=l_f=Y$l>#f;y7;Zd zvX(4{q?S}=^R7d*=k(mN`D1dq{C3a_V$VqKxy32JH96tWyD^%&WzEn=O9{f3YomUv z8(JNwqrW)h^`Fo%=KZVh1@ic9=TX&ftdX;Gf>R`Z1_AGS=QeG58!$+x27%;}Wy8o< zhoQVcjpsVuEVmjHQNfUuk_J@B{*)AFgDtQS&fizVh6=Ng$FHHtjIehetJET*Ty$XS zbhxFGpu$N8l{6qUa*KQOWN*f$laNZO9uz)^ZVJn^V`6YA*PEHGTcS=2MAU6 z!yQ>Tt)xH*X%6NGB)&Oy7RSmy!ift)LQKU5*{g%9TA^8ChPc*mv~VE2lWI!G*iI|z z&Thk{e^?`udJ&lic4)vmO<^9*fG+Xfv!>uY(%b@sv1AzKAx%#k__}2sONL+RO zkw2a8zec&W7TDkXo#go%{|cz+Ievxn!v_TUCv+z9h%G`{4eW>TZP7l9`x3J`Iq#$C zvXyB>dg@FC1HtB|gv0lc!dtb&Uhp+=Th5*mgW-%F$mTebOW z!eq~sZ;qNPN%`bgZ7i|JXMegUyce=?<3hWCY~^CmWX!c=RJK3_Grx_&i9D%x7vVZA z(Nyil9ChtUtCb{^4i?vkB1B5?*~c9*N9azkhOR?(4L38CT-(*frrk8V1j=|!@&zg_ z7P%7CL$qWQXO}6No5F?h3a0Tc%pt!#TcubZa?ISkLvx1O<%T~|o@&d5M=n^{U6W8v zG~=2KUF4?Rj#EIJmizVi5u!z$Ac~5L>n4HJX1<%xf>lqrYmYtEY{5G>+q#4rYAqTn2-%@9PzN)J#+y{* zu+fm7@_8DBd2p#O*cN5)3?=T8Wm#EAz05*`Bi2f`y zIE=NlW}i{Iw09f`H;~z%?S={MK$lfY{Ih7A)hu+6$m>Met-$K^9V|#_^B>ZnUYj#% zDWtj};MdJBtX+wHB4=(dl%R9DOTMto{GAM3;^()&9Fq{Vm^)mDkwS!8Pe7V-iv}(w zF~%{|Z%?pHY=-yRX!r0zAnRb_L)*^}&ng3z+2Qmjl#vm}# z>6*$`oKQ8J)tsHs<;A(;?S!%>Tfru<4lk$QR>9sUi@CwR8ev;CaZUoUeXf&zhsJ5T z$eX4=m58`Yd#t60!}O*dZ7B|e`X7jZ%J0~7m_Iz20k}kx-pb3Et#UZ|5>#c>$3KQW z+$@zMtyjFxJmHTcJr(BwDn&L)#d#N*a=j% zkcklRkql7yhAg`ThwH!#jf8HLVocxG4<=q?a|~#E%bsA1NH%f(Yv>n9ya*ErOyEzr z`5CLje(|<-whq6Rr;}@K%F*TCrL#{z66Eg9coy2a{~O0Fdu3`bL(4nJ;vum~4aXZ? zwYdgjBo*qAeJ-kaGky+>2dQ<-q=x-?NX`3ZJ>1nTmvjTy7vF-#4rcU2NQq?^)4&`F zGJz6Bs`X4`%1S_xNo=7AsYG!Vm`B_l*xkyXJ)17d+GjJm*0P1xQKy}l$1)gAUzeRJ zY#`#c6y*nnER&inOwff`GoGKrP;Zx2*q>BYm~`>G@y$gaLG{<~L0@?Q-3PjfESMDp(d8*~v zqo2}I$J~`P&|7ZTL~(R>R7NPYUkfz*X^Y9)Oy2{=PFo4UXllcMIZ05iWJIQEI=)*& zc7u{Ktp34J1P|i$S1*eLZp$LylDQD*BIGqee@vnx4Vrdi!z}jAS}9T;m4e1R1&B|a z99fGeg{!_d3#*fsMaKJ)mC)L#t6Ljssr`5!HvXSp=J#{_#;! zH)1rVfSlDE!1^t>3giVC{!01HsiTxNR*+v#F_e^G2Cuna3Vv7uF`~VMD>rPKD)8b` z58IfpOIv#wzay=h-0?e|IXPigBWdxa=f89qGrA!{6OQ7+&(mJK51$aXsMHxP7Bh_h z9Jz?Ovi-CFPW|~t(GCaVQviH}dYnzdQw{3*2SL39f4`xPLhOz8+!13nsR9SBty`*l zK{L~DjB6W;*Y&ei%V*=I*q|bzqmNE^2JZ5=7lcHtS1J$h3yH)8i4)z~0*o2g*7qNQ zIjG+1xO7k_{|x?WWwW^~@k2q_n0k1C86JC8CcRMqtGbs4dvtA%t?ukOyTApE$!&vz z#KBmACIb$s9jD_)noi)Gm{Kbl_xj(8Hu`w`L(@_MH?FFXGMK7i^FuzLGa0_~y4`R@ z7C%iGB;xIfiR|X%$_TNsPvF-s$Z<~2{xJx2HXTi8!lYD^zUewvCzssM$@P5+^ff{7n;lV}Txo6FXX7J4rKwpt ziFRxOVm?O7XK#4+(AzD(85Amrx3_0~@&uTL#}@%CHW4=uh6oPw;#ugjd7essERbpamVT^Pm_<)>L zPda(uk+uY9VHI(Jb0vQNI6OX3)BusPvWGY-B;Tq<(+=d`+oWsw%x{R%`&$?Qk|O4ybYr2?DBe~_shfV%h*O$sYh zGxU^pz0Et>x*~nXF0_qE$HQ}HEMZI5eOfI?7hu+KHTwJ=Hd*e5+zs-d)HKJ*CEQ=k zG2+x(Z{fy(9e7WSp{h3E6-{%r@(#U8+0Xp~JXMqhdU3U%40jY(z?#>65C=`@q1KiL8;#i0>t9yz4P)#*Fv1b^)Kc_055e|SepQ16lD#t`G(SvXC0~-5 zjST$gH*0IptfL#EatklHFxw!CBN_R_R~SG$jf(95Rsgu~jp%!-EPNT)*d<(vk4d=) z4D0;11%&mUYBro1c(Ah|y&13z?r@bAT6-mPwA}Sva6yK?2*l+Qz>pc&n(TbLysfEU zyY9M0kLRb*#Ai|jZp1M5c?}d5Ojb?CIz`tp$^0$%5CmPuLAp&gW(?*SiV7A0jNH9S zL)!D=tb^<_yIRm!&FN@{)cZTu=SpbSHgrn=?xC7(MCyIkUd+-%Ra8KTFcpctx4GIk zWZoBYvV>QaTbIdfn#erR`_mWOwLi4pX+$_ol@sMS(lssv^ELaJO7!}4l8!A0|ivM3*rKtW%DCSxVUk+M2x9?L9b+(f1XevqV0ttpCzv44-AwNG0a&kJr6 zPOiD%WburFm6W}05U-xy-FxE7CHmfTh>FBf{>_AD;blp&oagNrirv1M!GEGUDHkDt zcJLbhE`Mb?Fu4X!)<8z!5OhSGo*a59eJlojC6`k*^w6)JaSn1#8I^Zw92r%qBwiWI zfP!TQ)?(QKa->%(j&t||9GeX$E~MAvcLeZhrj^K;07Sh=d9EW4Rpo5aY^ZgPwG8$k z=k4$T%2pq)xrP0i6a*>2ck z-C#oxytRZTni(jm(5Fn=ziR*N!K8PYE$Uj3l9kCn5@E z4{mxLc%#e2CISvHU{Q+wn_aw5_AUX5PL$$Lw3b3@Ifp{xt1c-qJCfKDJsq-rE|2}V z4TZDV?0pfGXZ5D_$L#&wEGL4m6OK}jJK?kr_}?nhp|G{x%+oD*x$zL|^;nd0$i^>$ zVFc>S2H&}DQIChQZWHw!Hv=Jqmot!%yBi$chB1X$3xUPWT+4-;TK6*{5g-_#cS#vGn zmA2V48T`_DUg)Z12dSZMGShm%dZ@GlcU*6w5=hdnHiw|mP6Hln$R!D-xp4)1F0y%& zFOoFPh91tMPr3{+2ytq)bic{g^Ovf6WHEXF$xLvqxN#uFVqhNHMJLADE%{m?+5QK) z_2H@b6(?C6*wp;gSpw{3!2m%;@aZog>Brs>&!9 z1_*4Pd((u~x-I@DKVS7!XGf-O(tC{Bzt2N@ohFJr^DVlq{B4;Dyrwo#Oi{{Bm}jc` zTm^{RO>b{YY2_;uSkZ(UDe-GXg&hbK{e$igJ9{kV=Bcx)m)zx(L#A!W>-ggi!K|2w zOyNw_m?*{BH8@!Eqv=PdoWE!ba87`>e6?{>ob9S6hS{$zx9ePHCp2s6GfAW?%LF%_ z=Ls=r`zSdn<+8W`)N12pzI%GA1;^i#4^Ly^hE+J?Vk+BYh0og~A9i)CecWzL$5Ta> zk-z!r_klZ=9JN%=BU%&`>k$mi_|&seERy@nR=FcF%x7`^u>a1|9Ayb4@LB45JWYVF zGKu4<)2*5o1;v6d)pMq=vDGEzDso}JV8>zVm#oStq(^-A;p_bbDMXQzT(#YK{5yBf zYfVB_L7qjRVqkj=dlJ4OhFe7=#%kjd8rwo<5}LOygVCB16HPneikJD6rXBt{Ji*~ z;g(8(KNW?uGHB+8P`*=jQ$&w^WcUge3?E{4d(QWKa)0|C#;Z)EM|BpLI4~jZgT4|! z85z~N(d(?XEko7&PhHB~Rldc!w=Da+#dER`@e#97+4JR3bxb5=AXr+*IeO8NgfTSR ztR{pYtSDZ##XaPqfGHf{U@;JMFTo?*P51Y?9-DA7;wH8WH}}AO zfhk=$$6H2wj9G34=ryPFK-tYdW4L`VD32pP5+Q`_IC?m~Jt5Ttoyuc8C4WO>@6U2% z^J%p9{jib-U!$NbJFk9%{BWacEKbY0op&}or(ZB=*OTKjdFEP&RB#VZSOQ{(fPwdc6I(k>gLvq_8Sj<26yWE)|zKgG)Gf8bQtb9us#a9Qi=xBbh7ufDB~aH z5>HnRt)od{^*tqT)sK5wY~JYHK^(ADj!v4;6#kDR&$&T_7s5PRd3LIYx{|Y4DAB{e32rS)cBD-UWE0bO zXPe5YnBMP-0J9oZAVVHd)Gq8|quN(hdz6Kz45fm~NYK=B$_0Cg)_*DADR+4B2>u+S zT2oW;o14!5=b&^qx2&%eqg~SE3H4E^?-^lO(&Pn3Si!49S(Go%Q-CycohGv84@7c2 z;TBITq!L<=M|qWO2I4?xF=x2<^&D5(6fb;qeiK@c1|rSynspQIj_c9uKk|r!1*H7L z2{f66(q^GtmgFXBe_BO534I@bhp>fi#+ZvO^>L0;R|ywiEoo~YVxhwnC4+aMp5C`A z0vD+XNG4F^Nc@#v8T>@gcAIzfxuo8JL+o7yMpqs;oUzY^`pbOkXWA+_xI;4z40e;$ z?MV;TGmz9E4okhu|6HM7hqeg>^_-8e9ODsWN7hKf?Bb78dEeHNmfMO<$ONcR$?C9N z6Zde@4jmjp-!31BEt5Q^&Ce@UFmdrSlpY|HF97G>^C`E1#Ztoh>UZxv2jEevEJA+*WT37{{i2(rSjUC^EgeGYo1Vl`TZ~c@P>0bcBR6Ig?#$m@GYgHoU21G z(V5Ysw-JV<`gZ5k87_5J#qLe32O?A0W(GkE3_b7U@V-WT#d{1jGT+OKp~xmm)stS@ zBrrS1Fw8*tJ1dFv^Frl2=o3DBlawv`9BwR(mmI`Yp5_upC^2r0nPX8$+PtHTg!nq) z(~f6!K+3V0k|n!MhR5x5(I9_Pm3DYZXZlCiTmYU=iT3wX2{>}Yk~4-oOtriXcZO;`%$$pP_esHG|X71IhB&W zwpQZi2Srx9EwhpqT<@9E7CC1w&w0BDMtjw--=}N&+aNc4J3H#Bi{_lgojGMo6hD_G z4I#`I{kS>aM5!An8S8s>7ff_<|DpfGjySG7W&71UjRF4fY^4})3)(IsWv!h`@0Z?B zuyHGrTu0|(zYi=$88Gng0C)fZ01NQ+1*NNlalv`|ChPX?i#(-)*3`k6z`x808esTb z2yg&^lbMmJof)H@>Hp6GzPM!FFMQ~DUWS{|t`=5&UmkM|U9LP}<>^rDh z0}SauW9NUyuP^@pj7jkbu%HJGFcjkdBt=tf0w%r$iogK?!v8DzUqc_^|8qwKWoUvS z68+~6UGuwS@vF1?%bn_fxtoE0X@YV7H&~hG*I+=T|7Ze`pcWVm=u{I7`+sl%!UTi` zBmj_r3;@vmFT4aqq6NnDAFikMg{!0gKX{rJ7{>q1b0lQDCMLk@n8!e3~exy|4zBIzvLhYlBV# 100) { + if (e.data && e.data.size) { arrayOfBlobs.push(e.data); updateTimeStamp(); @@ -2258,10 +2261,10 @@ function MediaStreamRecorder(mediaStream, config) { updateTimeStamp(); mediaRecorder.start(config.timeSlice); } else { - // default is 60 minutes; enough? + // default is 24 hours; enough? (thanks https://github.com/slidevjs/slidev/pull/488) // use config => {timeSlice: 1000} otherwise - mediaRecorder.start(3.6e+6); + mediaRecorder.start(24 * 60 * 60 * 1000); } if (config.initCallback) { @@ -2756,7 +2759,7 @@ function StereoAudioRecorder(mediaStream, config) { view.setUint32(24, sampleRate, true); // byte rate (sample rate * block align) - view.setUint32(28, sampleRate * 2, true); + view.setUint32(28, sampleRate * numberOfAudioChannels * 2, true); // block align (channel count * bytes per sample) view.setUint16(32, numberOfAudioChannels * 2, true); @@ -2899,18 +2902,18 @@ function StereoAudioRecorder(mediaStream, config) { }); }; - if (typeof Storage === 'undefined') { - var Storage = { + if (typeof RecordRTC.Storage === 'undefined') { + RecordRTC.Storage = { AudioContextConstructor: null, AudioContext: window.AudioContext || window.webkitAudioContext }; } - if (!Storage.AudioContextConstructor) { - Storage.AudioContextConstructor = new Storage.AudioContext(); + if (!RecordRTC.Storage.AudioContextConstructor || RecordRTC.Storage.AudioContextConstructor.state === 'closed') { + RecordRTC.Storage.AudioContextConstructor = new RecordRTC.Storage.AudioContext(); } - var context = Storage.AudioContextConstructor; + var context = RecordRTC.Storage.AudioContextConstructor; // creates an audio node from the microphone incoming stream var audioInput = context.createMediaStreamSource(mediaStream); @@ -4567,9 +4570,7 @@ if (typeof RecordRTC !== 'undefined') { function GifRecorder(mediaStream, config) { if (typeof GIFEncoder === 'undefined') { - var script = document.createElement('script'); - script.src = 'https://www.webrtc-experiment.com/gif-recorder.js'; - (document.body || document.documentElement).appendChild(script); + throw new Error('Missing https://www.webrtc-experiment.com/gif-recorder.js'); } config = config || {}; @@ -4808,6 +4809,7 @@ function GifRecorder(mediaStream, config) { var video = document.createElement('video'); video.muted = true; video.autoplay = true; + video.playsInline = true; isLoadedMetaData = false; video.onloadedmetadata = function() { @@ -5828,7 +5830,7 @@ function RecordRTCPromisesHandler(mediaStream, options) { }; /** - * Destroy RecordRTC instance. Clear all recorders and objects. + * This method returns the internal recording object. * @method * @memberof RecordRTCPromisesHandler * @example @@ -5837,7 +5839,7 @@ function RecordRTCPromisesHandler(mediaStream, options) { * internalRecorder.addStreams([newAudioStream]); * internalRecorder.resetVideoStreams([screenStream]); * } - * @returns {Object} Returns internal recording object. + * @returns {Object} */ this.getInternalRecorder = function() { return new Promise(function(resolve, reject) { @@ -5923,7 +5925,7 @@ function RecordRTCPromisesHandler(mediaStream, options) { * @example * alert(recorder.version); */ - this.version = '5.5.9'; + this.version = '5.6.3'; } if (typeof RecordRTC !== 'undefined') { @@ -5948,7 +5950,7 @@ if (typeof RecordRTC !== 'undefined') { * }); * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API. - * @param {object} config - {webAssemblyPath:'webm-wasm.wasm',workerPath: 'webm-worker.js', frameRate: 30, width: 1920, height: 1080, bitrate: 1024} + * @param {object} config - {webAssemblyPath:'webm-wasm.wasm',workerPath: 'webm-worker.js', frameRate: 30, width: 1920, height: 1080, bitrate: 1024, realtime: true} */ function WebAssemblyRecorder(stream, config) { // based on: github.com/GoogleChromeLabs/webm-wasm @@ -5964,6 +5966,7 @@ function WebAssemblyRecorder(stream, config) { config.height = config.height || 480; config.frameRate = config.frameRate || 30; config.bitrate = config.bitrate || 1200; + config.realtime = config.realtime || true; function createBufferURL(buffer, type) { return URL.createObjectURL(new Blob([buffer], { @@ -5971,23 +5974,45 @@ function WebAssemblyRecorder(stream, config) { })); } + var finished; + function cameraStream() { return new ReadableStream({ start: function(controller) { var cvs = document.createElement('canvas'); var video = document.createElement('video'); + var first = true; video.srcObject = stream; + video.muted = true; + video.height = config.height; + video.width = config.width; + video.volume = 0; video.onplaying = function() { cvs.width = config.width; cvs.height = config.height; var ctx = cvs.getContext('2d'); var frameTimeout = 1000 / config.frameRate; - setTimeout(function f() { + var cameraTimer = setInterval(function f() { + if (finished) { + clearInterval(cameraTimer); + controller.close(); + } + + if (first) { + first = false; + if (config.onVideoProcessStarted) { + config.onVideoProcessStarted(); + } + } + ctx.drawImage(video, 0, 0); - controller.enqueue( - ctx.getImageData(0, 0, config.width, config.height) - ); - setTimeout(f, frameTimeout); + if (controller._controlledReadableStream.state !== 'closed') { + try { + controller.enqueue( + ctx.getImageData(0, 0, config.width, config.height) + ); + } catch (e) {} + } }, frameTimeout); }; video.play(); @@ -5999,7 +6024,10 @@ function WebAssemblyRecorder(stream, config) { function startRecording(stream, buffer) { if (!config.workerPath && !buffer) { + finished = false; + // is it safe to use @latest ? + fetch( 'https://unpkg.com/webm-wasm@latest/dist/webm-worker.js' ).then(function(r) { @@ -6031,12 +6059,13 @@ function WebAssemblyRecorder(stream, config) { height: config.height, bitrate: config.bitrate || 1200, timebaseDen: config.frameRate || 30, - realtime: true + realtime: config.realtime }); cameraStream().pipeTo(new WritableStream({ write: function(image) { - if (!worker) { + if (finished) { + console.error('Got image, but recorder is finished!'); return; } @@ -6093,14 +6122,28 @@ function WebAssemblyRecorder(stream, config) { isPaused = false; }; - function terminate() { + function terminate(callback) { if (!worker) { + if (callback) { + callback(); + } + return; } + // Wait for null event data to indicate that the encoding is complete + worker.addEventListener('message', function(event) { + if (event.data === null) { + worker.terminate(); + worker = null; + + if (callback) { + callback(); + } + } + }); + worker.postMessage(null); - worker.terminate(); - worker = null; } var arrayOfBuffers = []; @@ -6116,13 +6159,17 @@ function WebAssemblyRecorder(stream, config) { * }); */ this.stop = function(callback) { - terminate(); + finished = true; - this.blob = new Blob(arrayOfBuffers, { - type: 'video/webm' - }); + var recorder = this; - callback(this.blob); + terminate(function() { + recorder.blob = new Blob(arrayOfBuffers, { + type: 'video/webm' + }); + + callback(recorder.blob); + }); }; // for debugging @@ -6159,4 +6206,4 @@ function WebAssemblyRecorder(stream, config) { if (typeof RecordRTC !== 'undefined') { RecordRTC.WebAssemblyRecorder = WebAssemblyRecorder; -} +} \ No newline at end of file From ff58735e7d18386fb344ff817a7414ecc1b1e041 Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 20 Apr 2026 12:41:11 -0400 Subject: [PATCH 05/13] Update config.xml removed "video" from the start recording error since Microphone ADC doesnt support it --- config.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.xml b/config.xml index afc162e..522f8ea 100644 --- a/config.xml +++ b/config.xml @@ -140,7 +140,7 @@ - + From a4a959fc4c48bbda64e7b91dfed723385db15b88 Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 20 Apr 2026 12:52:20 -0400 Subject: [PATCH 06/13] Update adc_microphone.js troubleshooting for mobile --- resources/static/adc_microphone.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/resources/static/adc_microphone.js b/resources/static/adc_microphone.js index 2bd1028..7916152 100644 --- a/resources/static/adc_microphone.js +++ b/resources/static/adc_microphone.js @@ -504,19 +504,25 @@ function startRecordingAudio(instanceId) { }).then(function() { console.info("Recording audio ..."); stopBtn.disabled = false; - }).catch(function(error) { - console.error("Cannot start audio recording: ", error); + }).catch(function(error) { + var debugMsg = "START FAILED\n"; - if (audioRecorder && audioRecorder.stream) { - stopStreamTracks(audioRecorder.stream); - } + debugMsg += "Error: " + (error && error.message ? error.message : error) + "\n"; - audioRecorder = undefined; - startBtn.disabled = false; - stopBtn.disabled = true; + debugMsg += "MediaRecorder: " + (typeof MediaRecorder !== "undefined") + "\n"; - displayErrorMessage(uploadConfig(instanceId).ErrMsgStartRec || uploadConfig(instanceId).ErrMsgUserMediaAccess, instanceId); - }); + if (typeof MediaRecorder !== "undefined") { + debugMsg += "webm: " + MediaRecorder.isTypeSupported("audio/webm;codecs=opus") + "\n"; + debugMsg += "webm(no codec): " + MediaRecorder.isTypeSupported("audio/webm") + "\n"; + debugMsg += "mp4: " + MediaRecorder.isTypeSupported("audio/mp4") + "\n"; + debugMsg += "ogg: " + MediaRecorder.isTypeSupported("audio/ogg") + "\n"; + } + + // SHOW IT DIRECTLY IN THE UI + displayErrorMessage(debugMsg, instanceId); + + console.error("Cannot start audio recording:", error); + }); removeClass(player, "saved"); From 48d75d03cc8daefd472ceaf7eab8eefdea9bf54e Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 20 Apr 2026 12:53:48 -0400 Subject: [PATCH 07/13] Update Microphone.adc --- bin/Microphone.adc | Bin 89023 -> 89154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/Microphone.adc b/bin/Microphone.adc index 34046ca0eedfaf49360c8a3c0cb0b6919bc22b3a..14599171c91fe4a11d0bcc23a2095fb4d53b8643 100644 GIT binary patch delta 6997 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 delta 6911 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 Date: Mon, 20 Apr 2026 13:04:23 -0400 Subject: [PATCH 08/13] RecordRTC fix --- config.xml | 2 +- resources/dynamic/open.html | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config.xml b/config.xml index 522f8ea..59b0cc6 100644 --- a/config.xml +++ b/config.xml @@ -7,7 +7,7 @@ Microphone d7c94a7c-10f9-4d31-8e51-82dc9c96c089 - 2.0.1 + 2.0.2 2026-04-20 {%EndIf%} + + +

    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 Microphone d7c94a7c-10f9-4d31-8e51-82dc9c96c089 - 1.0.4 - 2022-10-04 + 2.0.0 + 2026-04-20 - + \ No newline at end of file From 79f45240617db0fd779bf8ba13e7b98d3daef396 Mon Sep 17 00:00:00 2001 From: AbomDocPhibes Date: Mon, 20 Apr 2026 12:29:41 -0400 Subject: [PATCH 03/13] stop-btn fix stop-btn wasn't working on mobile. changed hidden label to button control. also instanced variables to their respective ADC Instance ID --- config.xml | 2 +- resources/dynamic/open.html | 74 ++++++++++++---- resources/static/adc_microphone.js | 136 +++++++++++++++++------------ 3 files changed, 135 insertions(+), 77 deletions(-) diff --git a/config.xml b/config.xml index f421bcf..afc162e 100644 --- a/config.xml +++ b/config.xml @@ -7,7 +7,7 @@ Microphone d7c94a7c-10f9-4d31-8e51-82dc9c96c089 - 2.0.0 + 2.0.1 2026-04-20 var uploadConfig_{%=CurrentADC.InstanceID%} = { authenticationUrl : '{%=CurrentADC.PropValue("AusUrl")%}' + "/Authenticate", @@ -45,8 +46,10 @@ EnabledNextAfterUpload : '{%=CurrentADC.PropValue("nextAfterUpload")%}', AutoSubmitAfterUpload : '{%=CurrentADC.PropValue("autoSubmitUpload")%}' }; + var audioRecorder; + {%if enabledNextAfterUpload then%} {%EndIf%} - -