Skip to content
This repository was archived by the owner on May 10, 2024. It is now read-only.

Commit ed3079e

Browse files
committed
Send media event in setTrackBandwidth function
1 parent 1e37972 commit ed3079e

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

src/membraneWebRTC.ts

+32-12
Original file line numberDiff line numberDiff line change
@@ -736,19 +736,25 @@ export class MembraneWebRTC {
736736
if (trackContext.maxBandwidth && transceiverConfig.sendEncodings)
737737
this.applyBandwidthLimitation(
738738
transceiverConfig.sendEncodings,
739-
trackContext.maxBandwidth
739+
trackContext.maxBandwidth,
740+
null
740741
);
741742

742743
return transceiverConfig;
743744
}
744745

745746
private applyBandwidthLimitation(
746747
encodings: RTCRtpEncodingParameters[],
747-
max_bandwidth: TrackBandwidthLimit
748+
max_bandwidth: TrackBandwidthLimit,
749+
mediaEvent: MediaEvent | null
748750
) {
749751
if (typeof max_bandwidth === "number") {
750752
// 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+
);
752758
} else {
753759
// simulcast bandwidth limit
754760
encodings
@@ -767,7 +773,8 @@ export class MembraneWebRTC {
767773

768774
private splitBandwidth(
769775
encodings: RTCRtpEncodingParameters[],
770-
bandwidth: number
776+
bandwidth: number,
777+
mediaEvent: MediaEvent | null
771778
) {
772779
if (bandwidth === 0) {
773780
encodings.forEach((encoding) => delete encoding.maxBitrate);
@@ -794,11 +801,14 @@ export class MembraneWebRTC {
794801
);
795802
const x = bandwidth / bitrate_parts;
796803

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);
802812
}
803813

804814
/**
@@ -897,8 +907,18 @@ export class MembraneWebRTC {
897907
if (parameters.encodings.length === 0) {
898908
parameters.encodings = [{}];
899909
} 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+
);
902922
}
903923

904924
return sender
@@ -1265,7 +1285,7 @@ export class MembraneWebRTC {
12651285
const maxBandwidth =
12661286
this.localTrackIdToTrack.get(trackId)!.maxBandwidth;
12671287
const trackMid = trackIdToMid?.get(trackId);
1268-
if (!trackId)
1288+
if (!trackMid)
12691289
throw `Unavailable MID of track ${trackId}, RTCConnection might have not been established`;
12701290
tracksInfo[trackId] = {
12711291
trackMetadata: metadata,

0 commit comments

Comments
 (0)