[jitsi-users] How do participants receive the mixed audio stream?


#1

I noticed that jitsi sets audio to recvonly when set to

rtp-level-relay-type='mixer'

How can clients receive the mixed audio stream, and what is its SSRC?

In XEP-0340 http://xmpp.org/extensions/xep-0340.html#usecases-update-transport there is a source property <source xmlns='urn:xmpp:jingle:apps:rtp:ssma:0' ssrc='3716204482'/> which contains a "secret" ssrc. Is this the mixed audio? That ssrc seems to be missing from the JSON REST interface https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-videobridge.md.

Can anybody explain?

···

--
Oliver Hausler - Closeup, Inc.
+1-650-284-8831 - skype: olhausler

attach.live<http://attach.live/> - attach to anything


#2

Yes, the "source" element is the one which contains the SSRC of the mixed stream. It should be translated to JSON, if it is not, its a bug.

Boris

···

On 15/07/16 09:04, Oliver Hausler wrote:

I noticed that jitsi sets audio to recvonly when set to

rtp-level-relay-type='mixer'

How can clients receive the mixed audio stream, and what is its SSRC?

In XEP-0340
http://xmpp.org/extensions/xep-0340.html#usecases-update-transport there
is a source property <source
xmlns='urn:xmpp:jingle:apps:rtp:ssma:0'ssrc='3716204482'/> which
contains a "secret" ssrc. Is this the mixed audio? That ssrc seems to be
missing from the JSON REST interface
https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-videobridge.md.

Can anybody explain?


#3

I see it nowhere.

I know at a later stage the ids in "sources[]" coincide with the ssrcs. There is an id in sources. I assume this will become is the ssrc for the mixed channel? In fact, when I patch in a second channel, the same id that I previously had in "sources[]" appears in "ssrcs[]" redundantly.

Can you confirm my assumptions are correct? Because then we wouldn't need to file a bug.

I am patching a newly created conference like this:

{
  "id": "1ea100bdbf24f40",
  "contents": [
    {
      "name": "audio",
      "channels": [
        {
          "expire": 200,
          "initiator": true,
          "endpoint": "A",
          "direction": "sendrecv",
          "channel-bundle-id": "A",
          "rtp-level-relay-type": "mixer"
        }, 
                {
          "expire": 200,
          "initiator": true,
          "endpoint": "B",
          "direction": "sendrecv",
          "channel-bundle-id": "B",
          "rtp-level-relay-type": "mixer"
        }
      ]
    },
    {
      "name": "video",
      "channels": [
        {
          "expire": 200,
          "initiator": true,
          "endpoint": "A",
          "direction": "sendrecv",
          "channel-bundle-id": "A",
          "last-n": 2
        },
                {
          "expire": 200,
          "initiator": true,
          "endpoint": "B",
          "direction": "sendrecv",
          "channel-bundle-id": "B",
          "last-n": 2
        }
      ]
    }
  ],
  "channel-bundles": [
    {
      "id": "A",
      "transport": {
        "rtcp-mux": true
      }
    },
        {
      "id": "B",
      "transport": {
        "rtcp-mux": true
      }
    }
  ]
}

And receive this answer:

