Makes sure that we keep local video SSRC as a "recvonly" when muted.
This commit is contained in:
parent
75a822be66
commit
e0e0baf87e
|
@ -130,7 +130,9 @@ var storeLocalVideoSSRC = function (jingleIq) {
|
||||||
function generateRecvonlySSRC() {
|
function generateRecvonlySSRC() {
|
||||||
//
|
//
|
||||||
localRecvOnlySSRC =
|
localRecvOnlySSRC =
|
||||||
Math.random().toString(10).substring(2, 11);
|
localVideoSSRC ?
|
||||||
|
localVideoSSRC : Math.random().toString(10).substring(2, 11);
|
||||||
|
|
||||||
localRecvOnlyCName =
|
localRecvOnlyCName =
|
||||||
Math.random().toString(36).substring(2);
|
Math.random().toString(36).substring(2);
|
||||||
console.info(
|
console.info(
|
||||||
|
@ -175,44 +177,44 @@ var LocalSSRCReplacement = {
|
||||||
|
|
||||||
// IF we have local video SSRC stored make sure it is replaced
|
// IF we have local video SSRC stored make sure it is replaced
|
||||||
// with old SSRC
|
// with old SSRC
|
||||||
if (localVideoSSRC) {
|
var sdp = new SDP(localDescription.sdp);
|
||||||
var newSdp = new SDP(localDescription.sdp);
|
if (sdp.media.length < 2)
|
||||||
if (newSdp.media[1].indexOf("a=ssrc:") !== -1 &&
|
return;
|
||||||
!newSdp.containsSSRC(localVideoSSRC)) {
|
|
||||||
// Get new video SSRC
|
|
||||||
var map = newSdp.getMediaSsrcMap();
|
|
||||||
var videoPart = map[1];
|
|
||||||
var videoSSRCs = videoPart.ssrcs;
|
|
||||||
var newSSRC = Object.keys(videoSSRCs)[0];
|
|
||||||
|
|
||||||
console.info(
|
if (localVideoSSRC && sdp.media[1].indexOf("a=ssrc:") !== -1 &&
|
||||||
"Replacing new video SSRC: " + newSSRC +
|
!sdp.containsSSRC(localVideoSSRC)) {
|
||||||
" with " + localVideoSSRC);
|
|
||||||
|
|
||||||
localDescription.sdp =
|
console.info("Does not contain: " + localVideoSSRC + "---" + sdp.media[1]);
|
||||||
newSdp.raw.replace(
|
|
||||||
new RegExp('a=ssrc:' + newSSRC, 'g'),
|
// Get new video SSRC
|
||||||
'a=ssrc:' + localVideoSSRC);
|
var map = sdp.getMediaSsrcMap();
|
||||||
}
|
var videoPart = map[1];
|
||||||
} else {
|
var videoSSRCs = videoPart.ssrcs;
|
||||||
|
var newSSRC = Object.keys(videoSSRCs)[0];
|
||||||
|
|
||||||
|
console.info(
|
||||||
|
"Replacing new video SSRC: " + newSSRC +
|
||||||
|
" with " + localVideoSSRC);
|
||||||
|
|
||||||
|
localDescription.sdp =
|
||||||
|
sdp.raw.replace(
|
||||||
|
new RegExp('a=ssrc:' + newSSRC, 'g'),
|
||||||
|
'a=ssrc:' + localVideoSSRC);
|
||||||
|
}
|
||||||
|
else if (sdp.media[1].indexOf('a=ssrc:') === -1 &&
|
||||||
|
sdp.media[1].indexOf('a=recvonly') !== -1) {
|
||||||
// Make sure we have any SSRC for recvonly video stream
|
// Make sure we have any SSRC for recvonly video stream
|
||||||
var sdp = new SDP(localDescription.sdp);
|
if (!localRecvOnlySSRC) {
|
||||||
|
generateRecvonlySSRC();
|
||||||
if (sdp.media[1] && sdp.media[1].indexOf('a=ssrc:') === -1 &&
|
|
||||||
sdp.media[1].indexOf('a=recvonly') !== -1) {
|
|
||||||
|
|
||||||
if (!localRecvOnlySSRC) {
|
|
||||||
generateRecvonlySSRC();
|
|
||||||
}
|
|
||||||
|
|
||||||
console.info('No SSRC in video recvonly stream' +
|
|
||||||
' - adding SSRC: ' + localRecvOnlySSRC);
|
|
||||||
|
|
||||||
sdp.media[1] += 'a=ssrc:' + localRecvOnlySSRC +
|
|
||||||
' cname:' + localRecvOnlyCName + '\r\n';
|
|
||||||
|
|
||||||
localDescription.sdp = sdp.session + sdp.media.join('');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.info('No SSRC in video recvonly stream' +
|
||||||
|
' - adding SSRC: ' + localRecvOnlySSRC);
|
||||||
|
|
||||||
|
sdp.media[1] += 'a=ssrc:' + localRecvOnlySSRC +
|
||||||
|
' cname:' + localRecvOnlyCName + '\r\n';
|
||||||
|
|
||||||
|
localDescription.sdp = sdp.session + sdp.media.join('');
|
||||||
}
|
}
|
||||||
return localDescription;
|
return localDescription;
|
||||||
},
|
},
|
||||||
|
|
|
@ -75,16 +75,18 @@ SDP.prototype.getMediaSsrcMap = function() {
|
||||||
* @param ssrc the ssrc to check.
|
* @param ssrc the ssrc to check.
|
||||||
* @returns {boolean} <tt>true</tt> if this SDP contains given SSRC.
|
* @returns {boolean} <tt>true</tt> if this SDP contains given SSRC.
|
||||||
*/
|
*/
|
||||||
SDP.prototype.containsSSRC = function(ssrc) {
|
SDP.prototype.containsSSRC = function (ssrc) {
|
||||||
|
// FIXME this code is really strange - improve it if you can
|
||||||
var medias = this.getMediaSsrcMap();
|
var medias = this.getMediaSsrcMap();
|
||||||
Object.keys(medias).forEach(function(mediaindex){
|
var result = false;
|
||||||
var media = medias[mediaindex];
|
Object.keys(medias).forEach(function (mediaindex) {
|
||||||
//console.log("Check", channel, ssrc);
|
if (result)
|
||||||
if(Object.keys(media.ssrcs).indexOf(ssrc) != -1){
|
return;
|
||||||
return true;
|
if (medias[mediaindex].ssrcs[ssrc]) {
|
||||||
|
result = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return false;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
// remove iSAC and CN from SDP
|
// remove iSAC and CN from SDP
|
||||||
|
|
Loading…
Reference in New Issue