Browse Source

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

dev1
damencho 10 years ago
parent
commit
1e16e24f40
3 changed files with 39 additions and 12 deletions
  1. 7
    6
      modules/RTC/JitsiLocalTrack.js
  2. 4
    5
      modules/RTC/JitsiRemoteTrack.js
  3. 28
    1
      modules/RTC/JitsiTrack.js

+ 7
- 6
modules/RTC/JitsiLocalTrack.js View File

@@ -9,17 +9,18 @@ var RTCBrowserType = require("./RTCBrowserType");
9 9
 function JitsiLocalTrack(RTC, stream, eventEmitter, videoType,
10 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 19
     this.eventEmitter = eventEmitter;
14 20
     this.videoType = videoType;
15 21
     this.dontFireRemoveEvent = false;
16 22
     this.resolution = resolution;
17 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 26
 JitsiLocalTrack.prototype = Object.create(JitsiTrack.prototype);

+ 4
- 5
modules/RTC/JitsiRemoteTrack.js View File

@@ -11,7 +11,10 @@ var StreamEventTypes = require("../../service/RTC/StreamEventTypes");
11 11
  * @constructor
12 12
  */
13 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 18
     this.rtc = RTC;
16 19
     this.sid = sid;
17 20
     this.stream = data.stream;
@@ -25,10 +28,6 @@ function JitsiRemoteTrack(RTC, data, sid, ssrc, eventEmitter) {
25 28
     }
26 29
     this.eventEmitter = eventEmitter;
27 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 33
 JitsiRemoteTrack.prototype = Object.create(JitsiTrack.prototype);

+ 28
- 1
modules/RTC/JitsiTrack.js View File

@@ -17,11 +17,35 @@ function implementOnEndedHandling(stream) {
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 41
  * Represents a single media track (either audio or video).
22 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 51
      * Array with the HTML elements that are displaying the streams.
@@ -44,6 +68,9 @@ function JitsiTrack(rtc, stream)
44 68
     if (RTCBrowserType.isFirefox() && this.stream) {
45 69
         implementOnEndedHandling(this.stream);
46 70
     }
71
+
72
+    if(stream)
73
+        addMediaStreamInactiveHandler(stream, streamInactiveHandler);
47 74
 }
48 75
 
49 76
 /**

Loading…
Cancel
Save