Skip to content

Commit

Permalink
ref(ssrc info): get rid of 'ssrc' and 'group' roots
Browse files Browse the repository at this point in the history
Removes 'ssrc' and 'group' root Objects from "ssrc info" structure.
Also removed redundant 'primarySSRC' from the group.
Do not split and join back and forth the SSRCs, but store them as
numbers.
  • Loading branch information
paweldomas committed Feb 27, 2017
1 parent d68829f commit 76229eb
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 53 deletions.
5 changes: 3 additions & 2 deletions JitsiConference.js
Expand Up @@ -1037,7 +1037,7 @@ function (jingleSession, jingleOffer, now) {
this.rtc.initializeDataChannels(jingleSession.peerconnection); this.rtc.initializeDataChannels(jingleSession.peerconnection);
// Add local Tracks to the ChatRoom // Add local Tracks to the ChatRoom
this.getLocalTracks().forEach(function(localTrack) { this.getLocalTracks().forEach(function(localTrack) {
var ssrcInfo = null; let ssrcInfo = null;
/** /**
* We don't do this for Firefox because, on Firefox, we keep the * We don't do this for Firefox because, on Firefox, we keep the
* stream in the peer connection and just set 'enabled' on the * stream in the peer connection and just set 'enabled' on the
Expand Down Expand Up @@ -1068,7 +1068,8 @@ function (jingleSession, jingleOffer, now) {
ssrcInfo = { ssrcInfo = {
mtype: localTrack.getType(), mtype: localTrack.getType(),
type: "addMuted", type: "addMuted",
ssrc: localTrack.ssrc, ssrcs: localTrack.ssrc.ssrcs,
groups: localTrack.ssrc.groups,
msid: localTrack.initialMSID msid: localTrack.initialMSID
}; };
} }
Expand Down
8 changes: 5 additions & 3 deletions modules/RTC/JitsiLocalTrack.js
Expand Up @@ -377,7 +377,8 @@ JitsiLocalTrack.prototype._addStreamToConferenceAsUnmute = function () {
{ {
mtype: self.type, mtype: self.type,
type: "unmute", type: "unmute",
ssrc: self.ssrc, ssrcs: self.ssrc ? self.ssrc.ssrcs : undefined,
groups: self.ssrc ? self.ssrc.groups: undefined,
msid: self.getMSID() msid: self.getMSID()
}); });
}); });
Expand All @@ -403,7 +404,8 @@ function (successCallback, errorCallback) {
{ {
mtype: this.type, mtype: this.type,
type: "mute", type: "mute",
ssrc: this.ssrc ssrcs: this.ssrc ? this.ssrc.ssrcs : undefined,
groups: this.ssrc ? this.ssrc.groups : undefined
}); });
}; };


Expand Down Expand Up @@ -518,7 +520,7 @@ JitsiLocalTrack.prototype._setConference = function(conference) {
*/ */
JitsiLocalTrack.prototype.getSSRC = function () { JitsiLocalTrack.prototype.getSSRC = function () {
if(this.ssrc && this.ssrc.groups && this.ssrc.groups.length) if(this.ssrc && this.ssrc.groups && this.ssrc.groups.length)
return this.ssrc.groups[0].primarySSRC; return this.ssrc.groups[0].ssrcs[0];
else if(this.ssrc && this.ssrc.ssrcs && this.ssrc.ssrcs.length) else if(this.ssrc && this.ssrc.ssrcs && this.ssrc.ssrcs.length)
return this.ssrc.ssrcs[0]; return this.ssrc.ssrcs[0];
else else
Expand Down
46 changes: 21 additions & 25 deletions modules/RTC/TraceablePeerConnection.js
Expand Up @@ -740,7 +740,12 @@ function extractSSRCMap(desc) {
mLine.ssrcGroups.forEach(function (group) { mLine.ssrcGroups.forEach(function (group) {
if (typeof group.semantics !== 'undefined' && if (typeof group.semantics !== 'undefined' &&
typeof group.ssrcs !== 'undefined') { typeof group.ssrcs !== 'undefined') {
var primarySSRC = Number(group.ssrcs.split(' ')[0]); // Parse SSRCs and store as numbers
const groupSSRCs
= group.ssrcs.split(' ').map(
(ssrcStr) => { return Number(ssrcStr); });
const primarySSRC = groupSSRCs[0];
group.ssrcs = groupSSRCs;
ssrcGroups[primarySSRC] = ssrcGroups[primarySSRC] || []; ssrcGroups[primarySSRC] = ssrcGroups[primarySSRC] || [];
ssrcGroups[primarySSRC].push(group); ssrcGroups[primarySSRC].push(group);
} }
Expand All @@ -749,13 +754,12 @@ function extractSSRCMap(desc) {
mLine.ssrcs.forEach(function (ssrc) { mLine.ssrcs.forEach(function (ssrc) {
if(ssrc.attribute !== 'msid') if(ssrc.attribute !== 'msid')
return; return;
ssrcList[ssrc.value] = ssrcList[ssrc.value] || ssrcList[ssrc.value]
{groups: [], ssrcs: []}; = ssrcList[ssrc.value] || { groups: [], ssrcs: [] };
ssrcList[ssrc.value].ssrcs.push(ssrc.id); ssrcList[ssrc.value].ssrcs.push(ssrc.id);
if(ssrcGroups[ssrc.id]){ if(ssrcGroups[ssrc.id]){
ssrcGroups[ssrc.id].forEach(function (group) { ssrcGroups[ssrc.id].forEach(function (group) {
ssrcList[ssrc.value].groups.push( ssrcList[ssrc.value].groups.push(group);
{primarySSRC: ssrc.id, group: group});
}); });
} }
}); });
Expand Down Expand Up @@ -881,26 +885,23 @@ TraceablePeerConnection.prototype.addStream = function (stream, ssrcInfo) {
if (stream) if (stream)
this.peerconnection.addStream(stream); this.peerconnection.addStream(stream);
if (ssrcInfo && ssrcInfo.type === "addMuted") { if (ssrcInfo && ssrcInfo.type === "addMuted") {
this.sdpConsistency.setPrimarySsrc(ssrcInfo.ssrc.ssrcs[0]); this.sdpConsistency.setPrimarySsrc(ssrcInfo.ssrcs[0]);
const simGroup = const simGroup =
ssrcInfo.ssrc.groups.find(groupInfo => { ssrcInfo.groups.find(groupInfo => {
return groupInfo.group.semantics === "SIM"; return groupInfo.semantics === "SIM";
}); });
if (simGroup) { if (simGroup) {
const simSsrcs = SDPUtil.parseGroupSsrcs(simGroup.group); this.simulcast.setSsrcCache(simGroup.ssrcs);
this.simulcast.setSsrcCache(simSsrcs);
} }
const fidGroups = const fidGroups =
ssrcInfo.ssrc.groups.filter(groupInfo => { ssrcInfo.groups.filter(groupInfo => {
return groupInfo.group.semantics === "FID"; return groupInfo.semantics === "FID";
}); });
if (fidGroups) { if (fidGroups) {
const rtxSsrcMapping = new Map(); const rtxSsrcMapping = new Map();
fidGroups.forEach(fidGroup => { fidGroups.forEach(fidGroup => {
const fidGroupSsrcs = const primarySsrc = fidGroup.ssrcs[0];
SDPUtil.parseGroupSsrcs(fidGroup.group); const rtxSsrc = fidGroup.ssrcs[1];
const primarySsrc = fidGroupSsrcs[0];
const rtxSsrc = fidGroupSsrcs[1];
rtxSsrcMapping.set(primarySsrc, rtxSsrc); rtxSsrcMapping.set(primarySsrc, rtxSsrc);
}); });
this.rtxModifier.setSsrcCache(rtxSsrcMapping); this.rtxModifier.setSsrcCache(rtxSsrcMapping);
Expand Down Expand Up @@ -1211,10 +1212,8 @@ TraceablePeerConnection.prototype.generateNewStreamSSRCInfo = function () {
for (let i = 0; i < SIMULCAST_LAYERS; i++) { for (let i = 0; i < SIMULCAST_LAYERS; i++) {
ssrcInfo.ssrcs.push(SDPUtil.generateSsrc()); ssrcInfo.ssrcs.push(SDPUtil.generateSsrc());
} }
ssrcInfo.groups.push({ ssrcInfo.groups.push(
primarySSRC: ssrcInfo.ssrcs[0], { ssrcs: ssrcInfo.ssrcs.slice(), semantics: "SIM" });
group: {ssrcs: ssrcInfo.ssrcs.join(" "), semantics: "SIM"}});
ssrcInfo;
} else { } else {
ssrcInfo = {ssrcs: [SDPUtil.generateSsrc()], groups: []}; ssrcInfo = {ssrcs: [SDPUtil.generateSsrc()], groups: []};
} }
Expand All @@ -1229,11 +1228,8 @@ TraceablePeerConnection.prototype.generateNewStreamSSRCInfo = function () {
const rtxSsrc = SDPUtil.generateSsrc(); const rtxSsrc = SDPUtil.generateSsrc();
ssrcInfo.ssrcs.push(rtxSsrc); ssrcInfo.ssrcs.push(rtxSsrc);
ssrcInfo.groups.push({ ssrcInfo.groups.push({
primarySSRC: primarySsrc, ssrcs: [primarySsrc, rtxSsrc],
group: { semantics: "FID"
ssrcs: primarySsrc + " " + rtxSsrc,
semantics: "FID"
}
}); });
} }
} }
Expand Down
45 changes: 22 additions & 23 deletions modules/xmpp/JingleSessionPC.js
Expand Up @@ -1363,16 +1363,15 @@ export default class JingleSessionPC extends JingleSession {
ssrcObj.mtype + "\"]>description"); ssrcObj.mtype + "\"]>description");
if (!desc || !desc.length) if (!desc || !desc.length)
return; return;
ssrcObj.ssrc.ssrcs.forEach(function (ssrc) { ssrcObj.ssrcs.forEach(function (ssrc) {
const sourceNode = desc.find(">source[ssrc=\"" + const sourceNode = desc.find(">source[ssrc=\"" +
ssrc + "\"]"); ssrc + "\"]");
sourceNode.remove(); sourceNode.remove();
}); });
ssrcObj.ssrc.groups.forEach(function (group) { ssrcObj.groups.forEach(function (group) {
const groupNode = desc.find(">ssrc-group[semantics=\"" + const groupNode = desc.find(">ssrc-group[semantics=\"" +
group.group.semantics + "\"]:has(source[ssrc=\"" + group.semantics + "\"]:has(source[ssrc=\"" +
group.primarySSRC + group.ssrcs[0] + "\"])");
"\"])");
groupNode.remove(); groupNode.remove();
}); });
}); });
Expand All @@ -1386,7 +1385,7 @@ export default class JingleSessionPC extends JingleSession {
= JingleSessionPC.createDescriptionNode( = JingleSessionPC.createDescriptionNode(
jingle, ssrcObj.mtype); jingle, ssrcObj.mtype);
const cname = Math.random().toString(36).substring(2); const cname = Math.random().toString(36).substring(2);
ssrcObj.ssrc.ssrcs.forEach(function (ssrc) { ssrcObj.ssrcs.forEach(function (ssrc) {
const sourceNode const sourceNode
= desc.find(">source[ssrc=\"" + ssrc + "\"]"); = desc.find(">source[ssrc=\"" + ssrc + "\"]");
sourceNode.remove(); sourceNode.remove();
Expand All @@ -1399,18 +1398,18 @@ export default class JingleSessionPC extends JingleSession {
" value=\"" + cname + "\" name=\"cname\" />" + "</source>"; " value=\"" + cname + "\" name=\"cname\" />" + "</source>";
desc.append(sourceXML); desc.append(sourceXML);
}); });
ssrcObj.ssrc.groups.forEach(function (group) { ssrcObj.groups.forEach(function (group) {
const groupNode const groupNode
= desc.find(">ssrc-group[semantics=\"" + = desc.find(">ssrc-group[semantics=\"" +
group.group.semantics + "\"]:has(source[ssrc=\"" group.semantics + "\"]:has(source[ssrc=\""
+ group.primarySSRC + "\"])"); + group.ssrcs[0] + "\"])");
groupNode.remove(); groupNode.remove();
desc.append( desc.append(
"<ssrc-group semantics=\"" + group.group.semantics + "<ssrc-group semantics=\"" + group.semantics +
"\" xmlns=\"urn:xmpp:jingle:apps:rtp:ssma:0\">" + "\" xmlns=\"urn:xmpp:jingle:apps:rtp:ssma:0\">" +
"<source ssrc=\"" + "<source ssrc=\"" +
group.group.ssrcs.split(" ") group.ssrcs.join("\"/>" + "<source ssrc=\"") +
.join("\"/>" + "<source ssrc=\"") + "\"/>" + "\"/>" +
"</ssrc-group>"); "</ssrc-group>");
}); });
}); });
Expand All @@ -1428,20 +1427,20 @@ export default class JingleSessionPC extends JingleSession {
this.modifiedSSRCs["mute"] = []; this.modifiedSSRCs["mute"] = [];
if (ssrcs && ssrcs.length) if (ssrcs && ssrcs.length)
ssrcs.forEach(function (ssrcObj) { ssrcs.forEach(function (ssrcObj) {
ssrcObj.ssrc.ssrcs.forEach(function (ssrc) { ssrcObj.ssrcs.forEach(function (ssrc) {
const sourceNode const sourceNode
= $(jingle.tree()).find(">jingle>content[name=\"" + = $(jingle.tree()).find(">jingle>content[name=\"" +
ssrcObj.mtype + "\"]>description>source[ssrc=\"" + ssrcObj.mtype + "\"]>description>source[ssrc=\"" +
ssrc + "\"]"); ssrc + "\"]");
sourceNode.remove(); sourceNode.remove();
}); });
ssrcObj.ssrc.groups.forEach(function (group) { ssrcObj.groups.forEach(function (group) {
const groupNode const groupNode
= $(jingle.tree()).find( = $(jingle.tree()).find(
">jingle>content[name=\"" + ssrcObj.mtype + ">jingle>content[name=\"" + ssrcObj.mtype +
"\"]>description>ssrc-group[semantics=\"" + "\"]>description>ssrc-group[semantics=\"" +
group.group.semantics + "\"]:has(source[ssrc=\"" + group.semantics + "\"]:has(source[ssrc=\"" +
group.primarySSRC + "\"])"); group.ssrcs[0] + "\"])");
groupNode.remove(); groupNode.remove();
}); });
}); });
Expand All @@ -1453,7 +1452,7 @@ export default class JingleSessionPC extends JingleSession {
const desc const desc
= JingleSessionPC.createDescriptionNode( = JingleSessionPC.createDescriptionNode(
jingle, ssrcObj.mtype); jingle, ssrcObj.mtype);
ssrcObj.ssrc.ssrcs.forEach(function (ssrc) { ssrcObj.ssrcs.forEach(function (ssrc) {
const sourceNode const sourceNode
= desc.find(">source[ssrc=\"" + ssrc + "\"]"); = desc.find(">source[ssrc=\"" + ssrc + "\"]");
if (!sourceNode || !sourceNode.length) { if (!sourceNode || !sourceNode.length) {
Expand All @@ -1464,18 +1463,18 @@ export default class JingleSessionPC extends JingleSession {
"ssrc=\"" + ssrc + "\"></source>"); "ssrc=\"" + ssrc + "\"></source>");
} }
}); });
ssrcObj.ssrc.groups.forEach(function (group) { ssrcObj.groups.forEach(function (group) {
const groupNode const groupNode
= desc.find(">ssrc-group[semantics=\"" + = desc.find(">ssrc-group[semantics=\"" +
group.group.semantics + "\"]:has(source[ssrc=\"" + group.semantics + "\"]:has(source[ssrc=\"" +
group.primarySSRC + "\"])"); group.ssrcs[0] + "\"])");
if (!groupNode || !groupNode.length) { if (!groupNode || !groupNode.length) {
desc.append("<ssrc-group semantics=\"" + desc.append("<ssrc-group semantics=\"" +
group.group.semantics + group.semantics +
"\" xmlns=\"urn:xmpp:jingle:apps:rtp:ssma:0\">" + "\" xmlns=\"urn:xmpp:jingle:apps:rtp:ssma:0\">" +
"<source ssrc=\"" + "<source ssrc=\"" +
group.group.ssrcs.split(" ") group.ssrcs.join("\"/><source ssrc=\"") +
.join("\"/><source ssrc=\"") + "\"/>" + "\"/>" +
"</ssrc-group>"); "</ssrc-group>");
} }
}); });
Expand Down

0 comments on commit 76229eb

Please sign in to comment.