mirror of
https://github.com/bluenviron/mediamtx.git
synced 2025-12-26 13:01:59 -08:00
This commit is contained in:
parent
aa1822dd62
commit
dc3b5f4e57
1 changed files with 60 additions and 39 deletions
|
|
@ -108,16 +108,28 @@ const parseOffer = (sdp) => {
|
|||
return ret;
|
||||
};
|
||||
|
||||
const findFreePayloadType = (firstLine) => {
|
||||
const payloadTypes = firstLine.split(' ').slice(3);
|
||||
for (let i = 96; i <= 127; i++) {
|
||||
if (!payloadTypes.includes(i.toString())) {
|
||||
return i.toString();
|
||||
}
|
||||
}
|
||||
throw Error('unable to find a free payload type');
|
||||
};
|
||||
|
||||
const enableStereoPcmau = (section) => {
|
||||
let lines = section.split('\r\n');
|
||||
|
||||
lines[0] += ' 118';
|
||||
lines.splice(lines.length - 1, 0, 'a=rtpmap:118 PCMU/8000/2');
|
||||
lines.splice(lines.length - 1, 0, 'a=rtcp-fb:118 transport-cc');
|
||||
let payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} PCMU/8000/2`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
lines[0] += ' 119';
|
||||
lines.splice(lines.length - 1, 0, 'a=rtpmap:119 PCMA/8000/2');
|
||||
lines.splice(lines.length - 1, 0, 'a=rtcp-fb:119 transport-cc');
|
||||
payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} PCMA/8000/2`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
return lines.join('\r\n');
|
||||
};
|
||||
|
|
@ -125,35 +137,41 @@ const enableStereoPcmau = (section) => {
|
|||
const enableMultichannelOpus = (section) => {
|
||||
let lines = section.split('\r\n');
|
||||
|
||||
lines[0] += " 112";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:112 multiopus/48000/3");
|
||||
lines.splice(lines.length - 1, 0, "a=fmtp:112 channel_mapping=0,2,1;num_streams=2;coupled_streams=1");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:112 transport-cc");
|
||||
let payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} multiopus/48000/3`);
|
||||
lines.splice(lines.length - 1, 0, `a=fmtp:${payloadType} channel_mapping=0,2,1;num_streams=2;coupled_streams=1`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
lines[0] += " 113";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:113 multiopus/48000/4");
|
||||
lines.splice(lines.length - 1, 0, "a=fmtp:113 channel_mapping=0,1,2,3;num_streams=2;coupled_streams=2");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:113 transport-cc");
|
||||
payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} multiopus/48000/4`);
|
||||
lines.splice(lines.length - 1, 0, `a=fmtp:${payloadType} channel_mapping=0,1,2,3;num_streams=2;coupled_streams=2`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
lines[0] += " 114";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:114 multiopus/48000/5");
|
||||
lines.splice(lines.length - 1, 0, "a=fmtp:114 channel_mapping=0,4,1,2,3;num_streams=3;coupled_streams=2");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:114 transport-cc");
|
||||
payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} multiopus/48000/5`);
|
||||
lines.splice(lines.length - 1, 0, `a=fmtp:${payloadType} channel_mapping=0,4,1,2,3;num_streams=3;coupled_streams=2`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
lines[0] += " 115";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:115 multiopus/48000/6");
|
||||
lines.splice(lines.length - 1, 0, "a=fmtp:115 channel_mapping=0,4,1,2,3,5;num_streams=4;coupled_streams=2");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:115 transport-cc");
|
||||
payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} multiopus/48000/6`);
|
||||
lines.splice(lines.length - 1, 0, `a=fmtp:${payloadType} channel_mapping=0,4,1,2,3,5;num_streams=4;coupled_streams=2`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
lines[0] += " 116";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:116 multiopus/48000/7");
|
||||
lines.splice(lines.length - 1, 0, "a=fmtp:116 channel_mapping=0,4,1,2,3,5,6;num_streams=4;coupled_streams=4");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:116 transport-cc");
|
||||
payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} multiopus/48000/7`);
|
||||
lines.splice(lines.length - 1, 0, `a=fmtp:${payloadType} channel_mapping=0,4,1,2,3,5,6;num_streams=4;coupled_streams=4`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
lines[0] += " 117";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:117 multiopus/48000/8");
|
||||
lines.splice(lines.length - 1, 0, "a=fmtp:117 channel_mapping=0,6,1,4,5,2,3,7;num_streams=5;coupled_streams=4");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:117 transport-cc");
|
||||
payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} multiopus/48000/8`);
|
||||
lines.splice(lines.length - 1, 0, `a=fmtp:${payloadType} channel_mapping=0,6,1,4,5,2,3,7;num_streams=5;coupled_streams=4`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
return lines.join('\r\n');
|
||||
};
|
||||
|
|
@ -161,17 +179,20 @@ const enableMultichannelOpus = (section) => {
|
|||
const enableL16 = (section) => {
|
||||
let lines = section.split('\r\n');
|
||||
|
||||
lines[0] += " 120";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:120 L16/8000/2");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:120 transport-cc");
|
||||
let payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} L16/8000/2`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
lines[0] += " 121";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:121 L16/16000/2");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:121 transport-cc");
|
||||
payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} L16/16000/2`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
lines[0] += " 122";
|
||||
lines.splice(lines.length - 1, 0, "a=rtpmap:122 L16/48000/2");
|
||||
lines.splice(lines.length - 1, 0, "a=rtcp-fb:122 transport-cc");
|
||||
payloadType = findFreePayloadType(lines[0]);
|
||||
lines[0] += ` ${payloadType}`;
|
||||
lines.splice(lines.length - 1, 0, `a=rtpmap:${payloadType} L16/48000/2`);
|
||||
lines.splice(lines.length - 1, 0, `a=rtcp-fb:${payloadType} transport-cc`);
|
||||
|
||||
return lines.join('\r\n');
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue