Просмотр исходного кода

Generates lib-jitsi-meet.js

dev1
hristoterezov 9 лет назад
Родитель
Сommit
b583bf5867
1 измененных файлов: 47 добавлений и 66 удалений
  1. 47
    66
      lib-jitsi-meet.js

+ 47
- 66
lib-jitsi-meet.js Просмотреть файл

8145
 var localVideoSSRC;
8145
 var localVideoSSRC;
8146
 
8146
 
8147
 /**
8147
 /**
8148
- * SSRC, msid, mslabel, label used for recvonly video stream when we have no local camera.
8148
+ * SSRC used for recvonly video stream when we have no local camera.
8149
  * This is in order to tell Chrome what SSRC should be used in RTCP requests
8149
  * This is in order to tell Chrome what SSRC should be used in RTCP requests
8150
  * instead of 1.
8150
  * instead of 1.
8151
  */
8151
  */
8152
-var localRecvOnlySSRC, localRecvOnlyMSID, localRecvOnlyMSLabel, localRecvOnlyLabel;
8152
+var localRecvOnlySSRC;
8153
 
8153
 
8154
 /**
8154
 /**
8155
  * cname for <tt>localRecvOnlySSRC</tt>
8155
  * cname for <tt>localRecvOnlySSRC</tt>
8222
 };
8222
 };
8223
 
8223
 
8224
 /**
8224
 /**
8225
- * Generates new label/mslabel attribute
8226
- * @returns {string} label/mslabel attribute
8227
- */
8228
-function generateLabel() {
8229
-    return RandomUtil.randomHexString(8) + "-" + RandomUtil.randomHexString(4) +
8230
-        "-" + RandomUtil.randomHexString(4) + "-" +
8231
-        RandomUtil.randomHexString(4) + "-" + RandomUtil.randomHexString(12);
8232
-}
8233
-
8234
-/**
8235
- * Generates new SSRC, CNAME, mslabel, label and msid for local video recvonly stream.
8225
+ * Generates new SSRC for local video recvonly stream.
8236
  * FIXME what about eventual SSRC collision ?
8226
  * FIXME what about eventual SSRC collision ?
8237
  */
8227
  */
8238
 function generateRecvonlySSRC() {
8228
 function generateRecvonlySSRC() {
8229
+
8239
     localRecvOnlySSRC =
8230
     localRecvOnlySSRC =
8240
-        Math.random().toString(10).substring(2, 11);
8231
+        localVideoSSRC ?
8232
+            localVideoSSRC : Math.random().toString(10).substring(2, 11);
8233
+
8241
     localRecvOnlyCName =
8234
     localRecvOnlyCName =
8242
         Math.random().toString(36).substring(2);
8235
         Math.random().toString(36).substring(2);
8243
-    localRecvOnlyMSLabel = generateLabel();
8244
-    localRecvOnlyLabel = generateLabel();
8245
-    localRecvOnlyMSID = localRecvOnlyMSLabel + " " + localRecvOnlyLabel;
8246
-
8247
 
8236
 
8248
-        logger.info(
8237
+    logger.info(
8249
         "Generated local recvonly SSRC: " + localRecvOnlySSRC +
8238
         "Generated local recvonly SSRC: " + localRecvOnlySSRC +
8250
         ", cname: " + localRecvOnlyCName);
8239
         ", cname: " + localRecvOnlyCName);
8251
 }
8240
 }
8287
 
8276
 
8288
         // IF we have local video SSRC stored make sure it is replaced
8277
         // IF we have local video SSRC stored make sure it is replaced
8289
         // with old SSRC
8278
         // with old SSRC
