[mirotalksfu] - update mediasoup client to latest

main
Miroslav Pejic 4 years ago
parent 48309b3357
commit f842d82313

@ -205,6 +205,8 @@ httpsServer.listen(config.listenPort, () => {
async function createWorkers() { async function createWorkers() {
let { numWorkers } = config.mediasoup; let { numWorkers } = config.mediasoup;
log.debug('WORKERS:', numWorkers);
for (let i = 0; i < numWorkers; i++) { for (let i = 0; i < numWorkers; i++) {
let worker = await mediasoup.createWorker({ let worker = await mediasoup.createWorker({
logLevel: config.mediasoup.worker.logLevel, logLevel: config.mediasoup.worker.logLevel,

@ -21,7 +21,7 @@
"express": "4.17.1", "express": "4.17.1",
"httpolyglot": "0.1.2", "httpolyglot": "0.1.2",
"mediasoup": "3.9.2", "mediasoup": "3.9.2",
"mediasoup-client": "3.6.43", "mediasoup-client": "3.6.45",
"ngrok": "4.2.2", "ngrok": "4.2.2",
"socket.io": "4.3.2", "socket.io": "4.3.2",
"swagger-ui-express": "4.1.6", "swagger-ui-express": "4.1.6",
@ -29,7 +29,7 @@
"yamljs": "0.3.0" "yamljs": "0.3.0"
}, },
"devDependencies": { "devDependencies": {
"node-fetch": "3.0.0", "node-fetch": "3.1.0",
"prettier": "2.4.1" "prettier": "2.4.1"
} }
} }

@ -5020,6 +5020,9 @@
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities), audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities), video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
}; };
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
this._forcedLocalDtlsRole = dtlsParameters.role === 'server' ? 'client' : 'server';
}
this._pc = new RTCPeerConnection( this._pc = new RTCPeerConnection(
Object.assign( Object.assign(
{ {
@ -5086,6 +5089,7 @@
return this._pc.getStats(); return this._pc.getStats();
} }
async send({ track, encodings, codecOptions, codec }) { async send({ track, encodings, codecOptions, codec }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id); logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
if (codec) { if (codec) {
@ -5103,8 +5107,13 @@
{}, {},
); );
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs); sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
if (track.kind === 'video' && encodings && encodings.length > 1) { if (track.kind === 'video' && encodings && encodings.length > 1) {
logger.debug('send() | enabling simulcast'); logger.debug('send() | enabling simulcast');
localSdpObject = sdpTransform.parse(offer.sdp); localSdpObject = sdpTransform.parse(offer.sdp);
@ -5207,6 +5216,7 @@
throw new errors_1.UnsupportedError('not implemented'); throw new errors_1.UnsupportedError('not implemented');
} }
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) { async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
const options = { const options = {
negotiated: true, negotiated: true,
@ -5227,8 +5237,13 @@
const offer = await this._pc.createOffer(); const offer = await this._pc.createOffer();
const localSdpObject = sdpTransform.parse(offer.sdp); const localSdpObject = sdpTransform.parse(offer.sdp);
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application'); const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer); logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
await this._pc.setLocalDescription(offer); await this._pc.setLocalDescription(offer);
this._remoteSdp.sendSctpAssociation({ offerMediaObject }); this._remoteSdp.sendSctpAssociation({ offerMediaObject });
@ -5246,6 +5261,7 @@
return { dataChannel, sctpStreamParameters }; return { dataChannel, sctpStreamParameters };
} }
async receive({ trackId, kind, rtpParameters }) { async receive({ trackId, kind, rtpParameters }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind); logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
const localId = trackId; const localId = trackId;
@ -5271,8 +5287,13 @@
answerMediaObject, answerMediaObject,
}); });
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) }; answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer); logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
await this._pc.setLocalDescription(answer); await this._pc.setLocalDescription(answer);
const stream = this._pc.getRemoteStreams().find((s) => s.id === streamId); const stream = this._pc.getRemoteStreams().find((s) => s.id === streamId);
@ -5313,6 +5334,7 @@
throw new errors_1.UnsupportedError('not implemented'); throw new errors_1.UnsupportedError('not implemented');
} }
async receiveDataChannel({ sctpStreamParameters, label, protocol }) { async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters; const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
const options = { const options = {
@ -5336,7 +5358,11 @@
const answer = await this._pc.createAnswer(); const answer = await this._pc.createAnswer();
if (!this._transportReady) { if (!this._transportReady) {
const localSdpObject = sdpTransform.parse(answer.sdp); const localSdpObject = sdpTransform.parse(answer.sdp);
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
} }
logger.debug( logger.debug(
'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', 'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]',
@ -5535,6 +5561,9 @@
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities), audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities), video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
}; };
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
this._forcedLocalDtlsRole = dtlsParameters.role === 'server' ? 'client' : 'server';
}
this._pc = new RTCPeerConnection( this._pc = new RTCPeerConnection(
Object.assign( Object.assign(
{ {
@ -5601,6 +5630,7 @@
return this._pc.getStats(); return this._pc.getStats();
} }
async send({ track, encodings, codecOptions, codec }) { async send({ track, encodings, codecOptions, codec }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id); logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
if (codec) { if (codec) {
@ -5618,8 +5648,13 @@
{}, {},
); );
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs); sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
if (track.kind === 'video' && encodings && encodings.length > 1) { if (track.kind === 'video' && encodings && encodings.length > 1) {
logger.debug('send() | enabling simulcast'); logger.debug('send() | enabling simulcast');
localSdpObject = sdpTransform.parse(offer.sdp); localSdpObject = sdpTransform.parse(offer.sdp);
@ -5750,6 +5785,7 @@
return rtpSender.getStats(); return rtpSender.getStats();
} }
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) { async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
const options = { const options = {
negotiated: true, negotiated: true,
@ -5770,8 +5806,13 @@
const offer = await this._pc.createOffer(); const offer = await this._pc.createOffer();
const localSdpObject = sdpTransform.parse(offer.sdp); const localSdpObject = sdpTransform.parse(offer.sdp);
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application'); const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer); logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
await this._pc.setLocalDescription(offer); await this._pc.setLocalDescription(offer);
this._remoteSdp.sendSctpAssociation({ offerMediaObject }); this._remoteSdp.sendSctpAssociation({ offerMediaObject });
@ -5789,6 +5830,7 @@
return { dataChannel, sctpStreamParameters }; return { dataChannel, sctpStreamParameters };
} }
async receive({ trackId, kind, rtpParameters }) { async receive({ trackId, kind, rtpParameters }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind); logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
const localId = trackId; const localId = trackId;
@ -5813,8 +5855,13 @@
answerMediaObject, answerMediaObject,
}); });
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) }; answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer); logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
await this._pc.setLocalDescription(answer); await this._pc.setLocalDescription(answer);
const rtpReceiver = this._pc.getReceivers().find((r) => r.track && r.track.id === localId); const rtpReceiver = this._pc.getReceivers().find((r) => r.track && r.track.id === localId);
@ -5860,6 +5907,7 @@
return rtpReceiver.getStats(); return rtpReceiver.getStats();
} }
async receiveDataChannel({ sctpStreamParameters, label, protocol }) { async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters; const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
const options = { const options = {
@ -5883,7 +5931,11 @@
const answer = await this._pc.createAnswer(); const answer = await this._pc.createAnswer();
if (!this._transportReady) { if (!this._transportReady) {
const localSdpObject = sdpTransform.parse(answer.sdp); const localSdpObject = sdpTransform.parse(answer.sdp);
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
} }
logger.debug( logger.debug(
'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', 'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]',
@ -6075,6 +6127,9 @@
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities), audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities), video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
}; };
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
this._forcedLocalDtlsRole = dtlsParameters.role === 'server' ? 'client' : 'server';
}
this._pc = new RTCPeerConnection( this._pc = new RTCPeerConnection(
Object.assign( Object.assign(
{ {
@ -6141,6 +6196,7 @@
return this._pc.getStats(); return this._pc.getStats();
} }
async send({ track, encodings, codecOptions, codec }) { async send({ track, encodings, codecOptions, codec }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id); logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind], {}); const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind], {});
@ -6160,8 +6216,13 @@
let offer = await this._pc.createOffer(); let offer = await this._pc.createOffer();
let localSdpObject = sdpTransform.parse(offer.sdp); let localSdpObject = sdpTransform.parse(offer.sdp);
let offerMediaObject; let offerMediaObject;
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
if (encodings && encodings.length > 1) { if (encodings && encodings.length > 1) {
logger.debug('send() | enabling legacy simulcast'); logger.debug('send() | enabling legacy simulcast');
localSdpObject = sdpTransform.parse(offer.sdp); localSdpObject = sdpTransform.parse(offer.sdp);
@ -6312,6 +6373,7 @@
return transceiver.sender.getStats(); return transceiver.sender.getStats();
} }
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) { async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
const options = { const options = {
negotiated: true, negotiated: true,
@ -6332,8 +6394,13 @@
const offer = await this._pc.createOffer(); const offer = await this._pc.createOffer();
const localSdpObject = sdpTransform.parse(offer.sdp); const localSdpObject = sdpTransform.parse(offer.sdp);
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application'); const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer); logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
await this._pc.setLocalDescription(offer); await this._pc.setLocalDescription(offer);
this._remoteSdp.sendSctpAssociation({ offerMediaObject }); this._remoteSdp.sendSctpAssociation({ offerMediaObject });
@ -6351,6 +6418,7 @@
return { dataChannel, sctpStreamParameters }; return { dataChannel, sctpStreamParameters };
} }
async receive({ trackId, kind, rtpParameters }) { async receive({ trackId, kind, rtpParameters }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind); logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size); const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
@ -6374,8 +6442,13 @@
answerMediaObject, answerMediaObject,
}); });
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) }; answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer); logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
await this._pc.setLocalDescription(answer); await this._pc.setLocalDescription(answer);
const transceiver = this._pc.getTransceivers().find((t) => t.mid === localId); const transceiver = this._pc.getTransceivers().find((t) => t.mid === localId);
@ -6421,6 +6494,7 @@
return transceiver.receiver.getStats(); return transceiver.receiver.getStats();
} }
async receiveDataChannel({ sctpStreamParameters, label, protocol }) { async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters; const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
const options = { const options = {
@ -6444,7 +6518,11 @@
const answer = await this._pc.createAnswer(); const answer = await this._pc.createAnswer();
if (!this._transportReady) { if (!this._transportReady) {
const localSdpObject = sdpTransform.parse(answer.sdp); const localSdpObject = sdpTransform.parse(answer.sdp);
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
} }
logger.debug( logger.debug(
'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', 'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]',
@ -6637,6 +6715,9 @@
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities), audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities), video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
}; };
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
this._forcedLocalDtlsRole = dtlsParameters.role === 'server' ? 'client' : 'server';
}
this._pc = new RTCPeerConnection( this._pc = new RTCPeerConnection(
Object.assign( Object.assign(
{ {
@ -6703,6 +6784,7 @@
return this._pc.getStats(); return this._pc.getStats();
} }
async send({ track, encodings, codecOptions, codec }) { async send({ track, encodings, codecOptions, codec }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id); logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
if (encodings && encodings.length > 1) { if (encodings && encodings.length > 1) {
@ -6728,8 +6810,13 @@
let offer = await this._pc.createOffer(); let offer = await this._pc.createOffer();
let localSdpObject = sdpTransform.parse(offer.sdp); let localSdpObject = sdpTransform.parse(offer.sdp);
let offerMediaObject; let offerMediaObject;
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
// Special case for VP9 with SVC. // Special case for VP9 with SVC.
let hackVp9Svc = false; let hackVp9Svc = false;
const layers = scalabilityModes_1.parse((encodings || [{}])[0].scalabilityMode); const layers = scalabilityModes_1.parse((encodings || [{}])[0].scalabilityMode);
@ -6863,6 +6950,7 @@
return transceiver.sender.getStats(); return transceiver.sender.getStats();
} }
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) { async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
const options = { const options = {
negotiated: true, negotiated: true,
@ -6882,8 +6970,13 @@
const offer = await this._pc.createOffer(); const offer = await this._pc.createOffer();
const localSdpObject = sdpTransform.parse(offer.sdp); const localSdpObject = sdpTransform.parse(offer.sdp);
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application'); const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer); logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
await this._pc.setLocalDescription(offer); await this._pc.setLocalDescription(offer);
this._remoteSdp.sendSctpAssociation({ offerMediaObject }); this._remoteSdp.sendSctpAssociation({ offerMediaObject });
@ -6901,6 +6994,7 @@
return { dataChannel, sctpStreamParameters }; return { dataChannel, sctpStreamParameters };
} }
async receive({ trackId, kind, rtpParameters }) { async receive({ trackId, kind, rtpParameters }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind); logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size); const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
@ -6924,8 +7018,13 @@
answerMediaObject, answerMediaObject,
}); });
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) }; answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer); logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
await this._pc.setLocalDescription(answer); await this._pc.setLocalDescription(answer);
const transceiver = this._pc.getTransceivers().find((t) => t.mid === localId); const transceiver = this._pc.getTransceivers().find((t) => t.mid === localId);
@ -6985,6 +7084,7 @@
return transceiver.receiver.getStats(); return transceiver.receiver.getStats();
} }
async receiveDataChannel({ sctpStreamParameters, label, protocol }) { async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters; const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
const options = { const options = {
@ -7007,7 +7107,11 @@
const answer = await this._pc.createAnswer(); const answer = await this._pc.createAnswer();
if (!this._transportReady) { if (!this._transportReady) {
const localSdpObject = sdpTransform.parse(answer.sdp); const localSdpObject = sdpTransform.parse(answer.sdp);
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
} }
logger.debug( logger.debug(
'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', 'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]',
@ -7892,7 +7996,7 @@
const localSdpObject = sdpTransform.parse(offer.sdp); const localSdpObject = sdpTransform.parse(offer.sdp);
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application'); const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
if (!this._transportReady) if (!this._transportReady)
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({ localDtlsRole: 'client', localSdpObject });
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer); logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
await this._pc.setLocalDescription(offer); await this._pc.setLocalDescription(offer);
this._remoteSdp.sendSctpAssociation({ offerMediaObject }); this._remoteSdp.sendSctpAssociation({ offerMediaObject });
@ -8243,6 +8347,9 @@
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities), audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities), video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
}; };
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
this._forcedLocalDtlsRole = dtlsParameters.role === 'server' ? 'client' : 'server';
}
this._pc = new RTCPeerConnection( this._pc = new RTCPeerConnection(
Object.assign( Object.assign(
{ {
@ -8309,6 +8416,7 @@
return this._pc.getStats(); return this._pc.getStats();
} }
async send({ track, encodings, codecOptions, codec }) { async send({ track, encodings, codecOptions, codec }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id); logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
if (codec) { if (codec) {
@ -8326,8 +8434,13 @@
{}, {},
); );
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs); sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
if (track.kind === 'video' && encodings && encodings.length > 1) { if (track.kind === 'video' && encodings && encodings.length > 1) {
logger.debug('send() | enabling simulcast'); logger.debug('send() | enabling simulcast');
localSdpObject = sdpTransform.parse(offer.sdp); localSdpObject = sdpTransform.parse(offer.sdp);
@ -8431,6 +8544,7 @@
throw new errors_1.UnsupportedError('not implemented'); throw new errors_1.UnsupportedError('not implemented');
} }
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) { async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
const options = { const options = {
negotiated: true, negotiated: true,
@ -8451,8 +8565,13 @@
const offer = await this._pc.createOffer(); const offer = await this._pc.createOffer();
const localSdpObject = sdpTransform.parse(offer.sdp); const localSdpObject = sdpTransform.parse(offer.sdp);
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application'); const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer); logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
await this._pc.setLocalDescription(offer); await this._pc.setLocalDescription(offer);
this._remoteSdp.sendSctpAssociation({ offerMediaObject }); this._remoteSdp.sendSctpAssociation({ offerMediaObject });
@ -8470,6 +8589,7 @@
return { dataChannel, sctpStreamParameters }; return { dataChannel, sctpStreamParameters };
} }
async receive({ trackId, kind, rtpParameters }) { async receive({ trackId, kind, rtpParameters }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind); logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
const localId = trackId; const localId = trackId;
@ -8503,8 +8623,13 @@
answerMediaObject, answerMediaObject,
}); });
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) }; answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer); logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
await this._pc.setLocalDescription(answer); await this._pc.setLocalDescription(answer);
const stream = this._pc.getRemoteStreams().find((s) => s.id === streamId); const stream = this._pc.getRemoteStreams().find((s) => s.id === streamId);
@ -8545,6 +8670,7 @@
throw new errors_1.UnsupportedError('not implemented'); throw new errors_1.UnsupportedError('not implemented');
} }
async receiveDataChannel({ sctpStreamParameters, label, protocol }) { async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters; const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
const options = { const options = {
@ -8568,7 +8694,11 @@
const answer = await this._pc.createAnswer(); const answer = await this._pc.createAnswer();
if (!this._transportReady) { if (!this._transportReady) {
const localSdpObject = sdpTransform.parse(answer.sdp); const localSdpObject = sdpTransform.parse(answer.sdp);
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
} }
logger.debug( logger.debug(
'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', 'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]',
@ -8767,6 +8897,9 @@
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities), audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities), video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
}; };
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
this._forcedLocalDtlsRole = dtlsParameters.role === 'server' ? 'client' : 'server';
}
this._pc = new RTCPeerConnection( this._pc = new RTCPeerConnection(
Object.assign( Object.assign(
{ {
@ -8832,6 +8965,7 @@
return this._pc.getStats(); return this._pc.getStats();
} }
async send({ track, encodings, codecOptions, codec }) { async send({ track, encodings, codecOptions, codec }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id); logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
if (codec) { if (codec) {
@ -8849,8 +8983,13 @@
{}, {},
); );
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs); sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
if (track.kind === 'video' && encodings && encodings.length > 1) { if (track.kind === 'video' && encodings && encodings.length > 1) {
logger.debug('send() | enabling simulcast'); logger.debug('send() | enabling simulcast');
localSdpObject = sdpTransform.parse(offer.sdp); localSdpObject = sdpTransform.parse(offer.sdp);
@ -8979,6 +9118,7 @@
return rtpSender.getStats(); return rtpSender.getStats();
} }
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) { async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
const options = { const options = {
negotiated: true, negotiated: true,
@ -8998,8 +9138,13 @@
const offer = await this._pc.createOffer(); const offer = await this._pc.createOffer();
const localSdpObject = sdpTransform.parse(offer.sdp); const localSdpObject = sdpTransform.parse(offer.sdp);
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application'); const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer); logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
await this._pc.setLocalDescription(offer); await this._pc.setLocalDescription(offer);
this._remoteSdp.sendSctpAssociation({ offerMediaObject }); this._remoteSdp.sendSctpAssociation({ offerMediaObject });
@ -9017,6 +9162,7 @@
return { dataChannel, sctpStreamParameters }; return { dataChannel, sctpStreamParameters };
} }
async receive({ trackId, kind, rtpParameters }) { async receive({ trackId, kind, rtpParameters }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind); logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
const localId = trackId; const localId = trackId;
@ -9041,8 +9187,13 @@
answerMediaObject, answerMediaObject,
}); });
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) }; answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer); logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
await this._pc.setLocalDescription(answer); await this._pc.setLocalDescription(answer);
const rtpReceiver = this._pc.getReceivers().find((r) => r.track && r.track.id === localId); const rtpReceiver = this._pc.getReceivers().find((r) => r.track && r.track.id === localId);
@ -9088,6 +9239,7 @@
// Unimplemented. // Unimplemented.
} }
async receiveDataChannel({ sctpStreamParameters, label, protocol }) { async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters; const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
const options = { const options = {
@ -9110,7 +9262,11 @@
const answer = await this._pc.createAnswer(); const answer = await this._pc.createAnswer();
if (!this._transportReady) { if (!this._transportReady) {
const localSdpObject = sdpTransform.parse(answer.sdp); const localSdpObject = sdpTransform.parse(answer.sdp);
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
} }
logger.debug( logger.debug(
'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', 'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]',
@ -9300,6 +9456,9 @@
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities), audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities), video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
}; };
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
this._forcedLocalDtlsRole = dtlsParameters.role === 'server' ? 'client' : 'server';
}
this._pc = new RTCPeerConnection( this._pc = new RTCPeerConnection(
Object.assign( Object.assign(
{ {
@ -9365,6 +9524,7 @@
return this._pc.getStats(); return this._pc.getStats();
} }
async send({ track, encodings, codecOptions, codec }) { async send({ track, encodings, codecOptions, codec }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id); logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind], {}); const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind], {});
@ -9384,8 +9544,13 @@
let offer = await this._pc.createOffer(); let offer = await this._pc.createOffer();
let localSdpObject = sdpTransform.parse(offer.sdp); let localSdpObject = sdpTransform.parse(offer.sdp);
let offerMediaObject; let offerMediaObject;
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
if (encodings && encodings.length > 1) { if (encodings && encodings.length > 1) {
logger.debug('send() | enabling legacy simulcast'); logger.debug('send() | enabling legacy simulcast');
localSdpObject = sdpTransform.parse(offer.sdp); localSdpObject = sdpTransform.parse(offer.sdp);
@ -9500,6 +9665,7 @@
return transceiver.sender.getStats(); return transceiver.sender.getStats();
} }
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) { async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
var _a;
this._assertSendDirection(); this._assertSendDirection();
const options = { const options = {
negotiated: true, negotiated: true,
@ -9519,8 +9685,13 @@
const offer = await this._pc.createOffer(); const offer = await this._pc.createOffer();
const localSdpObject = sdpTransform.parse(offer.sdp); const localSdpObject = sdpTransform.parse(offer.sdp);
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application'); const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'server', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer); logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
await this._pc.setLocalDescription(offer); await this._pc.setLocalDescription(offer);
this._remoteSdp.sendSctpAssociation({ offerMediaObject }); this._remoteSdp.sendSctpAssociation({ offerMediaObject });
@ -9538,6 +9709,7 @@
return { dataChannel, sctpStreamParameters }; return { dataChannel, sctpStreamParameters };
} }
async receive({ trackId, kind, rtpParameters }) { async receive({ trackId, kind, rtpParameters }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind); logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size); const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
@ -9561,8 +9733,13 @@
answerMediaObject, answerMediaObject,
}); });
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) }; answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
if (!this._transportReady) if (!this._transportReady) {
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
}
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer); logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
await this._pc.setLocalDescription(answer); await this._pc.setLocalDescription(answer);
const transceiver = this._pc.getTransceivers().find((t) => t.mid === localId); const transceiver = this._pc.getTransceivers().find((t) => t.mid === localId);
@ -9622,6 +9799,7 @@
return transceiver.receiver.getStats(); return transceiver.receiver.getStats();
} }
async receiveDataChannel({ sctpStreamParameters, label, protocol }) { async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
var _a;
this._assertRecvDirection(); this._assertRecvDirection();
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters; const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
const options = { const options = {
@ -9644,7 +9822,11 @@
const answer = await this._pc.createAnswer(); const answer = await this._pc.createAnswer();
if (!this._transportReady) { if (!this._transportReady) {
const localSdpObject = sdpTransform.parse(answer.sdp); const localSdpObject = sdpTransform.parse(answer.sdp);
await this._setupTransport({ localDtlsRole: 'client', localSdpObject }); await this._setupTransport({
localDtlsRole:
(_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
localSdpObject,
});
} }
logger.debug( logger.debug(
'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', 'receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]',
@ -11165,7 +11347,7 @@
/** /**
* Expose mediasoup-client version. * Expose mediasoup-client version.
*/ */
exports.version = '3.6.43'; exports.version = '3.6.45';
/** /**
* Expose parseScalabilityMode() function. * Expose parseScalabilityMode() function.
*/ */

Loading…
Cancel
Save