| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 | 
							- var EventEmitter = require("events");
 - var RTCUtils = require("./RTCUtils.js");
 - var LocalStream = require("./LocalStream.js");
 - var DataChannels = require("./DataChannels");
 - var MediaStream = require("./MediaStream.js");
 - //These lines should be uncommented when require works in app.js
 - //var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
 - //var XMPPEvents = require("../service/xmpp/XMPPEvents");
 - 
 - var eventEmitter = new EventEmitter();
 - 
 - var RTC = {
 -     rtcUtils: null,
 -     localStreams: [],
 -     remoteStreams: {},
 -     localAudio: null,
 -     localVideo: null,
 -     addStreamListener: function (listener, eventType) {
 -         eventEmitter.on(eventType, listener);
 -     },
 -     removeStreamListener: function (listener, eventType) {
 -         if(!(eventType instanceof StreamEventTypes))
 -             throw "Illegal argument";
 - 
 -         eventEmitter.removeListener(eventType, listener);
 -     },
 -     createLocalStream: function (stream, type, change) {
 - 
 -         var localStream =  new LocalStream(stream, type, eventEmitter);
 -         //in firefox we have only one stream object
 -         if(this.localStreams.length == 0 ||
 -             this.localStreams[0].getOriginalStream() != stream)
 -             this.localStreams.push(localStream);
 -         if(type == "audio")
 -         {
 -             this.localAudio = localStream;
 -         }
 -         else
 -         {
 -             this.localVideo = localStream;
 -         }
 -         var eventType = StreamEventTypes.EVENT_TYPE_LOCAL_CREATED;
 -         if(change)
 -             eventType = StreamEventTypes.EVENT_TYPE_LOCAL_CHANGED;
 - 
 -         eventEmitter.emit(eventType, localStream);
 -         return localStream;
 -     },
 -     removeLocalStream: function (stream) {
 -         for(var i = 0; i < this.localStreams.length; i++)
 -         {
 -             if(this.localStreams[i].getOriginalStream() === stream) {
 -                 delete this.localStreams[i];
 -                 return;
 -             }
 -         }
 -     },
 -     createRemoteStream: function (data, sid, thessrc) {
 -         var remoteStream = new MediaStream(data, sid, thessrc,
 -             this.getBrowserType());
 -         var jid = data.peerjid || xmpp.myJid();
 -         if(!this.remoteStreams[jid]) {
 -             this.remoteStreams[jid] = {};
 -         }
 -         this.remoteStreams[jid][remoteStream.type]= remoteStream;
 -         eventEmitter.emit(StreamEventTypes.EVENT_TYPE_REMOTE_CREATED, remoteStream);
 -         console.debug("ADD remote stream ", remoteStream.type, " ", jid, " ", thessrc);
 -         return remoteStream;
 -     },
 -     getBrowserType: function () {
 -         return this.rtcUtils.browser;
 -     },
 -     getPCConstraints: function () {
 -         return this.rtcUtils.pc_constraints;
 -     },
 -     getUserMediaWithConstraints:function(um, success_callback,
 -                                          failure_callback, resolution,
 -                                          bandwidth, fps, desktopStream)
 -     {
 -         return this.rtcUtils.getUserMediaWithConstraints(um, success_callback,
 -             failure_callback, resolution, bandwidth, fps, desktopStream);
 -     },
 -     attachMediaStream:  function (element, stream) {
 -         this.rtcUtils.attachMediaStream(element, stream);
 -     },
 -     getStreamID:  function (stream) {
 -         return this.rtcUtils.getStreamID(stream);
 -     },
 -     getVideoSrc: function (element) {
 -         return this.rtcUtils.getVideoSrc(element);
 -     },
 -     setVideoSrc: function (element, src) {
 -         this.rtcUtils.setVideoSrc(element, src);
 -     },
 -     dispose: function() {
 -         if (this.rtcUtils) {
 -             this.rtcUtils = null;
 -         }
 -     },
 -     stop:  function () {
 -         this.dispose();
 -     },
 -     start: function () {
 -         var self = this;
 -         desktopsharing.addListener(
 -             function (stream, isUsingScreenStream, callback) {
 -                 self.changeLocalVideo(stream, isUsingScreenStream, callback);
 -             }, DesktopSharingEventTypes.NEW_STREAM_CREATED);
 -         xmpp.addListener(XMPPEvents.CHANGED_STREAMS, function (jid, changedStreams) {
 -             for(var i = 0; i < changedStreams.length; i++) {
 -                 var type = changedStreams[i].type;
 -                 if (type != "audio") {
 -                     var peerStreams = self.remoteStreams[jid];
 -                     if(!peerStreams)
 -                         continue;
 -                     var videoStream = peerStreams[MediaStreamType.VIDEO_TYPE];
 -                     if(!videoStream)
 -                         continue;
 -                     videoStream.videoType = changedStreams[i].type;
 -                 }
 -             }
 -         })
 -         this.rtcUtils = new RTCUtils(this);
 -         this.rtcUtils.obtainAudioAndVideoPermissions();
 -     },
 -     onConferenceCreated: function(event) {
 -         DataChannels.bindDataChannelListener(event.peerconnection);
 -     },
 -     muteRemoteVideoStream: function (jid, value) {
 -         var stream;
 - 
 -         if(this.remoteStreams[jid] &&
 -             this.remoteStreams[jid][MediaStreamType.VIDEO_TYPE])
 -         {
 -             stream = this.remoteStreams[jid][MediaStreamType.VIDEO_TYPE];
 -         }
 - 
 -         if(!stream)
 -             return false;
 - 
 -         if (value != stream.muted) {
 -             stream.setMute(value);
 -             return true;
 -         }
 -         return false;
 -     },
 -     switchVideoStreams: function (new_stream) {
 -         this.localVideo.stream = new_stream;
 - 
 -         this.localStreams = [];
 - 
 -         //in firefox we have only one stream object
 -         if (this.localAudio.getOriginalStream() != new_stream)
 -             this.localStreams.push(this.localAudio);
 -         this.localStreams.push(this.localVideo);
 -     },
 -     changeLocalVideo: function (stream, isUsingScreenStream, callback) {
 -         var oldStream = this.localVideo.getOriginalStream();
 -         var type = (isUsingScreenStream? "screen" : "video");
 -         RTC.localVideo = this.createLocalStream(stream, "video", true, type);
 -         // Stop the stream to trigger onended event for old stream
 -         oldStream.stop();
 -         xmpp.switchStreams(stream, oldStream,callback);
 -     },
 -     /**
 -      * Checks if video identified by given src is desktop stream.
 -      * @param videoSrc eg.
 -      * blob:https%3A//pawel.jitsi.net/9a46e0bd-131e-4d18-9c14-a9264e8db395
 -      * @returns {boolean}
 -      */
 -     isVideoSrcDesktop: function (jid) {
 -         if(!jid)
 -             return false;
 -         var isDesktop = false;
 -         var stream = null;
 -         if (xmpp.myJid() &&
 -             xmpp.myResource() === jid) {
 -             // local video
 -             stream = this.localVideo;
 -         } else {
 -             var peerStreams = this.remoteStreams[jid];
 -             if(!peerStreams)
 -                 return false;
 -             stream = peerStreams[MediaStreamType.VIDEO_TYPE];
 -         }
 - 
 -         if(stream)
 -             isDesktop = (stream.videoType === "screen");
 - 
 -         return isDesktop;
 -     }
 - };
 - 
 - module.exports = RTC;
 
 
  |