소스 검색

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.
dev1
Jaya Allamsetty 5 년 전
부모
커밋
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
             return Promise.resolve();
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
     /**
286
     /**
290
      * Removes the track from the RTCRtpSender as part of the mute operation.
287
      * Removes the track from the RTCRtpSender as part of the mute operation.
291
      * @param {JitsiLocalTrack} localTrack - track to be removed.
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
     removeTrackMute(localTrack) {
291
     removeTrackMute(localTrack) {
296
         const mediaType = localTrack.getType();
292
         const mediaType = localTrack.getType();
303
 
299
 
304
         logger.debug(`Removing ${localTrack} on ${this.pc}`);
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
         const transceivers = this.pc.peerconnection.getTransceivers()
399
         const transceivers = this.pc.peerconnection.getTransceivers()
409
             .filter(t => t.receiver && t.receiver.track && t.receiver.track.kind === mediaType);
400
             .filter(t => t.receiver && t.receiver.track && t.receiver.track.kind === mediaType);
410
         const localTracks = this.pc.getLocalTracks(mediaType);
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
         transceivers.forEach((transceiver, idx) => {
404
         transceivers.forEach((transceiver, idx) => {
414
             if (active) {
405
             if (active) {
415
                 // The first transceiver is for the local track and only this one can be set to 'sendrecv'
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
  * Promise is rejected when something goes wrong.
1657
  * Promise is rejected when something goes wrong.
1658
  */
1658
  */
1659
 TraceablePeerConnection.prototype.addTrackUnmute = function(track) {
1659
 TraceablePeerConnection.prototype.addTrackUnmute = function(track) {
1660
-    if (browser.usesUnifiedPlan()) {
1661
-        return this.tpcUtils.addTrackUnmute(track);
1662
-    }
1663
     if (!this._assertTrackBelongs('addTrackUnmute', track)) {
1660
     if (!this._assertTrackBelongs('addTrackUnmute', track)) {
1664
         // Abort
1661
         // Abort
1665
         return Promise.reject('Track not found on the peerconnection');
1662
         return Promise.reject('Track not found on the peerconnection');
1674
 
1671
 
1675
         return Promise.reject('Stream not found');
1672
         return Promise.reject('Stream not found');
1676
     }
1673
     }
1674
+
1675
+    if (browser.usesUnifiedPlan()) {
1676
+        return this.tpcUtils.addTrackUnmute(track);
1677
+    }
1678
+
1677
     this._addStream(webRtcStream);
1679
     this._addStream(webRtcStream);
1678
 
1680
 
1679
     return Promise.resolve(true);
1681
     return Promise.resolve(true);
1832
  * Promise is rejected when something goes wrong.
1834
  * Promise is rejected when something goes wrong.
1833
  */
1835
  */
1834
 TraceablePeerConnection.prototype.removeTrackMute = function(localTrack) {
1836
 TraceablePeerConnection.prototype.removeTrackMute = function(localTrack) {
1835
-    if (browser.usesUnifiedPlan()) {
1836
-        return this.tpcUtils.removeTrackMute(localTrack);
1837
-    }
1838
     const webRtcStream = localTrack.getOriginalStream();
1837
     const webRtcStream = localTrack.getOriginalStream();
1839
 
1838
 
1840
     this.trace(
1839
     this.trace(
1845
         // Abort - nothing to be done here
1844
         // Abort - nothing to be done here
1846
         return Promise.reject('Track not found in the peerconnection');
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
     if (webRtcStream) {
1852
     if (webRtcStream) {
1849
         logger.info(
1853
         logger.info(
1850
             `Removing ${localTrack} as mute from ${this}`);
1854
             `Removing ${localTrack} as mute from ${this}`);

Loading…
취소
저장