浏览代码

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

master
damencho 10 年前
父节点
当前提交
1ba0a182f6

+ 6
- 3
modules/RTC/LocalStream.js 查看文件

39
         };
39
         };
40
     }
40
     }
41
 
41
 
42
-    this.stream.onended = function () {
43
-        self.streamEnded();
44
-    };
42
+    APP.RTC.addMediaStreamInactiveHandler(
43
+        this.stream,
44
+        function () {
45
+            self.streamEnded();
46
+        });
47
+
45
     if (RTCBrowserType.isFirefox()) {
48
     if (RTCBrowserType.isFirefox()) {
46
         implementOnEndedHandling(this.stream);
49
         implementOnEndedHandling(this.stream);
47
     }
50
     }

+ 31
- 0
modules/RTC/RTC.js 查看文件

266
     /**
266
     /**
267
      * A method to handle stopping of the stream.
267
      * A method to handle stopping of the stream.
268
      * One point to handle the differences in various implementations.
268
      * One point to handle the differences in various implementations.
269
+     * @param mediaStream MediaStream object to stop.
269
      */
270
      */
270
     stopMediaStream: function (mediaStream) {
271
     stopMediaStream: function (mediaStream) {
271
         mediaStream.getAudioTracks().forEach(function (track) {
272
         mediaStream.getAudioTracks().forEach(function (track) {
285
         if (mediaStream.stop) {
286
         if (mediaStream.stop) {
286
             mediaStream.stop();
287
             mediaStream.stop();
287
         }
288
         }
289
+    },
290
+    /**
291
+     * Adds onended handler to a MediaStream.
292
+     * @param mediaStream a MediaStream to attach onended handler
293
+     * @param handler the handler
294
+     */
295
+    addMediaStreamInactiveHandler: function (mediaStream, handler) {
296
+        if (mediaStream.addEventListener) {
297
+            // chrome
298
+            mediaStream.onended = handler;
299
+        } else {
300
+            // themasys
301
+            mediaStream.attachEvent('ended', function () {
302
+                handler(mediaStream);
303
+            });
304
+        }
305
+    },
306
+    /**
307
+     * Removes onended handler.
308
+     * @param mediaStream the MediaStream to remove the handler from.
309
+     * @param handler the handler to remove.
310
+     */
311
+    removeMediaStreamInactiveHandler: function (mediaStream, handler) {
312
+        if (mediaStream.removeEventListener) {
313
+            // chrome
314
+            mediaStream.onended = null;
315
+        } else {
316
+            // themasys
317
+            mediaStream.detachEvent('ended', handler);
318
+        }
288
     }
319
     }
289
 };
320
 };
290
 
321
 

+ 3
- 2
modules/UI/videolayout/LocalVideo.js 查看文件

208
     APP.RTC.attachMediaStream(localVideoSelector, stream.getOriginalStream());
208
     APP.RTC.attachMediaStream(localVideoSelector, stream.getOriginalStream());
209
 
209
 
210
     // Add stream ended handler
210
     // Add stream ended handler
211
-    stream.getOriginalStream().onended = function () {
211
+    APP.RTC.addMediaStreamInactiveHandler(
212
+        stream.getOriginalStream(), function () {
212
         // We have to re-select after attach when Temasys plugin is used,
213
         // We have to re-select after attach when Temasys plugin is used,
213
         // because <video> element is replaced with <object>
214
         // because <video> element is replaced with <object>
214
         localVideo = $('#' + localVideo.id)[0];
215
         localVideo = $('#' + localVideo.id)[0];
215
         localVideoContainer.removeChild(localVideo);
216
         localVideoContainer.removeChild(localVideo);
216
         self.VideoLayout.updateRemovedVideo(APP.xmpp.myResource());
217
         self.VideoLayout.updateRemovedVideo(APP.xmpp.myResource());
217
-    };
218
+    });
218
 };
219
 };
219
 
220
 
220
 LocalVideo.prototype.joined = function (jid) {
221
 LocalVideo.prototype.joined = function (jid) {

+ 5
- 5
modules/UI/videolayout/RemoteVideo.js 查看文件

229
         APP.RTC.attachMediaStream(sel, stream);
229
         APP.RTC.attachMediaStream(sel, stream);
230
     }
230
     }
231
 
231
 
232
-    stream.onended = function () {
233
-        console.log('stream ended', this);
232
+    APP.RTC.addMediaStreamInactiveHandler(
233
+        stream, function () {
234
+            console.log('stream ended', this);
234
 
235
 
235
-        self.removeRemoteStreamElement(stream, isVideo, newElementId);
236
-
237
-    };
236
+            self.removeRemoteStreamElement(stream, isVideo, newElementId);
237
+    });
238
 
238
 
239
     // Add click handler.
239
     // Add click handler.
240
     var onClickHandler = function (event) {
240
     var onClickHandler = function (event) {

+ 4
- 16
modules/desktopsharing/desktopsharing.js 查看文件

54
     if (!switchInProgress && isUsingScreenStream) {
54
     if (!switchInProgress && isUsingScreenStream) {
55
         APP.desktopsharing.toggleScreenSharing();
55
         APP.desktopsharing.toggleScreenSharing();
56
     }
56
     }
57
-    //FIXME: to be verified
58
-    if (stream.removeEventListener) {
59
-        stream.removeEventListener('ended', onEndedHandler);
60
-    } else {
61
-        stream.detachEvent('ended', onEndedHandler);
62
-    }
57
+
58
+    APP.RTC.removeMediaStreamInactiveHandler(stream, onEndedHandler);
63
 }
59
 }
64
 
60
 
65
 module.exports = {
61
 module.exports = {
113
                     isUsingScreenStream = true;
109
                     isUsingScreenStream = true;
114
                     // Hook 'ended' event to restore camera
110
                     // Hook 'ended' event to restore camera
115
                     // when screen stream stops
111
                     // when screen stream stops
116
-                    //FIXME: to be verified
117
-                    if (stream.addEventListener) {
118
-                        stream.addEventListener('ended', function () {
119
-                            onEndedHandler(stream);
120
-                        });
121
-                    } else {
122
-                        stream.attachEvent('ended', function () {
123
-                            onEndedHandler(stream);
124
-                        });
125
-                    }
112
+                    APP.RTC.addMediaStreamInactiveHandler(
113
+                        stream, onEndedHandler);
126
                     newStreamCreated(stream);
114
                     newStreamCreated(stream);
127
                 },
115
                 },
128
                 getDesktopStreamFailed);
116
                 getDesktopStreamFailed);

正在加载...
取消
保存