Browse Source

fix(media): Add 'ended' event handler on MediaStreamTrack for FF

When screensharing is stopped on FF from the sharing indicator (available in FF nightly), we are currently not detecting it.
Firefox fires a track 'ended' event as opposed to Chrome which fires a mediastream 'inactive' event as well.
dev1
Jaya Allamsetty 5 years ago
parent
commit
f8d0662fdd
1 changed files with 17 additions and 12 deletions
  1. 17
    12
      modules/RTC/JitsiTrack.js

+ 17
- 12
modules/RTC/JitsiTrack.js View File

@@ -3,6 +3,7 @@ import EventEmitter from 'events';
3 3
 import { getLogger } from 'jitsi-meet-logger';
4 4
 import * as JitsiTrackEvents from '../../JitsiTrackEvents';
5 5
 import * as MediaType from '../../service/RTC/MediaType';
6
+import browser from '../browser';
6 7
 import RTCUtils from './RTCUtils';
7 8
 
8 9
 const logger = getLogger(__filename);
@@ -16,15 +17,6 @@ const trackHandler2Prop = {
16 17
     'track_ended': 'onended'
17 18
 };
18 19
 
19
-/**
20
- * Adds onended/oninactive handler to a MediaStream.
21
- * @param mediaStream a MediaStream to attach onended/oninactive handler
22
- * @param handler the handler
23
- */
24
-function addMediaStreamInactiveHandler(mediaStream, handler) {
25
-    mediaStream.oninactive = handler;
26
-}
27
-
28 20
 /**
29 21
  * Represents a single media track (either audio or video).
30 22
  */
@@ -90,6 +82,20 @@ export default class JitsiTrack extends EventEmitter {
90 82
 
91 83
     /* eslint-enable max-params */
92 84
 
85
+    /**
86
+     * Adds onended/oninactive handler to a MediaStream or a MediaStreamTrack.
87
+     * Firefox doesn't fire a inactive event on the MediaStream, instead it fires
88
+     * a onended event on the MediaStreamTrack.
89
+     * @param {Function} handler the handler
90
+     */
91
+    _addMediaStreamInactiveHandler(handler) {
92
+        if (browser.isFirefox()) {
93
+            this.track.onended = handler;
94
+        } else {
95
+            this.stream.oninactive = handler;
96
+        }
97
+    }
98
+
93 99
     /**
94 100
      * Sets handler to the WebRTC MediaStream or MediaStreamTrack object
95 101
      * depending on the passed type.
@@ -134,7 +140,7 @@ export default class JitsiTrack extends EventEmitter {
134 140
             }
135 141
         }
136 142
         if (this._streamInactiveHandler) {
137
-            addMediaStreamInactiveHandler(this.stream, undefined);
143
+            this._addMediaStreamInactiveHandler(undefined);
138 144
         }
139 145
     }
140 146
 
@@ -161,8 +167,7 @@ export default class JitsiTrack extends EventEmitter {
161 167
                 this._setHandler(type, this.handlers.get(type));
162 168
             }
163 169
             if (this._streamInactiveHandler) {
164
-                addMediaStreamInactiveHandler(
165
-                    this.stream, this._streamInactiveHandler);
170
+                this._addMediaStreamInactiveHandler(this._streamInactiveHandler);
166 171
             }
167 172
         }
168 173
     }

Loading…
Cancel
Save