8290
-        if (localVideoSSRC) {
8291
-            var newSdp = new SDP(localDescription.sdp);
8292
-            if (newSdp.media[1].indexOf("a=ssrc:") !== -1 &&
8293
-                !newSdp.containsSSRC(localVideoSSRC)) {
8294
-                // Get new video SSRC
8295
-                var map = newSdp.getMediaSsrcMap();
8296
-                var videoPart = map[1];
8297
-                var videoSSRCs = videoPart.ssrcs;
8298
-                var newSSRC = Object.keys(videoSSRCs)[0];
8299
-
8300
-                logger.info(
8301
-                    "Replacing new video SSRC: " + newSSRC +
8302
-                    " with " + localVideoSSRC);
8279
+        var sdp = new SDP(localDescription.sdp);
8280
+        if (sdp.media.length < 2)
8281
+            return;
8303
 
8282
 
8304
-                localDescription.sdp =
8305
-                    newSdp.raw.replace(
8306
-                        new RegExp('a=ssrc:' + newSSRC, 'g'),
8307
-                        'a=ssrc:' + localVideoSSRC);
8308
-            }
8309
-        } else {
8283
+        if (localVideoSSRC && sdp.media[1].indexOf("a=ssrc:") !== -1 &&
8284
+            !sdp.containsSSRC(localVideoSSRC)) {
8285
+            // Get new video SSRC
8286
+            var map = sdp.getMediaSsrcMap();
8287
+            var videoPart = map[1];
8288
+            var videoSSRCs = videoPart.ssrcs;
8289
+            var newSSRC = Object.keys(videoSSRCs)[0];
8290
+
8291
+            logger.info(
8292
+                "Replacing new video SSRC: " + newSSRC +
8293
+                " with " + localVideoSSRC);
8294
+
8295
+            localDescription.sdp =
8296
+                sdp.raw.replace(
8297
+                    new RegExp('a=ssrc:' + newSSRC, 'g'),
8298
+                    'a=ssrc:' + localVideoSSRC);
8299
+        }
8300
+        else if (sdp.media[1].indexOf('a=ssrc:') === -1 &&
8301
+                 sdp.media[1].indexOf('a=recvonly') !== -1) {
8310
             // Make sure we have any SSRC for recvonly video stream
8302
             // Make sure we have any SSRC for recvonly video stream
8311
-            var sdp = new SDP(localDescription.sdp);
8312
-
8313
-            if (sdp.media[1] && sdp.media[1].indexOf('a=ssrc:') === -1 &&
8314
-                sdp.media[1].indexOf('a=recvonly') !== -1) {
8315
-
8316
-                if (!localRecvOnlySSRC) {
8317
-                    generateRecvonlySSRC();
8318
-                }
8319
-                localVideoSSRC = localRecvOnlySSRC;
8303
+            if (!localRecvOnlySSRC) {
8304
+                generateRecvonlySSRC();
8305
+            }
8320
 
8306
 
8321
-                logger.info('No SSRC in video recvonly stream' +
8322
-                             ' - adding SSRC: ' + localRecvOnlySSRC);
8307
+            logger.info('No SSRC in video recvonly stream' +
8308
+                         ' - adding SSRC: ' + localRecvOnlySSRC);
8323
 
8309
 
8324
-                sdp.media[1] += 'a=ssrc:' + localRecvOnlySSRC +
8325
-                                ' cname:' + localRecvOnlyCName + '\r\n' +
8326
-                                'a=ssrc:' + localRecvOnlySSRC +
8327
-                                ' msid:' + localRecvOnlyMSID + '\r\n' +
8328
-                                'a=ssrc:' + localRecvOnlySSRC +
8329
-                                ' mslabel:' + localRecvOnlyMSLabel + '\r\n' +
8330
-                                'a=ssrc:' + localRecvOnlySSRC +
8331
-                                ' label:' + localRecvOnlyLabel + '\r\n';
8310
+            sdp.media[1] += 'a=ssrc:' + localRecvOnlySSRC +
8311
+                            ' cname:' + localRecvOnlyCName + '\r\n';
8332
 
8312
 
8333
-                localDescription.sdp = sdp.session + sdp.media.join('');
8334
-            }
8313
+            localDescription.sdp = sdp.session + sdp.media.join('');
8335
         }
8314
         }
8336
         return localDescription;
8315
         return localDescription;
8337
     },
8316
     },
8467
  * @param ssrc the ssrc to check.
8446
  * @param ssrc the ssrc to check.
8468
  * @returns {boolean} <tt>true</tt> if this SDP contains given SSRC.
8447
  * @returns {boolean} <tt>true</tt> if this SDP contains given SSRC.
8469
  */
8448
  */
8470
-SDP.prototype.containsSSRC = function(ssrc) {
8449
+SDP.prototype.containsSSRC = function (ssrc) {
8450
+    // FIXME this code is really strange - improve it if you can
8471
     var medias = this.getMediaSsrcMap();
8451
     var medias = this.getMediaSsrcMap();
8472
-    Object.keys(medias).forEach(function(mediaindex){
8473
-        var media = medias[mediaindex];
8474
-        //logger.log("Check", channel, ssrc);
8475
-        if(Object.keys(media.ssrcs).indexOf(ssrc) != -1){
8476
-            return true;
8452
+    var result = false;
8453
+    Object.keys(medias).forEach(function (mediaindex) {
8454
+        if (result)
8455
+            return;
8456
+        if (medias[mediaindex].ssrcs[ssrc]) {
8457
+            result = true;
8477
         }
8458
         }
8478
     });
8459
     });
8479
-    return false;
8460
+    return result;
8480
 };
8461
 };
8481
 
8462
 
8482
 // remove iSAC and CN from SDP
8463
 // remove iSAC and CN from SDP

Загрузка…
Отмена
Сохранить