All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.js.kurento-utils.min.js Maven / Gradle / Ivy

The newest version!
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.kurentoUtils = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i=9?t.onsignalingstatechange=e:t.addEventListener("signalingstatechange",e)}(r,e),function(r,i){switch(i=i||t,e.signalingState){case"closed":i(new Error("PeerConnection object is closed"));break;case"stable":if(e.remoteDescription){e.addIceCandidate(r,i,i);break}default:n.push({candidate:r,callback:i})}}}function removeFIDFromOffer(e){var t=e.indexOf("a=ssrc-group:FID");return t>0?e.slice(0,t):e}function getSimulcastInfo(e){var t=e.getVideoTracks();if(!t.length)return logger.warn("No video tracks available in the video stream"),"";var n=["a=x-google-flag:conference","a=ssrc-group:SIM 1 2 3","a=ssrc:1 cname:localVideo","a=ssrc:1 msid:"+e.id+" "+t[0].id,"a=ssrc:1 mslabel:"+e.id,"a=ssrc:1 label:"+t[0].id,"a=ssrc:2 cname:localVideo","a=ssrc:2 msid:"+e.id+" "+t[0].id,"a=ssrc:2 mslabel:"+e.id,"a=ssrc:2 label:"+t[0].id,"a=ssrc:3 cname:localVideo","a=ssrc:3 msid:"+e.id+" "+t[0].id,"a=ssrc:3 mslabel:"+e.id,"a=ssrc:3 label:"+t[0].id];return n.push(""),n.join("\n")}function sleep(e){for(var t=(new Date).getTime(),n=0;n<1e7&&!((new Date).getTime()-t>e);n++);}function setIceCandidateAccordingWebBrowser(e,t){"undefined"!=typeof AdapterJS&&"IE"===AdapterJS.webrtcDetectedBrowser&&AdapterJS.webrtcDetectedVersion>=9?t.onicecandidate=e:t.addEventListener("icecandidate",e)}function WebRtcPeer(e,t,n){function r(){if(l){l.pause();var e=p.getRemoteStreams()[0];l.srcObject=e,logger.debug("Remote stream:",e),"undefined"!=typeof AdapterJS&&"IE"===AdapterJS.webrtcDetectedBrowser&&AdapterJS.webrtcDetectedVersion>=9?l=attachMediaStream(l,e):l.load()}}function i(e){return D&&("Chrome"===browser.name||"Chromium"===browser.name?(logger.debug("Adding multicast info"),e=new RTCSessionDescription({type:e.type,sdp:removeFIDFromOffer(e.sdp)+getSimulcastInfo(u)})):logger.warn("Simulcast is only available in Chrome browser.")),e}function o(){"closed"===p.signalingState&&n('The peer connection object is in "closed" state. This is most likely due to an invocation of the dispose method before accepting in the dialogue'),u&&d&&s.showLocalVideo(),u&&u.getTracks().forEach(function(e){p.addTrack(e,u)}),f&&f.getTracks().forEach(function(e){p.addTrack(e,f)}),n()}function a(e){void 0===e&&(e=MEDIA_CONSTRAINTS),"undefined"!=typeof AdapterJS&&"IE"===AdapterJS.webrtcDetectedBrowser&&AdapterJS.webrtcDetectedVersion>=9?navigator.getUserMedia(e,function(e){u=e,o()},n):navigator.mediaDevices.getUserMedia(e).then(function(e){u=e,o()}).catch(n)}if(!(this instanceof WebRtcPeer))return new WebRtcPeer(e,t,n);WebRtcPeer.super_.call(this),t instanceof Function&&(n=t,t=void 0),t=t||{},n=(n||noop).bind(this);var c,s=this,d=t.localVideo,l=t.remoteVideo,u=t.videoStream,f=t.audioStream,g=t.mediaConstraints,p=t.peerConnection,b=t.sendSource||"webcam",h=t.dataChannelConfig,m=t.dataChannels||!1,v=uuidv4(),S=recursive({iceServers:freeice()},t.configuration),w=t.onicecandidate;w&&this.on("icecandidate",w);var P=t.oncandidategatheringdone;P&&this.on("candidategatheringdone",P);var D=t.simulcast,R=t.multistream,y=new sdpTranslator.Interop,C=[],E=!1;if(Object.defineProperties(this,{peerConnection:{get:function(){return p}},id:{value:t.id||v,writable:!1},remoteVideo:{get:function(){return l}},localVideo:{get:function(){return d}},dataChannel:{get:function(){return c}},currentFrame:{get:function(){if(l){if(l.readyState=9?EventEmitter.prototype.emit("candidategatheringdone",n):s.emit("candidategatheringdone"),E=!0);else E||(C.push(t),t||(E=!0))},p),p.onaddstream=t.onaddstream,p.onnegotiationneeded=t.onnegotiationneeded,this.on("newListener",function(e,t){if("icecandidate"===e||"candidategatheringdone"===e)for(;C.length;){var n=C.shift();!n==("candidategatheringdone"===e)&&t(n)}});var T=bufferizeCandidates(p);this.addIceCandidate=function(e,t){var n;n=R&&usePlanB?y.candidateToPlanB(e):new RTCIceCandidate(e),logger.debug("Remote ICE candidate received",e),t=(t||noop).bind(this),T(n,t)},this.generateOffer=function(t){if(t=t.bind(this),"recvonly"===e){var n=!g||"boolean"!=typeof g.audio||g.audio,r=!g||"boolean"!=typeof g.video||g.video;n&&p.addTransceiver("audio",{direction:"recvonly"}),r&&p.addTransceiver("video",{direction:"recvonly"})}else"sendonly"===e&&p.getTransceivers().forEach(function(e){e.direction="sendonly"});if("undefined"!=typeof AdapterJS&&"IE"===AdapterJS.webrtcDetectedBrowser&&AdapterJS.webrtcDetectedVersion>=9){var o=function(){sleep(1e3);var e=p.localDescription;logger.debug("Local description set\n",e.sdp),R&&usePlanB&&(e=y.toUnifiedPlan(e),logger.debug("offer::origPlanB->UnifiedPlan",dumpSDP(e))),t(null,e.sdp,s.processAnswer.bind(s))},a=function(e){logger.debug("Created SDP offer"),logger.debug("Local description set\n",p.localDescription),p.setLocalDescription(e,o,t)};p.createOffer(a,t)}else p.createOffer().then(function(e){return logger.debug("Created SDP offer"),e=i(e),p.setLocalDescription(e)}).then(function(){var e=p.localDescription;logger.debug("Local description set\n",e.sdp),R&&usePlanB&&(e=y.toUnifiedPlan(e),logger.debug("offer::origPlanB->UnifiedPlan",dumpSDP(e))),t(null,e.sdp,s.processAnswer.bind(s))}).catch(t)},this.getLocalSessionDescriptor=function(){return p.localDescription},this.getRemoteSessionDescriptor=function(){return p.remoteDescription},this.showLocalVideo=function(){d.srcObject=u,d.muted=!0,"undefined"!=typeof AdapterJS&&"IE"===AdapterJS.webrtcDetectedBrowser&&AdapterJS.webrtcDetectedVersion>=9&&(d=attachMediaStream(d,u))},this.send=function(e){c&&"open"===c.readyState?c.send(e):logger.warn("Trying to send data over a non-existing or closed data channel")},this.processAnswer=function(e,t){t=(t||noop).bind(this);var n=new RTCSessionDescription({type:"answer",sdp:e});if(R&&usePlanB){var i=y.toPlanB(n);logger.debug("asnwer::planB",dumpSDP(i)),n=i}if(logger.debug("SDP answer received, setting remote description"),"closed"===p.signalingState)return t("PeerConnection is closed");p.setRemoteDescription(n).then(function(){r(),t()},t)},this.processOffer=function(e,t){t=t.bind(this);var n=new RTCSessionDescription({type:"offer",sdp:e});if(R&&usePlanB){var o=y.toPlanB(n);logger.debug("offer::planB",dumpSDP(o)),n=o}if(logger.debug("SDP offer received, setting remote description"),"closed"===p.signalingState)return t("PeerConnection is closed");p.setRemoteDescription(n).then(function(){return r()}).then(function(){return p.createAnswer()}).then(function(e){return e=i(e),logger.debug("Created SDP answer"),p.setLocalDescription(e)}).then(function(){var e=p.localDescription;R&&usePlanB&&(e=y.toUnifiedPlan(e),logger.debug("answer::origPlanB->UnifiedPlan",dumpSDP(e))),logger.debug("Local description set\n",e.sdp),t(null,e.sdp)}).catch(t)},"recvonly"===e||u||f?setTimeout(o,0):"webcam"===b?a(g):getScreenConstraints(b,function(e,t){if(e)return n(e);constraints=[g],constraints.unshift(t),a(recursive.apply(void 0,constraints))},v),this.on("_dispose",function(){d&&(d.pause(),d.srcObject=null,"undefined"==typeof AdapterJS&&d.load(),d.muted=!1),l&&(l.pause(),l.srcObject=null,"undefined"==typeof AdapterJS&&l.load()),s.removeAllListeners(),"undefined"!=typeof window&&void 0!==window.cancelChooseDesktopMedia&&window.cancelChooseDesktopMedia(v)})}function createEnableDescriptor(e){var t="get"+e+"Tracks";return{enumerable:!0,get:function(){if(this.peerConnection){var e=this.peerConnection.getLocalStreams();if(e.length){for(var n,r=0;n=e[r];r++)for(var i,o=n[t](),a=0;i=o[a];a++)if(!i.enabled)return!1;return!0}}},set:function(e){function n(t){t.enabled=e}this.peerConnection.getLocalStreams().forEach(function(e){e[t]().forEach(n)})}}}function WebRtcPeerRecvonly(e,t){if(!(this instanceof WebRtcPeerRecvonly))return new WebRtcPeerRecvonly(e,t);WebRtcPeerRecvonly.super_.call(this,"recvonly",e,t)}function WebRtcPeerSendonly(e,t){if(!(this instanceof WebRtcPeerSendonly))return new WebRtcPeerSendonly(e,t);WebRtcPeerSendonly.super_.call(this,"sendonly",e,t)}function WebRtcPeerSendrecv(e,t){if(!(this instanceof WebRtcPeerSendrecv))return new WebRtcPeerSendrecv(e,t);WebRtcPeerSendrecv.super_.call(this,"sendrecv",e,t)}function harkUtils(e,t){return hark(e,t)}var freeice=require("freeice"),inherits=require("inherits"),UAParser=require("ua-parser-js"),uuidv4=require("uuid/v4"),hark=require("hark"),EventEmitter=require("events").EventEmitter,recursive=require("merge").recursive.bind(void 0,!0),sdpTranslator=require("sdp-translator"),logger="undefined"==typeof window?console:window.Logger||console;try{require("kurento-browser-extensions")}catch(e){"undefined"==typeof getScreenConstraints&&(logger.warn("screen sharing is not available"),getScreenConstraints=function(e,t){t(new Error("This library is not enabled for screen sharing"))})}var MEDIA_CONSTRAINTS={audio:!0,video:{width:640,framerate:15}},ua="undefined"!=typeof window&&window.navigator?window.navigator.userAgent:"",parser=new UAParser(ua),browser=parser.getBrowser();importScriptsDependsOnBrowser();var usePlanB=!1;"Chrome"!==browser.name&&"Chromium"!==browser.name||(logger.debug(browser.name+": using SDP PlanB"),usePlanB=!0);var dumpSDP=function(e){return void 0===e||null===e?"":"type: "+e.type+"\r\n"+e.sdp};inherits(WebRtcPeer,EventEmitter),Object.defineProperties(WebRtcPeer.prototype,{enabled:{enumerable:!0,get:function(){return this.audioEnabled&&this.videoEnabled},set:function(e){this.audioEnabled=this.videoEnabled=e}},audioEnabled:createEnableDescriptor("Audio"),videoEnabled:createEnableDescriptor("Video")}),WebRtcPeer.prototype.getLocalStream=function(e){if(this.peerConnection)return this.peerConnection.getLocalStreams()[e||0]},WebRtcPeer.prototype.getRemoteStream=function(e){if(this.peerConnection)return this.peerConnection.getRemoteStreams()[e||0]},WebRtcPeer.prototype.dispose=function(){logger.debug("Disposing WebRtcPeer");var e=this.peerConnection,t=this.dataChannel;try{if(t){if("closed"===t.readyState)return;t.close()}if(e){if("closed"===e.signalingState)return;e.getLocalStreams().forEach(streamStop),e.close()}}catch(e){logger.warn("Exception disposing webrtc peer "+e)}"undefined"==typeof AdapterJS&&this.emit("_dispose")},inherits(WebRtcPeerRecvonly,WebRtcPeer),inherits(WebRtcPeerSendonly,WebRtcPeer),inherits(WebRtcPeerSendrecv,WebRtcPeer),exports.bufferizeCandidates=bufferizeCandidates,exports.WebRtcPeerRecvonly=WebRtcPeerRecvonly,exports.WebRtcPeerSendonly=WebRtcPeerSendonly,exports.WebRtcPeerSendrecv=WebRtcPeerSendrecv,exports.hark=harkUtils;
},{"events":4,"freeice":5,"hark":8,"inherits":9,"kurento-browser-extensions":10,"merge":11,"sdp-translator":18,"ua-parser-js":21,"uuid/v4":24}],2:[function(require,module,exports){
window.addEventListener&&(module.exports=require("./index"));
},{"./index":3}],3:[function(require,module,exports){
var WebRtcPeer=require("./WebRtcPeer");exports.WebRtcPeer=WebRtcPeer;
},{"./WebRtcPeer":1}],4:[function(require,module,exports){
function EventEmitter(){this._events&&Object.prototype.hasOwnProperty.call(this,"_events")||(this._events=objectCreate(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}function $getMaxListeners(e){return void 0===e._maxListeners?EventEmitter.defaultMaxListeners:e._maxListeners}function emitNone(e,t,n){if(t)e.call(n);else for(var r=e.length,i=arrayClone(e,r),s=0;s0&&o.length>i){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+' "'+String(t)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');a.name="MaxListenersExceededWarning",a.emitter=e,a.type=t,a.count=o.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",a.name,a.message)}}else o=s[t]=n,++e._eventsCount;return e}function onceWrapper(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t1&&(t=arguments[1]),t instanceof Error)throw t;var l=new Error('Unhandled "error" event. ('+t+")");throw l.context=t,l}if(!(n=o[e]))return!1;var u="function"==typeof n;switch(r=arguments.length){case 1:emitNone(n,u,this);break;case 2:emitOne(n,u,this,arguments[1]);break;case 3:emitTwo(n,u,this,arguments[1],arguments[2]);break;case 4:emitThree(n,u,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(r-1),s=1;s=0;s--)if(n[s]===t||n[s].listener===t){o=n[s].listener,i=s;break}if(i<0)return this;0===i?n.shift():spliceOne(n,i),1===n.length&&(r[e]=n[0]),r.removeListener&&this.emit("removeListener",e,o||t)}return this},EventEmitter.prototype.removeAllListeners=function(e){var t,n,r;if(!(n=this._events))return this;if(!n.removeListener)return 0===arguments.length?(this._events=objectCreate(null),this._eventsCount=0):n[e]&&(0==--this._eventsCount?this._events=objectCreate(null):delete n[e]),this;if(0===arguments.length){var i,s=objectKeys(n);for(r=0;r=0;r--)this.removeListener(e,t[r]);return this},EventEmitter.prototype.listeners=function(e){return _listeners(this,e,!0)},EventEmitter.prototype.rawListeners=function(e){return _listeners(this,e,!1)},EventEmitter.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):listenerCount.call(e,t)},EventEmitter.prototype.listenerCount=listenerCount,EventEmitter.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};
},{}],5:[function(require,module,exports){
"use strict";var normalice=require("normalice"),freeice=function(n){function t(n,t){for(var r,u=[],o=[].concat(e[n]);o.length&&u.lengthn&&t[i]<0&&(n=t[i]);return n}var WildEmitter=require("wildemitter"),audioContextType;"undefined"!=typeof window&&(audioContextType=window.AudioContext||window.webkitAudioContext);var audioContext=null;module.exports=function(e,t){var n=new WildEmitter;if(!audioContextType)return n;var t=t||{},i=t.smoothing||.1,o=t.interval||50,a=t.threshold,r=t.play,s=t.history||10,u=!0;audioContext=t.audioContext||audioContext||new audioContextType;var d,p,c;c=audioContext.createAnalyser(),c.fftSize=512,c.smoothingTimeConstant=i,p=new Float32Array(c.frequencyBinCount),e.jquery&&(e=e[0]),e instanceof HTMLAudioElement||e instanceof HTMLVideoElement?(d=audioContext.createMediaElementSource(e),void 0===r&&(r=!0),a=a||-50):(d=audioContext.createMediaStreamSource(e),a=a||-50),d.connect(c),r&&c.connect(audioContext.destination),n.speaking=!1,n.suspend=function(){return audioContext.suspend()},n.resume=function(){return audioContext.resume()},Object.defineProperty(n,"state",{get:function(){return audioContext.state}}),audioContext.onstatechange=function(){n.emit("state_change",audioContext.state)},n.setThreshold=function(e){a=e},n.setInterval=function(e){o=e},n.stop=function(){u=!1,n.emit("volume_change",-100,a),n.speaking&&(n.speaking=!1,n.emit("stopped_speaking")),c.disconnect(),d.disconnect()},n.speakingHistory=[];for(var g=0;ga&&!n.speaking){for(var i=n.speakingHistory.length-3;i=2&&(n.speaking=!0,n.emit("speaking"))}else if(ea)),f()}},o)};return f(),n};
},{"wildemitter":25}],9:[function(require,module,exports){
"function"==typeof Object.create?module.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:module.exports=function(t,e){if(e){t.super_=e;var o=function(){};o.prototype=e.prototype,t.prototype=new o,t.prototype.constructor=t}};
},{}],10:[function(require,module,exports){

},{}],11:[function(require,module,exports){
!function(e){function o(e,r){if("object"!==t(e))return r;for(var n in r)"object"===t(e[n])&&"object"===t(r[n])?e[n]=o(e[n],r[n]):e[n]=r[n];return e}function r(e,r,c){var u=c[0],f=c.length;(e||"object"!==t(u))&&(u={});for(var i=0;i1&&(n=t[1],t=t[0].split(":"),l.username=t[0],l.credential=(e||{}).credential||t[1]||""),l.url=r+n,l.urls=[l.url],l):e):e};
},{}],13:[function(require,module,exports){
var grammar=module.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w\/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%d trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:([\w_\/]*) (\S*)(?: (\S*))?/,names:["value","uri","config"],format:function(e){return null!=e.config?"extmap:%s %s %s":"extmap:%s %s"}},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation"],format:function(e){var r="candidate:%s %d %s %d %s %d typ %s";return r+=null!=e.raddr?" raddr %s rport %d":"%v%v",r+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(r+=" generation %d"),r}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_]*):(.*)/,names:["id","attribute","value"],format:"ssrc:%d %s:%s"},{push:"ssrcGroups",reg:/^ssrc-group:(\w*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{push:"invalid",names:["value"]}]};Object.keys(grammar).forEach(function(e){grammar[e].forEach(function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")})});
},{}],14:[function(require,module,exports){
var parser=require("./parser"),writer=require("./writer");exports.write=writer,exports.parse=parser.parse,exports.parseFmtpConfig=parser.parseFmtpConfig,exports.parsePayloads=parser.parsePayloads,exports.parseRemoteCandidates=parser.parseRemoteCandidates;
},{"./parser":15,"./writer":16}],15:[function(require,module,exports){
var toIntIfInt=function(t){return String(Number(t))===t?Number(t):t},attachProperties=function(t,r,e,n){if(n&&!e)r[n]=toIntIfInt(t[1]);else for(var a=0;a=a)return n;var u=e[r];switch(r+=1,n){case"%%":return"%";case"%s":return String(u);case"%d":return Number(u);case"%v":return""}})},makeLine=function(n,r,e){var a=r.format instanceof Function?r.format(r.push?e:e[r.name]):r.format,u=[n+"="+a];if(r.names)for(var m=0;m3||!i.media.every(function(e){return-1!==["video","audio","data"].indexOf(e.mid)}))return console.warn("This description does not look like Plan B."),e;var t=[];i.media.forEach(function(e){t.push(e.mid)});var o=!1;if(void 0!==i.groups&&Array.isArray(i.groups)&&(o=i.groups.every(function(e){return"BUNDLE"!==e.type||arrayEquals.apply(e.mids.sort(),[t.sort()])})),!o){var n=!1;if(i.media.forEach(function(e){"inactive"!==e.direction&&(n=!0)}),n)throw new Error("Cannot convert to Unified Plan because m-lines that are not bundled were found.")}var s;if("answer"===e.type)s="offer";else{if("offer"!==e.type)throw new Error("Type '"+e.type+"' not supported.");s="answer"}var a;void 0!==this.cache[s]&&(a=transform.parse(this.cache[s]));var d,c,p,u,f={audio:{},video:{}},m={},y=0,l=0,v={},h={},w={},g={};if(i.media.forEach(function(i){if(("string"!=typeof i.rtcpMux||"rtcp-mux"!==i.rtcpMux)&&"inactive"!==i.direction)throw new Error("Cannot convert to Unified Plan because m-lines without the rtcp-mux attribute were found.");if("application"===i.type)return void(m[i.mid]=i);var t=i.sources,o=i.ssrcGroups,n=i.port;if(void 0!==i.candidates&&(d=void 0!==d?d.concat(i.candidates):i.candidates),void 0!==c&&void 0!==i.iceUfrag&&c!=i.iceUfrag)throw new Error("Only BUNDLE supported, iceUfrag must be the same for all m-lines.\n\tLast iceUfrag: "+c+"\n\tNew iceUfrag: "+i.iceUfrag);if(void 0!==i.iceUfrag&&(c=i.iceUfrag),void 0!==p&&void 0!==i.icePwd&&p!=i.icePwd)throw new Error("Only BUNDLE supported, icePwd must be the same for all m-lines.\n\tLast icePwd: "+p+"\n\tNew icePwd: "+i.icePwd);if(void 0!==i.icePwd&&(p=i.icePwd),void 0!==u&&void 0!==i.fingerprint&&(u.type!=i.fingerprint.type||u.hash!=i.fingerprint.hash))throw new Error("Only BUNDLE supported, fingerprint must be the same for all m-lines.\n\tLast fingerprint: "+JSON.stringify(u)+"\n\tNew fingerprint: "+JSON.stringify(i.fingerprint));void 0!==i.fingerprint&&(u=i.fingerprint),h[i.type]=i.payloads,w[i.type]=i.rtcpFb,g[i.type]=i.rtp;var s={};void 0!==o&&Array.isArray(o)&&o.forEach(function(e){void 0!==e.ssrcs&&Array.isArray(e.ssrcs)&&e.ssrcs.forEach(function(r){void 0===s[r]&&(s[r]=[]),s[r].push(e)})});var E={};if("object"==typeof t)delete i.sources,delete i.ssrcGroups,delete i.candidates,delete i.iceUfrag,delete i.icePwd,delete i.fingerprint,delete i.port,delete i.mid,Object.keys(t).forEach(function(o){var h;if("offer"===e.type&&!t[o].msid)return void(f[i.type][o]=t[o]);void 0!==s[o]&&Array.isArray(s[o])&&s[o].some(function(e){return e.ssrcs.some(function(e){if("object"==typeof E[e])return h=E[e],!0})}),"object"==typeof h?(h.sources[o]=t[o],delete t[o].msid):(h=Object.create(i),E[o]=h,void 0!==t[o].msid&&(h.msid=t[o].msid,delete t[o].msid),h.sources={},h.sources[o]=t[o],h.ssrcGroups=s[o],void 0!==a&&void 0!==a.media&&Array.isArray(a.media)&&a.media.forEach(function(e){"object"==typeof e.sources&&Object.keys(e.sources).forEach(function(r){r===o&&(h.mid=e.mid)})}),void 0===h.mid&&(h.mid=[i.type,"-",o].join("")),h.candidates=d,h.iceUfrag=c,h.icePwd=p,h.fingerprint=u,h.port=n,m[h.mid]=h,v[l]=h.sources,r.cache.mlU2BMap[l]=y,void 0===r.cache.mlB2UMap[y]&&(r.cache.mlB2UMap[y]=l),l++)});else{var U=i;U.candidates=d,U.iceUfrag=c,U.icePwd=p,U.fingerprint=u,U.port=n,m[U.mid]=U,r.cache.mlU2BMap[l]=y,void 0===r.cache.mlB2UMap[y]&&(r.cache.mlB2UMap[y]=l)}y++}),i.media=[],t=[],"answer"===e.type)for(var E=0;E0&&null===(t=r.getFirstSendingIndexFromAnswer(e)))for(var o=0;ot){var n=i.media[t];Object.keys(f[e]).forEach(function(r){n.sources&&n.sources[r]&&console.warn("Replacing an existing SSRC."),n.sources||(n.sources={}),n.sources[r]=f[e][r]})}}}),void 0!==i.groups&&i.groups.some(function(e){if("BUNDLE"===e.type)return e.mids=t.join(" "),!0}),i.msidSemantic={semantic:"WMS",token:"*"};var b=transform.write(i);return this.cache[e.type]=b,new RTCSessionDescription({type:e.type,sdp:b})};
},{"./array-equals":17,"./transform":20}],20:[function(require,module,exports){
var transform=require("sdp-transform");exports.write=function(s,r){return void 0!==s&&void 0!==s.media&&Array.isArray(s.media)&&s.media.forEach(function(s){void 0!==s.sources&&0!==Object.keys(s.sources).length&&(s.ssrcs=[],Object.keys(s.sources).forEach(function(r){var o=s.sources[r];Object.keys(o).forEach(function(i){s.ssrcs.push({id:r,attribute:i,value:o[i]})})}),delete s.sources),void 0!==s.ssrcGroups&&Array.isArray(s.ssrcGroups)&&s.ssrcGroups.forEach(function(s){void 0!==s.ssrcs&&Array.isArray(s.ssrcs)&&(s.ssrcs=s.ssrcs.join(" "))})}),void 0!==s&&void 0!==s.groups&&Array.isArray(s.groups)&&s.groups.forEach(function(s){void 0!==s.mids&&Array.isArray(s.mids)&&(s.mids=s.mids.join(" "))}),transform.write(s,r)},exports.parse=function(s){var r=transform.parse(s);return void 0!==r&&void 0!==r.media&&Array.isArray(r.media)&&r.media.forEach(function(s){void 0!==s.ssrcs&&Array.isArray(s.ssrcs)&&(s.sources={},s.ssrcs.forEach(function(r){s.sources[r.id]||(s.sources[r.id]={}),s.sources[r.id][r.attribute]=r.value}),delete s.ssrcs),void 0!==s.ssrcGroups&&Array.isArray(s.ssrcGroups)&&s.ssrcGroups.forEach(function(s){"string"==typeof s.ssrcs&&(s.ssrcs=s.ssrcs.split(" "))})}),void 0!==r&&void 0!==r.groups&&Array.isArray(r.groups)&&r.groups.forEach(function(s){"string"==typeof s.mids&&(s.mids=s.mids.split(" "))}),r};
},{"sdp-transform":14}],21:[function(require,module,exports){
!function(i,e){"use strict";var o="model",a="name",r="type",t="vendor",n="version",s="mobile",b="tablet",w="smarttv",d=function(i,e){var o={};for(var a in i)e[a]&&e[a].length%2==0?o[a]=e[a].concat(i[a]):o[a]=i[a];return o},l=function(i){for(var e={},o=0;o0?2===t.length?"function"==typeof t[1]?this[t[0]]=t[1].call(this,s):this[t[0]]=t[1]:3===t.length?"function"!=typeof t[1]||t[1].exec&&t[1].test?this[t[0]]=s?s.replace(t[1],t[2]):void 0:this[t[0]]=s?t[1].call(this,s,t[2]):void 0:4===t.length&&(this[t[0]]=s?t[3].call(this,s.replace(t[1],t[2])):void 0):this[t]=s||void 0;b+=2}},v=function(i,e){for(var o in e)if("object"==typeof e[o]&&e[o].length>0){for(var a=0;a2&&(i[o]="iPad",i[r]=b),i},this.getEngine=function(){var i={};return i[a]=void 0,i[n]=void 0,h.call(i,c,v.engine),i},this.getOS=function(){var i={};return i[a]=void 0,i[n]=void 0,h.call(i,c,v.os),f&&!i[a]&&u&&u.platform&&"Unknown"!=u.platform&&(i[a]=u.platform.replace(/chrome os/i,"Chromium OS").replace(/macos/i,"Mac OS")),i},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return c},this.setUA=function(i){return c="string"==typeof i&&i.length>500?p(i,500):i,this},this.setUA(c),this};k.VERSION="0.7.39",k.BROWSER=l([a,n,"major"]),k.CPU=l(["architecture"]),k.DEVICE=l([o,t,r,"console",s,w,b,"wearable","embedded"]),k.ENGINE=k.OS=l([a,n]),"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=k),exports.UAParser=k):"function"==typeof define&&define.amd?define(function(){return k}):void 0!==i&&(i.UAParser=k);var y=void 0!==i&&(i.jQuery||i.Zepto);if(y&&!y.ua){var S=new k;y.ua=S.getResult(),y.ua.get=function(){return S.getUA()},y.ua.set=function(i){S.setUA(i);var e=S.getResult();for(var o in e)y.ua[o]=e[o]}}}("object"==typeof window?window:this);
},{}],22:[function(require,module,exports){
function bytesToUuid(e,o){var t=o||0,i=byteToHex;return[i[e[t++]],i[e[t++]],i[e[t++]],i[e[t++]],"-",i[e[t++]],i[e[t++]],"-",i[e[t++]],i[e[t++]],"-",i[e[t++]],i[e[t++]],"-",i[e[t++]],i[e[t++]],i[e[t++]],i[e[t++]],i[e[t++]],i[e[t++]]].join("")}for(var byteToHex=[],i=0;i<256;++i)byteToHex[i]=(i+256).toString(16).substr(1);module.exports=bytesToUuid;
},{}],23:[function(require,module,exports){
var getRandomValues="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(getRandomValues){var rnds8=new Uint8Array(16);module.exports=function(){return getRandomValues(rnds8),rnds8}}else{var rnds=new Array(16);module.exports=function(){for(var n,e=0;e<16;e++)0==(3&e)&&(n=4294967296*Math.random()),rnds[e]=n>>>((3&e)<<3)&255;return rnds}}
},{}],24:[function(require,module,exports){
function v4(r,n,e){var i=n&&e||0;"string"==typeof r&&(n="binary"===r?new Array(16):null,r=null),r=r||{};var u=r.random||(r.rng||rng)();if(u[6]=15&u[6]|64,u[8]=63&u[8]|128,n)for(var o=0;o<16;++o)n[i+o]=u[o];return n||bytesToUuid(u)}var rng=require("./lib/rng"),bytesToUuid=require("./lib/bytesToUuid");module.exports=v4;
},{"./lib/bytesToUuid":22,"./lib/rng":23}],25:[function(require,module,exports){
function WildEmitter(){}module.exports=WildEmitter,WildEmitter.mixin=function(t){var l=t.prototype||t;l.isWildEmitter=!0,l.on=function(t,l,i){this.callbacks=this.callbacks||{};var s=3===arguments.length,c=s?arguments[1]:void 0,a=s?arguments[2]:arguments[1];return a._groupName=c,(this.callbacks[t]=this.callbacks[t]||[]).push(a),this},l.once=function(t,l,i){function s(){c.off(t,s),h.apply(this,arguments)}var c=this,a=3===arguments.length,e=a?arguments[1]:void 0,h=a?arguments[2]:arguments[1];return this.on(t,e,s),this},l.releaseGroup=function(t){this.callbacks=this.callbacks||{};var l,i,s,c;for(l in this.callbacks)for(c=this.callbacks[l],i=0,s=c.length;i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy