Преглед на файлове

ref(TPC): Do not add/remove video tracks from TPC for unmute/mute case on Safari.

 Only add/remove the tracks from the peerconnection so that the camera led turns off on mute.
master
Jaya Allamsetty преди 4 години
родител
ревизия
19b350df3c
променени са 2 файла, в които са добавени 14 реда и са изтрити 19 реда
  1. 4
    13
      modules/RTC/TPCUtils.js
  2. 10
    6
      modules/RTC/TraceablePeerConnection.js

+ 4
- 13
modules/RTC/TPCUtils.js Целия файл

@@ -256,10 +256,7 @@ export class TPCUtils {
256 256
             return Promise.resolve();
257 257
         }
258 258
 
259
-        return transceiver.sender.replaceTrack(track)
260
-            .then(() => {
261
-                this.pc.localTracks.set(localTrack.rtcId, localTrack);
262
-            });
259
+        return transceiver.sender.replaceTrack(track);
263 260
     }
264 261
 
265 262
     /**
@@ -289,8 +286,7 @@ export class TPCUtils {
289 286
     /**
290 287
      * Removes the track from the RTCRtpSender as part of the mute operation.
291 288
      * @param {JitsiLocalTrack} localTrack - track to be removed.
292
-     * @returns {Promise<boolean>} - Promise that resolves to false if unmute
293
-     * operation is successful, a reject otherwise.
289
+     * @returns {Promise<void>} - resolved when done.
294 290
      */
295 291
     removeTrackMute(localTrack) {
296 292
         const mediaType = localTrack.getType();
@@ -303,12 +299,7 @@ export class TPCUtils {
303 299
 
304 300
         logger.debug(`Removing ${localTrack} on ${this.pc}`);
305 301
 
306
-        return transceiver.sender.replaceTrack(null)
307
-            .then(() => {
308
-                this.pc.localTracks.delete(localTrack.rtcId);
309
-
310
-                return Promise.resolve(false);
311
-            });
302
+        return transceiver.sender.replaceTrack(null);
312 303
     }
313 304
 
314 305
     /**
@@ -408,8 +399,8 @@ export class TPCUtils {
408 399
         const transceivers = this.pc.peerconnection.getTransceivers()
409 400
             .filter(t => t.receiver && t.receiver.track && t.receiver.track.kind === mediaType);
410 401
         const localTracks = this.pc.getLocalTracks(mediaType);
411
-        logger.info(`${active ? 'Enabling' : 'Suspending'} ${mediaType} media transfer on ${this.pc}`);
412 402
 
403
+        logger.info(`${active ? 'Enabling' : 'Suspending'} ${mediaType} media transfer on ${this.pc}`);
413 404
         transceivers.forEach((transceiver, idx) => {
414 405
             if (active) {
415 406
                 // The first transceiver is for the local track and only this one can be set to 'sendrecv'

+ 10
- 6
modules/RTC/TraceablePeerConnection.js Целия файл

@@ -1657,9 +1657,6 @@ TraceablePeerConnection.prototype.addTrack = function(track, isInitiator = false
1657 1657
  * Promise is rejected when something goes wrong.
1658 1658
  */
1659 1659
 TraceablePeerConnection.prototype.addTrackUnmute = function(track) {
1660
-    if (browser.usesUnifiedPlan()) {
1661
-        return this.tpcUtils.addTrackUnmute(track);
1662
-    }
1663 1660
     if (!this._assertTrackBelongs('addTrackUnmute', track)) {
1664 1661
         // Abort
1665 1662
         return Promise.reject('Track not found on the peerconnection');
@@ -1674,6 +1671,11 @@ TraceablePeerConnection.prototype.addTrackUnmute = function(track) {
1674 1671
 
1675 1672
         return Promise.reject('Stream not found');
1676 1673
     }
1674
+
1675
+    if (browser.usesUnifiedPlan()) {
1676
+        return this.tpcUtils.addTrackUnmute(track);
1677
+    }
1678
+
1677 1679
     this._addStream(webRtcStream);
1678 1680
 
1679 1681
     return Promise.resolve(true);
@@ -1832,9 +1834,6 @@ TraceablePeerConnection.prototype.replaceTrack = function(oldTrack, newTrack) {
1832 1834
  * Promise is rejected when something goes wrong.
1833 1835
  */
1834 1836
 TraceablePeerConnection.prototype.removeTrackMute = function(localTrack) {
1835
-    if (browser.usesUnifiedPlan()) {
1836
-        return this.tpcUtils.removeTrackMute(localTrack);
1837
-    }
1838 1837
     const webRtcStream = localTrack.getOriginalStream();
1839 1838
 
1840 1839
     this.trace(
@@ -1845,6 +1844,11 @@ TraceablePeerConnection.prototype.removeTrackMute = function(localTrack) {
1845 1844
         // Abort - nothing to be done here
1846 1845
         return Promise.reject('Track not found in the peerconnection');
1847 1846
     }
1847
+
1848
+    if (browser.usesUnifiedPlan()) {
1849
+        return this.tpcUtils.removeTrackMute(localTrack);
1850
+    }
1851
+
1848 1852
     if (webRtcStream) {
1849 1853
         logger.info(
1850 1854
             `Removing ${localTrack} as mute from ${this}`);

Loading…
Отказ
Запис