mediasoup-client 3.6.47 → 3.6.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Transport.d.ts +3 -0
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +110 -39
- package/lib/handlers/Chrome55.d.ts +1 -1
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +42 -28
- package/lib/handlers/Chrome67.d.ts +1 -1
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +45 -30
- package/lib/handlers/Chrome70.d.ts +1 -1
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +42 -29
- package/lib/handlers/Chrome74.d.ts +1 -1
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +45 -29
- package/lib/handlers/Edge11.d.ts +1 -1
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +28 -20
- package/lib/handlers/FakeHandler.d.ts +1 -1
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +13 -10
- package/lib/handlers/Firefox60.d.ts +1 -1
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +45 -30
- package/lib/handlers/HandlerInterface.d.ts +1 -1
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative.d.ts +1 -1
- package/lib/handlers/ReactNative.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +48 -34
- package/lib/handlers/Safari11.d.ts +1 -1
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +43 -30
- package/lib/handlers/Safari12.d.ts +1 -1
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +42 -29
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.js +0 -2
- package/package.json +10 -10
- package/src/Transport.ts +162 -58
- package/src/handlers/Chrome55.ts +52 -31
- package/src/handlers/Chrome67.ts +54 -33
- package/src/handlers/Chrome70.ts +52 -32
- package/src/handlers/Chrome74.ts +56 -32
- package/src/handlers/Edge11.ts +39 -25
- package/src/handlers/FakeHandler.ts +18 -10
- package/src/handlers/Firefox60.ts +54 -33
- package/src/handlers/HandlerInterface.ts +2 -2
- package/src/handlers/ReactNative.ts +59 -38
- package/src/handlers/Safari11.ts +54 -33
- package/src/handlers/Safari12.ts +52 -32
- package/src/ortc.ts +0 -2
package/src/handlers/Chrome67.ts
CHANGED
|
@@ -657,24 +657,31 @@ export class Chrome67 extends HandlerInterface
|
|
|
657
657
|
}
|
|
658
658
|
|
|
659
659
|
async receive(
|
|
660
|
-
|
|
661
|
-
|
|
660
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
661
|
+
optionsList: HandlerReceiveOptions[]
|
|
662
|
+
) : Promise<HandlerReceiveResult[]>
|
|
662
663
|
{
|
|
663
664
|
this._assertRecvDirection();
|
|
664
665
|
|
|
665
|
-
|
|
666
|
+
const results: HandlerReceiveResult[] = [];
|
|
666
667
|
|
|
667
|
-
const
|
|
668
|
-
|
|
668
|
+
for (const options of optionsList)
|
|
669
|
+
{
|
|
670
|
+
const { trackId, kind, rtpParameters } = options;
|
|
669
671
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
672
|
+
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
|
|
673
|
+
|
|
674
|
+
const mid = kind;
|
|
675
|
+
|
|
676
|
+
this._remoteSdp!.receive(
|
|
677
|
+
{
|
|
678
|
+
mid,
|
|
679
|
+
kind,
|
|
680
|
+
offerRtpParameters : rtpParameters,
|
|
681
|
+
streamId : rtpParameters.rtcp!.cname!,
|
|
682
|
+
trackId
|
|
683
|
+
});
|
|
684
|
+
}
|
|
678
685
|
|
|
679
686
|
const offer = { type: 'offer', sdp: this._remoteSdp!.getSdp() };
|
|
680
687
|
|
|
@@ -686,16 +693,22 @@ export class Chrome67 extends HandlerInterface
|
|
|
686
693
|
|
|
687
694
|
let answer = await this._pc.createAnswer();
|
|
688
695
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
689
|
-
const answerMediaObject = localSdpObject.media
|
|
690
|
-
.find((m: any) => String(m.mid) === mid);
|
|
691
696
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
697
|
+
for (const options of optionsList)
|
|
698
|
+
{
|
|
699
|
+
const { kind, rtpParameters } = options;
|
|
700
|
+
const mid = kind;
|
|
701
|
+
const answerMediaObject = localSdpObject.media
|
|
702
|
+
.find((m: any) => String(m.mid) === mid);
|
|
703
|
+
|
|
704
|
+
// May need to modify codec parameters in the answer based on codec
|
|
705
|
+
// parameters in the offer.
|
|
706
|
+
sdpCommonUtils.applyCodecParameters(
|
|
707
|
+
{
|
|
708
|
+
offerRtpParameters : rtpParameters,
|
|
709
|
+
answerMediaObject
|
|
710
|
+
});
|
|
711
|
+
}
|
|
699
712
|
|
|
700
713
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
701
714
|
|
|
@@ -714,20 +727,28 @@ export class Chrome67 extends HandlerInterface
|
|
|
714
727
|
|
|
715
728
|
await this._pc.setLocalDescription(answer);
|
|
716
729
|
|
|
717
|
-
const
|
|
718
|
-
|
|
730
|
+
for (const options of optionsList)
|
|
731
|
+
{
|
|
732
|
+
const { kind, trackId, rtpParameters } = options;
|
|
733
|
+
const localId = trackId;
|
|
734
|
+
const mid = kind;
|
|
735
|
+
const rtpReceiver = this._pc.getReceivers()
|
|
736
|
+
.find((r: RTCRtpReceiver) => r.track && r.track.id === localId);
|
|
719
737
|
|
|
720
|
-
|
|
721
|
-
|
|
738
|
+
if (!rtpReceiver)
|
|
739
|
+
throw new Error('new RTCRtpReceiver not');
|
|
722
740
|
|
|
723
|
-
|
|
724
|
-
|
|
741
|
+
// Insert into the map.
|
|
742
|
+
this._mapRecvLocalIdInfo.set(localId, { mid, rtpParameters, rtpReceiver });
|
|
725
743
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
744
|
+
results.push({
|
|
745
|
+
localId,
|
|
746
|
+
track : rtpReceiver.track,
|
|
747
|
+
rtpReceiver
|
|
748
|
+
});
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
return results;
|
|
731
752
|
}
|
|
732
753
|
|
|
733
754
|
async stopReceiving(localId: string): Promise<void>
|
package/src/handlers/Chrome70.ts
CHANGED
|
@@ -663,23 +663,30 @@ export class Chrome70 extends HandlerInterface
|
|
|
663
663
|
}
|
|
664
664
|
|
|
665
665
|
async receive(
|
|
666
|
-
|
|
667
|
-
): Promise<HandlerReceiveResult>
|
|
666
|
+
optionsList: HandlerReceiveOptions[]
|
|
667
|
+
) : Promise<HandlerReceiveResult[]>
|
|
668
668
|
{
|
|
669
669
|
this._assertRecvDirection();
|
|
670
670
|
|
|
671
|
-
|
|
671
|
+
const results: HandlerReceiveResult[] = [];
|
|
672
672
|
|
|
673
|
-
const
|
|
673
|
+
for (const options of optionsList)
|
|
674
|
+
{
|
|
675
|
+
const { trackId, kind, rtpParameters } = options;
|
|
674
676
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
677
|
+
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
|
|
678
|
+
|
|
679
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
680
|
+
|
|
681
|
+
this._remoteSdp!.receive(
|
|
682
|
+
{
|
|
683
|
+
mid : localId,
|
|
684
|
+
kind,
|
|
685
|
+
offerRtpParameters : rtpParameters,
|
|
686
|
+
streamId : rtpParameters.rtcp!.cname!,
|
|
687
|
+
trackId
|
|
688
|
+
});
|
|
689
|
+
}
|
|
683
690
|
|
|
684
691
|
const offer = { type: 'offer', sdp: this._remoteSdp!.getSdp() };
|
|
685
692
|
|
|
@@ -691,16 +698,22 @@ export class Chrome70 extends HandlerInterface
|
|
|
691
698
|
|
|
692
699
|
let answer = await this._pc.createAnswer();
|
|
693
700
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
694
|
-
const answerMediaObject = localSdpObject.media
|
|
695
|
-
.find((m: any) => String(m.mid) === localId);
|
|
696
701
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
702
|
+
for (const options of optionsList)
|
|
703
|
+
{
|
|
704
|
+
const { rtpParameters } = options;
|
|
705
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
706
|
+
const answerMediaObject = localSdpObject.media
|
|
707
|
+
.find((m: any) => String(m.mid) === localId);
|
|
708
|
+
|
|
709
|
+
// May need to modify codec parameters in the answer based on codec
|
|
710
|
+
// parameters in the offer.
|
|
711
|
+
sdpCommonUtils.applyCodecParameters(
|
|
712
|
+
{
|
|
713
|
+
offerRtpParameters : rtpParameters,
|
|
714
|
+
answerMediaObject
|
|
715
|
+
});
|
|
716
|
+
}
|
|
704
717
|
|
|
705
718
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
706
719
|
|
|
@@ -719,20 +732,27 @@ export class Chrome70 extends HandlerInterface
|
|
|
719
732
|
|
|
720
733
|
await this._pc.setLocalDescription(answer);
|
|
721
734
|
|
|
722
|
-
const
|
|
723
|
-
|
|
735
|
+
for (const options of optionsList)
|
|
736
|
+
{
|
|
737
|
+
const { rtpParameters } = options;
|
|
738
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
739
|
+
const transceiver = this._pc.getTransceivers()
|
|
740
|
+
.find((t: RTCRtpTransceiver) => t.mid === localId);
|
|
724
741
|
|
|
725
|
-
|
|
726
|
-
|
|
742
|
+
if (!transceiver)
|
|
743
|
+
throw new Error('new RTCRtpTransceiver not found');
|
|
727
744
|
|
|
728
|
-
|
|
729
|
-
|
|
745
|
+
// Store in the map.
|
|
746
|
+
this._mapMidTransceiver.set(localId, transceiver);
|
|
730
747
|
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
748
|
+
results.push({
|
|
749
|
+
localId,
|
|
750
|
+
track : transceiver.receiver.track,
|
|
751
|
+
rtpReceiver : transceiver.receiver
|
|
752
|
+
});
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
return results;
|
|
736
756
|
}
|
|
737
757
|
|
|
738
758
|
async stopReceiving(localId: string): Promise<void>
|
package/src/handlers/Chrome74.ts
CHANGED
|
@@ -649,23 +649,30 @@ export class Chrome74 extends HandlerInterface
|
|
|
649
649
|
}
|
|
650
650
|
|
|
651
651
|
async receive(
|
|
652
|
-
|
|
653
|
-
): Promise<HandlerReceiveResult>
|
|
652
|
+
optionsList: HandlerReceiveOptions[]
|
|
653
|
+
) : Promise<HandlerReceiveResult[]>
|
|
654
654
|
{
|
|
655
655
|
this._assertRecvDirection();
|
|
656
656
|
|
|
657
|
-
|
|
657
|
+
const results: HandlerReceiveResult[] = [];
|
|
658
658
|
|
|
659
|
-
const
|
|
659
|
+
for (const options of optionsList)
|
|
660
|
+
{
|
|
661
|
+
const { trackId, kind, rtpParameters } = options;
|
|
660
662
|
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
663
|
+
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
|
|
664
|
+
|
|
665
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
666
|
+
|
|
667
|
+
this._remoteSdp!.receive(
|
|
668
|
+
{
|
|
669
|
+
mid : localId,
|
|
670
|
+
kind,
|
|
671
|
+
offerRtpParameters : rtpParameters,
|
|
672
|
+
streamId : rtpParameters.rtcp!.cname!,
|
|
673
|
+
trackId
|
|
674
|
+
});
|
|
675
|
+
}
|
|
669
676
|
|
|
670
677
|
const offer = { type: 'offer', sdp: this._remoteSdp!.getSdp() };
|
|
671
678
|
|
|
@@ -677,16 +684,22 @@ export class Chrome74 extends HandlerInterface
|
|
|
677
684
|
|
|
678
685
|
let answer = await this._pc.createAnswer();
|
|
679
686
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
680
|
-
const answerMediaObject = localSdpObject.media
|
|
681
|
-
.find((m: any) => String(m.mid) === localId);
|
|
682
687
|
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
688
|
+
for (const options of optionsList)
|
|
689
|
+
{
|
|
690
|
+
const { rtpParameters } = options;
|
|
691
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
692
|
+
const answerMediaObject = localSdpObject.media
|
|
693
|
+
.find((m: any) => String(m.mid) === localId);
|
|
694
|
+
|
|
695
|
+
// May need to modify codec parameters in the answer based on codec
|
|
696
|
+
// parameters in the offer.
|
|
697
|
+
sdpCommonUtils.applyCodecParameters(
|
|
698
|
+
{
|
|
699
|
+
offerRtpParameters : rtpParameters,
|
|
700
|
+
answerMediaObject
|
|
701
|
+
});
|
|
702
|
+
}
|
|
690
703
|
|
|
691
704
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
692
705
|
|
|
@@ -705,20 +718,31 @@ export class Chrome74 extends HandlerInterface
|
|
|
705
718
|
|
|
706
719
|
await this._pc.setLocalDescription(answer);
|
|
707
720
|
|
|
708
|
-
const
|
|
709
|
-
|
|
721
|
+
for (const options of optionsList)
|
|
722
|
+
{
|
|
723
|
+
const { rtpParameters } = options;
|
|
724
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
725
|
+
const transceiver = this._pc.getTransceivers()
|
|
726
|
+
.find((t: RTCRtpTransceiver) => t.mid === localId);
|
|
710
727
|
|
|
711
|
-
|
|
712
|
-
|
|
728
|
+
if (!transceiver)
|
|
729
|
+
{
|
|
730
|
+
throw new Error('new RTCRtpTransceiver not found');
|
|
731
|
+
}
|
|
732
|
+
else
|
|
733
|
+
{
|
|
734
|
+
// Store in the map.
|
|
735
|
+
this._mapMidTransceiver.set(localId, transceiver);
|
|
713
736
|
|
|
714
|
-
|
|
715
|
-
|
|
737
|
+
results.push({
|
|
738
|
+
localId,
|
|
739
|
+
track : transceiver.receiver.track,
|
|
740
|
+
rtpReceiver : transceiver.receiver
|
|
741
|
+
});
|
|
742
|
+
}
|
|
743
|
+
}
|
|
716
744
|
|
|
717
|
-
return
|
|
718
|
-
localId,
|
|
719
|
-
track : transceiver.receiver.track,
|
|
720
|
-
rtpReceiver : transceiver.receiver
|
|
721
|
-
};
|
|
745
|
+
return results;
|
|
722
746
|
}
|
|
723
747
|
|
|
724
748
|
async stopReceiving(localId: string): Promise<void>
|
package/src/handlers/Edge11.ts
CHANGED
|
@@ -361,44 +361,58 @@ export class Edge11 extends HandlerInterface
|
|
|
361
361
|
}
|
|
362
362
|
|
|
363
363
|
async receive(
|
|
364
|
-
|
|
365
|
-
): Promise<HandlerReceiveResult>
|
|
364
|
+
optionsList: HandlerReceiveOptions[]
|
|
365
|
+
) : Promise<HandlerReceiveResult[]>
|
|
366
366
|
{
|
|
367
|
-
|
|
367
|
+
const results: HandlerReceiveResult[] = [];
|
|
368
|
+
|
|
369
|
+
for (const options of optionsList)
|
|
370
|
+
{
|
|
371
|
+
const { trackId, kind } = options;
|
|
372
|
+
|
|
373
|
+
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
|
|
374
|
+
}
|
|
368
375
|
|
|
369
376
|
if (!this._transportReady)
|
|
370
377
|
await this._setupTransport({ localDtlsRole: 'server' });
|
|
371
378
|
|
|
372
|
-
|
|
379
|
+
for (const options of optionsList)
|
|
380
|
+
{
|
|
381
|
+
const { trackId, kind, rtpParameters } = options;
|
|
373
382
|
|
|
374
|
-
|
|
383
|
+
logger.debug('receive() | calling new RTCRtpReceiver()');
|
|
375
384
|
|
|
376
|
-
|
|
377
|
-
{
|
|
378
|
-
logger.error('rtpReceiver "error" event [event:%o]', event);
|
|
379
|
-
});
|
|
385
|
+
const rtpReceiver = new (RTCRtpReceiver as any)(this._dtlsTransport, kind);
|
|
380
386
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
387
|
+
rtpReceiver.addEventListener('error', (event: any) =>
|
|
388
|
+
{
|
|
389
|
+
logger.error('rtpReceiver "error" event [event:%o]', event);
|
|
390
|
+
});
|
|
385
391
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
edgeRtpParameters
|
|
392
|
+
// NOTE: Convert our standard RTCRtpParameters into those that Edge
|
|
393
|
+
// expects.
|
|
394
|
+
const edgeRtpParameters =
|
|
395
|
+
edgeUtils.mangleRtpParameters(rtpParameters);
|
|
389
396
|
|
|
390
|
-
|
|
397
|
+
logger.debug(
|
|
398
|
+
'receive() | calling rtpReceiver.receive() [params:%o]',
|
|
399
|
+
edgeRtpParameters);
|
|
391
400
|
|
|
392
|
-
|
|
401
|
+
await rtpReceiver.receive(edgeRtpParameters);
|
|
393
402
|
|
|
394
|
-
|
|
395
|
-
this._rtpReceivers.set(localId, rtpReceiver);
|
|
403
|
+
const localId = trackId;
|
|
396
404
|
|
|
397
|
-
|
|
398
|
-
localId,
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
405
|
+
// Store it.
|
|
406
|
+
this._rtpReceivers.set(localId, rtpReceiver);
|
|
407
|
+
|
|
408
|
+
results.push({
|
|
409
|
+
localId,
|
|
410
|
+
track : rtpReceiver.track,
|
|
411
|
+
rtpReceiver
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
return results;
|
|
402
416
|
}
|
|
403
417
|
|
|
404
418
|
async stopReceiving(localId: string): Promise<void>
|
|
@@ -324,21 +324,29 @@ export class FakeHandler extends HandlerInterface
|
|
|
324
324
|
}
|
|
325
325
|
|
|
326
326
|
async receive(
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
): Promise<HandlerReceiveResult>
|
|
327
|
+
optionsList: HandlerReceiveOptions[]
|
|
328
|
+
) : Promise<HandlerReceiveResult[]>
|
|
330
329
|
{
|
|
331
|
-
|
|
332
|
-
await this._setupTransport({ localDtlsRole: 'client' });
|
|
330
|
+
const results: HandlerReceiveResult[] = [];
|
|
333
331
|
|
|
334
|
-
|
|
332
|
+
for (const options of optionsList)
|
|
333
|
+
{
|
|
334
|
+
const { trackId, kind } = options;
|
|
335
335
|
|
|
336
|
-
|
|
337
|
-
|
|
336
|
+
if (!this._transportReady)
|
|
337
|
+
await this._setupTransport({ localDtlsRole: 'client' });
|
|
338
338
|
|
|
339
|
-
|
|
339
|
+
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
|
|
340
|
+
|
|
341
|
+
const localId = this._nextLocalId++;
|
|
342
|
+
const track = new FakeMediaStreamTrack({ kind });
|
|
343
|
+
|
|
344
|
+
this._tracks.set(localId, track);
|
|
345
|
+
|
|
346
|
+
results.push({ localId: String(localId), track });
|
|
347
|
+
}
|
|
340
348
|
|
|
341
|
-
return
|
|
349
|
+
return results;
|
|
342
350
|
}
|
|
343
351
|
|
|
344
352
|
async stopReceiving(localId: string): Promise<void>
|
|
@@ -643,23 +643,31 @@ export class Firefox60 extends HandlerInterface
|
|
|
643
643
|
}
|
|
644
644
|
|
|
645
645
|
async receive(
|
|
646
|
-
|
|
647
|
-
|
|
646
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
647
|
+
optionsList: HandlerReceiveOptions[]
|
|
648
|
+
) : Promise<HandlerReceiveResult[]>
|
|
648
649
|
{
|
|
649
650
|
this._assertRecvDirection();
|
|
650
651
|
|
|
651
|
-
|
|
652
|
+
const results: HandlerReceiveResult[] = [];
|
|
652
653
|
|
|
653
|
-
const
|
|
654
|
+
for (const options of optionsList)
|
|
655
|
+
{
|
|
656
|
+
const { trackId, kind, rtpParameters } = options;
|
|
654
657
|
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
658
|
+
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
|
|
659
|
+
|
|
660
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
661
|
+
|
|
662
|
+
this._remoteSdp!.receive(
|
|
663
|
+
{
|
|
664
|
+
mid : localId,
|
|
665
|
+
kind,
|
|
666
|
+
offerRtpParameters : rtpParameters,
|
|
667
|
+
streamId : rtpParameters.rtcp!.cname!,
|
|
668
|
+
trackId
|
|
669
|
+
});
|
|
670
|
+
}
|
|
663
671
|
|
|
664
672
|
const offer = { type: 'offer', sdp: this._remoteSdp!.getSdp() };
|
|
665
673
|
|
|
@@ -671,18 +679,24 @@ export class Firefox60 extends HandlerInterface
|
|
|
671
679
|
|
|
672
680
|
let answer = await this._pc.createAnswer();
|
|
673
681
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
674
|
-
const answerMediaObject = localSdpObject.media
|
|
675
|
-
.find((m: any) => String(m.mid) === localId);
|
|
676
682
|
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
683
|
+
for (const options of optionsList)
|
|
684
|
+
{
|
|
685
|
+
const { rtpParameters } = options;
|
|
686
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
687
|
+
const answerMediaObject = localSdpObject.media
|
|
688
|
+
.find((m: any) => String(m.mid) === localId);
|
|
689
|
+
|
|
690
|
+
// May need to modify codec parameters in the answer based on codec
|
|
691
|
+
// parameters in the offer.
|
|
692
|
+
sdpCommonUtils.applyCodecParameters(
|
|
693
|
+
{
|
|
694
|
+
offerRtpParameters : rtpParameters,
|
|
695
|
+
answerMediaObject
|
|
696
|
+
});
|
|
684
697
|
|
|
685
|
-
|
|
698
|
+
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
699
|
+
}
|
|
686
700
|
|
|
687
701
|
if (!this._transportReady)
|
|
688
702
|
await this._setupTransport({ localDtlsRole: 'client', localSdpObject });
|
|
@@ -693,20 +707,27 @@ export class Firefox60 extends HandlerInterface
|
|
|
693
707
|
|
|
694
708
|
await this._pc.setLocalDescription(answer);
|
|
695
709
|
|
|
696
|
-
const
|
|
697
|
-
|
|
710
|
+
for (const options of optionsList)
|
|
711
|
+
{
|
|
712
|
+
const { rtpParameters } = options;
|
|
713
|
+
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
714
|
+
const transceiver = this._pc.getTransceivers()
|
|
715
|
+
.find((t: RTCRtpTransceiver) => t.mid === localId);
|
|
698
716
|
|
|
699
|
-
|
|
700
|
-
|
|
717
|
+
if (!transceiver)
|
|
718
|
+
throw new Error('new RTCRtpTransceiver not found');
|
|
701
719
|
|
|
702
|
-
|
|
703
|
-
|
|
720
|
+
// Store in the map.
|
|
721
|
+
this._mapMidTransceiver.set(localId, transceiver);
|
|
704
722
|
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
723
|
+
results.push({
|
|
724
|
+
localId,
|
|
725
|
+
track : transceiver.receiver.track,
|
|
726
|
+
rtpReceiver : transceiver.receiver
|
|
727
|
+
});
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
return results;
|
|
710
731
|
}
|
|
711
732
|
|
|
712
733
|
async stopReceiving(localId: string): Promise<void>
|
|
@@ -136,8 +136,8 @@ export abstract class HandlerInterface extends EnhancedEventEmitter
|
|
|
136
136
|
): Promise<HandlerSendDataChannelResult>;
|
|
137
137
|
|
|
138
138
|
abstract receive(
|
|
139
|
-
|
|
140
|
-
): Promise<HandlerReceiveResult
|
|
139
|
+
optionsList: HandlerReceiveOptions[]
|
|
140
|
+
) : Promise<HandlerReceiveResult[]>
|
|
141
141
|
|
|
142
142
|
abstract stopReceiving(localId: string): Promise<void>;
|
|
143
143
|
|