@@ -736,19 +736,25 @@ export class MembraneWebRTC {
736
736
if ( trackContext . maxBandwidth && transceiverConfig . sendEncodings )
737
737
this . applyBandwidthLimitation (
738
738
transceiverConfig . sendEncodings ,
739
- trackContext . maxBandwidth
739
+ trackContext . maxBandwidth ,
740
+ null
740
741
) ;
741
742
742
743
return transceiverConfig ;
743
744
}
744
745
745
746
private applyBandwidthLimitation (
746
747
encodings : RTCRtpEncodingParameters [ ] ,
747
- max_bandwidth : TrackBandwidthLimit
748
+ max_bandwidth : TrackBandwidthLimit ,
749
+ mediaEvent : MediaEvent | null
748
750
) {
749
751
if ( typeof max_bandwidth === "number" ) {
750
752
// non-simulcast limitation
751
- this . splitBandwidth ( encodings , ( max_bandwidth as number ) * 1024 ) ;
753
+ this . splitBandwidth (
754
+ encodings ,
755
+ ( max_bandwidth as number ) * 1024 ,
756
+ mediaEvent
757
+ ) ;
752
758
} else {
753
759
// simulcast bandwidth limit
754
760
encodings
@@ -767,7 +773,8 @@ export class MembraneWebRTC {
767
773
768
774
private splitBandwidth (
769
775
encodings : RTCRtpEncodingParameters [ ] ,
770
- bandwidth : number
776
+ bandwidth : number ,
777
+ mediaEvent : MediaEvent | null
771
778
) {
772
779
if ( bandwidth === 0 ) {
773
780
encodings . forEach ( ( encoding ) => delete encoding . maxBitrate ) ;
@@ -794,11 +801,14 @@ export class MembraneWebRTC {
794
801
) ;
795
802
const x = bandwidth / bitrate_parts ;
796
803
797
- encodings . forEach (
798
- ( value ) =>
799
- ( value . maxBitrate =
800
- x * ( firstScaleDownBy / ( value . scaleResolutionDownBy || 1 ) ) ** 2 )
801
- ) ;
804
+ encodings . forEach ( ( value ) => {
805
+ value . maxBitrate =
806
+ x * ( firstScaleDownBy / ( value . scaleResolutionDownBy || 1 ) ) ** 2 ;
807
+ if ( mediaEvent )
808
+ mediaEvent . data . data . variantBitrates [ value . rid ! ] =
809
+ value . maxBitrate / 1024 ;
810
+ } ) ;
811
+ if ( mediaEvent ) this . sendMediaEvent ( mediaEvent ) ;
802
812
}
803
813
804
814
/**
@@ -897,8 +907,18 @@ export class MembraneWebRTC {
897
907
if ( parameters . encodings . length === 0 ) {
898
908
parameters . encodings = [ { } ] ;
899
909
} else {
900
- // TODO: sent MediaEvent with updated variant bitrates
901
- this . applyBandwidthLimitation ( parameters . encodings , bandwidth ) ;
910
+ let mediaEvent = generateCustomEvent ( {
911
+ type : "trackVariantBitrates" ,
912
+ data : {
913
+ trackId : trackId ,
914
+ variantBitrates : { } ,
915
+ } ,
916
+ } ) ;
917
+ this . applyBandwidthLimitation (
918
+ parameters . encodings ,
919
+ bandwidth ,
920
+ mediaEvent
921
+ ) ;
902
922
}
903
923
904
924
return sender
@@ -1265,7 +1285,7 @@ export class MembraneWebRTC {
1265
1285
const maxBandwidth =
1266
1286
this . localTrackIdToTrack . get ( trackId ) ! . maxBandwidth ;
1267
1287
const trackMid = trackIdToMid ?. get ( trackId ) ;
1268
- if ( ! trackId )
1288
+ if ( ! trackMid )
1269
1289
throw `Unavailable MID of track ${ trackId } , RTCConnection might have not been established` ;
1270
1290
tracksInfo [ trackId ] = {
1271
1291
trackMetadata : metadata ,
0 commit comments