Pārlūkot izejas kodu

Makes sure we add/remove all onended events for media streams in one central place.

dev1
damencho 10 gadus atpakaļ
vecāks
revīzija
1e16e24f40

+ 7
- 6
modules/RTC/JitsiLocalTrack.js Parādīt failu

9
 function JitsiLocalTrack(RTC, stream, eventEmitter, videoType,
9
 function JitsiLocalTrack(RTC, stream, eventEmitter, videoType,
10
   resolution)
10
   resolution)
11
 {
11
 {
12
-    JitsiTrack.call(this, RTC, stream);
12
+    JitsiTrack.call(this, RTC, stream,
13
+        function () {
14
+            if(!self.dontFireRemoveEvent)
15
+                self.eventEmitter.emit(
16
+                    StreamEventTypes.EVENT_TYPE_LOCAL_ENDED, self);
17
+            self.dontFireRemoveEvent = false;
18
+        });
13
     this.eventEmitter = eventEmitter;
19
     this.eventEmitter = eventEmitter;
14
     this.videoType = videoType;
20
     this.videoType = videoType;
15
     this.dontFireRemoveEvent = false;
21
     this.dontFireRemoveEvent = false;
16
     this.resolution = resolution;
22
     this.resolution = resolution;
17
     var self = this;
23
     var self = this;
18
-    this.stream.onended = function () {
19
-        if(!self.dontFireRemoveEvent)
20
-            self.eventEmitter.emit(StreamEventTypes.EVENT_TYPE_LOCAL_ENDED, self);
21
-        self.dontFireRemoveEvent = false;
22
-    };
23
 }
24
 }
24
 
25
 
25
 JitsiLocalTrack.prototype = Object.create(JitsiTrack.prototype);
26
 JitsiLocalTrack.prototype = Object.create(JitsiTrack.prototype);

+ 4
- 5
modules/RTC/JitsiRemoteTrack.js Parādīt failu

11
  * @constructor
11
  * @constructor
12
  */
12
  */
13
 function JitsiRemoteTrack(RTC, data, sid, ssrc, eventEmitter) {
13
 function JitsiRemoteTrack(RTC, data, sid, ssrc, eventEmitter) {
14
-    JitsiTrack.call(this, RTC, data.stream);
14
+    JitsiTrack.call(this, RTC, data.stream,
15
+        function () {
16
+            eventEmitter.emit(StreamEventTypes.EVENT_TYPE_REMOTE_ENDED, self);
17
+        });
15
     this.rtc = RTC;
18
     this.rtc = RTC;
16
     this.sid = sid;
19
     this.sid = sid;
17
     this.stream = data.stream;
20
     this.stream = data.stream;
25
     }
28
     }
26
     this.eventEmitter = eventEmitter;
29
     this.eventEmitter = eventEmitter;
27
     var self = this;
30
     var self = this;
28
-    if(this.stream)
29
-        this.stream.onended = function () {
30
-            eventEmitter.emit(StreamEventTypes.EVENT_TYPE_REMOTE_ENDED, self);
31
-        }
32
 }
31
 }
33
 
32
 
34
 JitsiRemoteTrack.prototype = Object.create(JitsiTrack.prototype);
33
 JitsiRemoteTrack.prototype = Object.create(JitsiTrack.prototype);

+ 28
- 1
modules/RTC/JitsiTrack.js Parādīt failu

17
     };
17
     };
18
 }
18
 }
19
 
19
 
20
+/**
21
+ * Adds onended/oninactive handler to a MediaStream.
22
+ * @param mediaStream a MediaStream to attach onended/oninactive handler
23
+ * @param handler the handler
24
+ */
25
+function addMediaStreamInactiveHandler(mediaStream, handler) {
26
+    if (mediaStream.addEventListener) {
27
+        // chrome
28
+        if(typeof mediaStream.active !== "undefined")
29
+            mediaStream.oninactive = handler;
30
+        else
31
+            mediaStream.onended = handler;
32
+    } else {
33
+        // themasys
34
+        mediaStream.attachEvent('ended', function () {
35
+            handler(mediaStream);
36
+        });
37
+    }
38
+}
39
+
20
 /**
40
 /**
21
  * Represents a single media track (either audio or video).
41
  * Represents a single media track (either audio or video).
22
  * @constructor
42
  * @constructor
43
+ * @param rtc the rtc instance
44
+ * @param stream the stream
45
+ * @param streamInactiveHandler the function that will handle
46
+ *        onended/oninactive events of the stream.
23
  */
47
  */
24
-function JitsiTrack(rtc, stream)
48
+function JitsiTrack(rtc, stream, streamInactiveHandler)
25
 {
49
 {
26
     /**
50
     /**
27
      * Array with the HTML elements that are displaying the streams.
51
      * Array with the HTML elements that are displaying the streams.
44
     if (RTCBrowserType.isFirefox() && this.stream) {
68
     if (RTCBrowserType.isFirefox() && this.stream) {
45
         implementOnEndedHandling(this.stream);
69
         implementOnEndedHandling(this.stream);
46
     }
70
     }
71
+
72
+    if(stream)
73
+        addMediaStreamInactiveHandler(stream, streamInactiveHandler);
47
 }
74
 }
48
 
75
 
49
 /**
76
 /**

Notiek ielāde…
Atcelt
Saglabāt