@@ -165,10 +165,11 @@ export default class PCTransport extends EventEmitter {
165
165
} else if ( sd . type === 'answer' ) {
166
166
const sdpParsed = parse ( sd . sdp ?? '' ) ;
167
167
sdpParsed . media . forEach ( ( media ) => {
168
+ const mid = getMidString ( media . mid ! ) ;
168
169
if ( media . type === 'audio' ) {
169
170
// mung sdp for opus bitrate settings
170
171
this . trackBitrates . some ( ( trackbr ) : boolean => {
171
- if ( ! trackbr . transceiver || media . mid != trackbr . transceiver . mid ) {
172
+ if ( ! trackbr . transceiver || mid != trackbr . transceiver . mid ) {
172
173
return false ;
173
174
}
174
175
@@ -593,6 +594,9 @@ function ensureAudioNackAndStereo(
593
594
stereoMids : string [ ] ,
594
595
nackMids : string [ ] ,
595
596
) {
597
+ // sdp-transform types don't include number however the parser outputs mids as numbers in some cases
598
+ const mid = getMidString ( media . mid ! ) ;
599
+
596
600
// found opus codec to add nack fb
597
601
let opusPayload = 0 ;
598
602
media . rtp . some ( ( rtp ) : boolean => {
@@ -610,7 +614,7 @@ function ensureAudioNackAndStereo(
610
614
}
611
615
612
616
if (
613
- nackMids . includes ( media . mid ! ) &&
617
+ nackMids . includes ( mid ) &&
614
618
! media . rtcpFb . some ( ( fb ) => fb . payload === opusPayload && fb . type === 'nack' )
615
619
) {
616
620
media . rtcpFb . push ( {
@@ -619,7 +623,7 @@ function ensureAudioNackAndStereo(
619
623
} ) ;
620
624
}
621
625
622
- if ( stereoMids . includes ( media . mid ! ) ) {
626
+ if ( stereoMids . includes ( mid ) ) {
623
627
media . fmtp . some ( ( fmtp ) : boolean => {
624
628
if ( fmtp . payload === opusPayload ) {
625
629
if ( ! fmtp . config . includes ( 'stereo=1' ) ) {
@@ -642,6 +646,7 @@ function extractStereoAndNackAudioFromOffer(offer: RTCSessionDescriptionInit): {
642
646
const sdpParsed = parse ( offer . sdp ?? '' ) ;
643
647
let opusPayload = 0 ;
644
648
sdpParsed . media . forEach ( ( media ) => {
649
+ const mid = getMidString ( media . mid ! ) ;
645
650
if ( media . type === 'audio' ) {
646
651
media . rtp . some ( ( rtp ) : boolean => {
647
652
if ( rtp . codec === 'opus' ) {
@@ -652,13 +657,13 @@ function extractStereoAndNackAudioFromOffer(offer: RTCSessionDescriptionInit): {
652
657
} ) ;
653
658
654
659
if ( media . rtcpFb ?. some ( ( fb ) => fb . payload === opusPayload && fb . type === 'nack' ) ) {
655
- nackMids . push ( media . mid ! ) ;
660
+ nackMids . push ( mid ) ;
656
661
}
657
662
658
663
media . fmtp . some ( ( fmtp ) : boolean => {
659
664
if ( fmtp . payload === opusPayload ) {
660
665
if ( fmtp . config . includes ( 'sprop-stereo=1' ) ) {
661
- stereoMids . push ( media . mid ! ) ;
666
+ stereoMids . push ( mid ) ;
662
667
}
663
668
return true ;
664
669
}
@@ -682,3 +687,7 @@ function ensureIPAddrMatchVersion(media: MediaDescription) {
682
687
}
683
688
}
684
689
}
690
+
691
+ function getMidString ( mid : string | number ) {
692
+ return typeof mid === 'number' ? mid . toFixed ( 0 ) : mid ;
693
+ }
0 commit comments