{
  "channel-bundles": [
    {
      "id": "A",
      "transport": {
        "candidates": [
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "192.168.0.5",
            "tcptype": "passive",
            "foundation": "1",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0391c7030",
            "priority": 2130706431,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "2600:8801:2903:a100:0:0:0:1",
            "tcptype": "passive",
            "foundation": "2",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0ffffffffc776992d",
            "priority": 2130706431,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "2600:8801:2903:a100:b043:d98d:6835:848d",
            "tcptype": "passive",
            "foundation": "3",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0ffffffffdfedf546",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "2600:8801:2903:a100:8d04:ad92:2d45:7961",
            "tcptype": "passive",
            "foundation": "4",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0ffffffff81bfbf1f",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "2001:0:9d38:90d7:38d1:2928:3f57:fffa",
            "tcptype": "passive",
            "foundation": "5",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0ffffffffacd52824",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "2600:8801:2903:a100:0:0:0:1",
            "foundation": "7",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0ffffffffc776be82",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "2600:8801:2903:a100:b043:d98d:6835:848d",
            "foundation": "8",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0ffffffffdfee1a9b",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "2600:8801:2903:a100:8d04:ad92:2d45:7961",
            "foundation": "9",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0ffffffff81bfe474",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "2001:0:9d38:90d7:38d1:2928:3f57:fffa",
            "foundation": "10",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0ffffffffacd54d79",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "192.168.0.5",
            "foundation": "6",
            "id": "1ea100bdbf24f40676fdfcc4c0c3eca0391c9585",
            "priority": 2113932031,
            "type": "host",
            "network": 0
          }
        ],
        "xmlns": "urn:xmpp:jingle:transports:ice-udp:1",
        "ufrag": "857no1anngn7ti",
        "rtcp-mux": true,
        "pwd": "6vh4q6mr08irgnipdcaq8ij9cp",
        "fingerprints": [
          {
            "fingerprint": "C8:56:46:2D:C7:93:50:69:AE:BD:74:93:BA:A6:B8:CE:0A:47:60:BF",
            "setup": "actpass",
            "hash": "sha-1"
          }
        ]
      }
    },
    {
      "id": "B",
      "transport": {
        "candidates": [
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "192.168.0.5",
            "tcptype": "passive",
            "foundation": "1",
            "id": "1ea100bdbf24f4026ddb00483670ff037192ae",
            "priority": 2130706431,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "2600:8801:2903:a100:0:0:0:1",
            "tcptype": "passive",
            "foundation": "2",
            "id": "1ea100bdbf24f4026ddb00483670ff0ffffffff91cbbbab",
            "priority": 2130706431,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "2600:8801:2903:a100:b043:d98d:6835:848d",
            "tcptype": "passive",
            "foundation": "3",
            "id": "1ea100bdbf24f4026ddb00483670ff0ffffffffaa4317c4",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "2600:8801:2903:a100:8d04:ad92:2d45:7961",
            "tcptype": "passive",
            "foundation": "4",
            "id": "1ea100bdbf24f4026ddb00483670ff04c14e19d",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "ssltcp",
            "port": 443,
            "ip": "2001:0:9d38:90d7:38d1:2928:3f57:fffa",
            "tcptype": "passive",
            "foundation": "5",
            "id": "1ea100bdbf24f4026ddb00483670ff0772a4aa2",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "2600:8801:2903:a100:0:0:0:1",
            "foundation": "7",
            "id": "1ea100bdbf24f4026ddb00483670ff0ffffffff91cbe100",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "2600:8801:2903:a100:b043:d98d:6835:848d",
            "foundation": "8",
            "id": "1ea100bdbf24f4026ddb00483670ff0ffffffffaa433d19",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "2600:8801:2903:a100:8d04:ad92:2d45:7961",
            "foundation": "9",
            "id": "1ea100bdbf24f4026ddb00483670ff04c1506f2",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "2001:0:9d38:90d7:38d1:2928:3f57:fffa",
            "foundation": "10",
            "id": "1ea100bdbf24f4026ddb00483670ff0772a6ff7",
            "priority": 2113939711,
            "type": "host",
            "network": 0
          },
          {
            "generation": 0,
            "component": 1,
            "protocol": "udp",
            "port": 10000,
            "ip": "192.168.0.5",
            "foundation": "6",
            "id": "1ea100bdbf24f4026ddb00483670ff0371b803",
            "priority": 2113932031,
            "type": "host",
            "network": 0
          }
        ],
        "xmlns": "urn:xmpp:jingle:transports:ice-udp:1",
        "ufrag": "cbr041anngn7tr",
        "rtcp-mux": true,
        "pwd": "1d4poh3jsb6vpr3euk3m7mlenf",
        "fingerprints": [
          {
            "fingerprint": "C8:56:46:2D:C7:93:50:69:AE:BD:74:93:BA:A6:B8:CE:0A:47:60:BF",
            "setup": "actpass",
            "hash": "sha-1"
          }
        ]
      }
    }
  ],
  "contents": [
    {
      "channels": [
        {
          "endpoint": "A",
          "channel-bundle-id": "A",
          "sources": [
            368796450
          ],
          "rtp-level-relay-type": "mixer",
          "expire": 200,
          "initiator": true,
          "id": "21e709f563112a4a",
          "direction": "recvonly"
        },
        {
          "endpoint": "B",
          "channel-bundle-id": "B",
          "sources": [
            2013976405
          ],
          "rtp-level-relay-type": "mixer",
          "expire": 200,
          "initiator": true,
          "id": "cc4cfd4d3833efc2",
          "direction": "recvonly"
        }
      ],
      "name": "audio"
    },
    {
      "channels": [
        {
          "endpoint": "A",
          "channel-bundle-id": "A",
          "sources": [
            1726206550
          ],
          "rtp-level-relay-type": "translator",
          "expire": 200,
          "initiator": true,
          "id": "585c220ad48c23a9",
          "receive-simulcast-layer": null,
          "direction": "sendrecv",
          "last-n": 2
        },
        {
          "endpoint": "B",
          "channel-bundle-id": "B",
          "sources": [
            1726206550
          ],
          "rtp-level-relay-type": "translator",
          "expire": 200,
          "initiator": true,
          "id": "3d3414726921e869",
          "receive-simulcast-layer": null,
          "direction": "sendrecv",
          "last-n": 2
        }
      ],
      "name": "video"
    }
  ],
  "id": "1ea100bdbf24f40"
}
···

-----Original Message-----
From: users [mailto:users-bounces@jitsi.org] On Behalf Of Boris Grozev
Sent: Friday, July 15, 2016 07:19
To: Jitsi Users <users@jitsi.org>
Subject: Re: [jitsi-users] How do participants receive the mixed audio stream?

On 15/07/16 09:04, Oliver Hausler wrote:

I noticed that jitsi sets audio to recvonly when set to

rtp-level-relay-type='mixer'

How can clients receive the mixed audio stream, and what is its SSRC?

In XEP-0340
http://xmpp.org/extensions/xep-0340.html#usecases-update-transport
there is a source property <source
xmlns='urn:xmpp:jingle:apps:rtp:ssma:0'ssrc='3716204482'/> which
contains a "secret" ssrc. Is this the mixed audio? That ssrc seems to
be missing from the JSON REST interface
https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-videobridge.md.

Can anybody explain?

Yes, the "source" element is the one which contains the SSRC of the mixed stream. It should be translated to JSON, if it is not, its a bug.

Boris

_______________________________________________
users mailing list
users@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/users


#4

I see it nowhere.

I know at a later stage the ids in "sources[]" coincide with the
ssrcs. There is an id in sources. I assume this will become is the
ssrc for the mixed channel?

Yes, the SSRC in sources[] should be the SSRC used by the bridge for the mix. Maybe Brian or someone else who has been using the mixer mode recently can confirm that it still works.

In fact, when I patch in a second
channel, the same id that I previously had in "sources[]" appears in
"ssrcs[]" redundantly.

No sure about this one. It should contain the list of SSRCs received by the bridge on this channel.

Regards,
Boris

···

On 15/07/16 10:16, Oliver Hausler wrote: