mediasoup 3.11.15 → 3.11.17
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/node/lib/DirectTransport.d.ts +4 -0
- package/node/lib/DirectTransport.d.ts.map +1 -1
- package/node/lib/DirectTransport.js +7 -0
- package/node/lib/Transport.d.ts +4 -0
- package/node/lib/Transport.d.ts.map +1 -1
- package/node/lib/Transport.js +8 -0
- package/node/lib/Worker.js +1 -1
- package/node/lib/index.d.ts +1 -1
- package/node/lib/index.js +1 -1
- package/node/lib/tests/test-WebRtcTransport.js +46 -2
- package/package.json +6 -6
- package/worker/include/Channel/ChannelRequest.hpp +1 -0
- package/worker/include/RTC/RtpRetransmissionBuffer.hpp +0 -2
- package/worker/include/RTC/SeqManager.hpp +3 -1
- package/worker/include/RTC/Transport.hpp +1 -0
- package/worker/include/RTC/TransportCongestionControlClient.hpp +4 -1
- package/worker/include/Utils.hpp +24 -2
- package/worker/src/Channel/ChannelRequest.cpp +1 -0
- package/worker/src/RTC/RtpRetransmissionBuffer.cpp +30 -40
- package/worker/src/RTC/RtpStreamSend.cpp +2 -2
- package/worker/src/RTC/SeqManager.cpp +72 -33
- package/worker/src/RTC/Transport.cpp +181 -4
- package/worker/src/RTC/TransportCongestionControlClient.cpp +23 -6
- package/worker/test/src/RTC/TestSeqManager.cpp +49 -7
|
@@ -85,6 +85,10 @@ export declare class DirectTransport extends Transport<DirectTransportEvents, Di
|
|
|
85
85
|
* @override
|
|
86
86
|
*/
|
|
87
87
|
setMaxOutgoingBitrate(bitrate: number): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* @override
|
|
90
|
+
*/
|
|
91
|
+
setMinOutgoingBitrate(bitrate: number): Promise<void>;
|
|
88
92
|
/**
|
|
89
93
|
* Send RTCP packet.
|
|
90
94
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DirectTransport.d.ts","sourceRoot":"","sources":["../src/DirectTransport.ts"],"names":[],"mappings":";AAEA,OAAO,EACN,SAAS,EAET,eAAe,EACf,uBAAuB,EACvB,2BAA2B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,sBAAsB,GAClC;IACC;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC/B;IAEC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,eAAe,GACnD;IACC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,uBAAuB,GACnE;IACC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;CACf,CAAC;AAEF,KAAK,iCAAiC,GAAG,2BAA2B,GACpE;IACC,IAAI,EAAE,mBAAmB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC/B;IACC,cAAc,CAAC,EAAE,cAAc,CAAC;CAChC,CAAC;AAIF,qBAAa,eAAgB,SAC5B,SAAS,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;;IAK/D;;OAEG;gBACS,OAAO,EAAE,iCAAiC;IActD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAUb;;;;;OAKG;IACH,YAAY,IAAI,IAAI;IAUpB;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOhD;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IAEG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;OAEG;IAEG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM;IAW3B,OAAO,CAAC,yBAAyB;CAoDjC"}
|
|
1
|
+
{"version":3,"file":"DirectTransport.d.ts","sourceRoot":"","sources":["../src/DirectTransport.ts"],"names":[],"mappings":";AAEA,OAAO,EACN,SAAS,EAET,eAAe,EACf,uBAAuB,EACvB,2BAA2B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,sBAAsB,GAClC;IACC;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC/B;IAEC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,eAAe,GACnD;IACC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,uBAAuB,GACnE;IACC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;CACf,CAAC;AAEF,KAAK,iCAAiC,GAAG,2BAA2B,GACpE;IACC,IAAI,EAAE,mBAAmB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC/B;IACC,cAAc,CAAC,EAAE,cAAc,CAAC;CAChC,CAAC;AAIF,qBAAa,eAAgB,SAC5B,SAAS,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;;IAK/D;;OAEG;gBACS,OAAO,EAAE,iCAAiC;IActD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAUb;;;;;OAKG;IACH,YAAY,IAAI,IAAI;IAUpB;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOhD;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IAEG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;OAEG;IAEG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;OAEG;IAEG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM;IAW3B,OAAO,CAAC,yBAAyB;CAoDjC"}
|
|
@@ -74,6 +74,13 @@ class DirectTransport extends Transport_1.Transport {
|
|
|
74
74
|
async setMaxOutgoingBitrate(bitrate) {
|
|
75
75
|
throw new errors_1.UnsupportedError('setMaxOutgoingBitrate() not implemented in DirectTransport');
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* @override
|
|
79
|
+
*/
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
81
|
+
async setMinOutgoingBitrate(bitrate) {
|
|
82
|
+
throw new errors_1.UnsupportedError('setMinOutgoingBitrate() not implemented in DirectTransport');
|
|
83
|
+
}
|
|
77
84
|
/**
|
|
78
85
|
* Send RTCP packet.
|
|
79
86
|
*/
|
package/node/lib/Transport.d.ts
CHANGED
|
@@ -174,6 +174,10 @@ export declare class Transport<Events extends TransportEvents = TransportEvents,
|
|
|
174
174
|
* Set maximum outgoing bitrate for sending media.
|
|
175
175
|
*/
|
|
176
176
|
setMaxOutgoingBitrate(bitrate: number): Promise<void>;
|
|
177
|
+
/**
|
|
178
|
+
* Set minimum outgoing bitrate for sending media.
|
|
179
|
+
*/
|
|
180
|
+
setMinOutgoingBitrate(bitrate: number): Promise<void>;
|
|
177
181
|
/**
|
|
178
182
|
* Create a Producer.
|
|
179
183
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../src/Transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../src/Transport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;AACrE,OAAO,EACN,YAAY,EACZ,mBAAmB,EAEnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,YAAY,EACZ,mBAAmB,EAEnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,MAAM,iBAAiB,GAC7B;IACC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC;AAE9C,MAAM,MAAM,cAAc,GAC1B;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,KAAK,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,uBAAuB,GACnC;IACC;;OAEG;IACH,IAAI,EAAE,uBAAuB,CAAC;IAE9B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IAExB;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjF,MAAM,MAAM,eAAe,GAC3B;IACC,WAAW,EAAE,EAAE,CAAC;IAChB,iBAAiB,EAAE,EAAE,CAAC;IACtB,KAAK,EAAE,CAAC,uBAAuB,CAAC,CAAC;IAEjC,QAAQ,EAAE,EAAE,CAAC;IACb,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3B,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC7B,kBAAkB,EAAE,CAAC,YAAY,CAAC,CAAC;IACnC,oBAAoB,EAAE,CAAC,YAAY,CAAC,CAAC;IACrC,oBAAoB,EAAE,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GACnC;IACC,KAAK,EAAE,EAAE,CAAC;IACV,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxB,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxB,eAAe,EAAE,CAAC,YAAY,CAAC,CAAC;IAChC,eAAe,EAAE,CAAC,YAAY,CAAC,CAAC;IAChC,KAAK,EAAE,CAAC,uBAAuB,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GACvC;IACC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,wBAAwB,EAAE,MAAM,eAAe,CAAC;IAChD,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC9D,mBAAmB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAC9C;IACC,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,aAAa,GACd,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,mBAAmB,CAAC;AAIxB,qBAAa,SAAS,CAAC,MAAM,SAAS,eAAe,GAAG,eAAe,EACtE,cAAc,SAAS,uBAAuB,GAAG,uBAAuB,CACxE,SAAQ,oBAAoB,CAAC,MAAM,CAAC;;IAGpC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAM/C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAGpC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAYlD,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,CAAC;IAGjF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EACrC,CAAC,cAAc,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;IAMtD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAa;IAGhE,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAa;IAGxE,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAa;IAiBxE;;;OAGG;gBAEF,EACC,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,cAAc,EACd,OAAO,EACP,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,EAAE,2BAA2B;IAiB/B;;OAEG;IACH,IAAI,EAAE,IAAI,MAAM,CAGf;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAGpB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGrC;IAED;;OAEG;IACH,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAG3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,oBAAoB,CAAC,cAAc,CAAC,CAGnD;IAED;;;OAGG;IACH,IAAI,iBAAiB,IAAI,OAAO,CAG/B;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IA4Db;;;;;OAKG;IACH,YAAY,IAAI,IAAI;IAuDpB;;;;;OAKG;IACH,kBAAkB,IAAI,IAAI;IA4D1B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAO1B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAMhC;;;;OAIG;IAEG,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D;;OAEG;IACG,OAAO,CACZ,EACC,EAAc,EACd,IAAI,EACJ,aAAa,EACb,MAAc,EACd,oBAAoB,EACpB,OAAO,EACP,EAAE,eAAe,GAChB,OAAO,CAAC,QAAQ,CAAC;IAgHpB;;;;OAIG;IACG,OAAO,CACZ,EACC,UAAU,EACV,eAAe,EACf,MAAc,EACd,GAAG,EACH,eAAe,EACf,SAAiB,EACjB,SAAS,EACT,IAAY,EACZ,OAAO,EACP,EAAE,eAAe,GAChB,OAAO,CAAC,QAAQ,CAAC;IAoHpB;;OAEG;IACG,WAAW,CAChB,EACC,EAAc,EACd,oBAAoB,EACpB,KAAU,EACV,QAAa,EACb,OAAO,EACP,GAAE,mBAAwB,GACzB,OAAO,CAAC,YAAY,CAAC;IA2ExB;;OAEG;IACG,WAAW,CAChB,EACC,cAAc,EACd,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,EAAE,mBAAmB,GACpB,OAAO,CAAC,YAAY,CAAC;IA4HxB;;OAEG;IACG,gBAAgB,CAAC,KAAK,GAAE,uBAAuB,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5E,OAAO,CAAC,mBAAmB;CAiC3B"}
|
package/node/lib/Transport.js
CHANGED
|
@@ -276,6 +276,14 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
276
276
|
const reqData = { bitrate };
|
|
277
277
|
await this.channel.request('transport.setMaxOutgoingBitrate', this.internal.transportId, reqData);
|
|
278
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Set minimum outgoing bitrate for sending media.
|
|
281
|
+
*/
|
|
282
|
+
async setMinOutgoingBitrate(bitrate) {
|
|
283
|
+
logger.debug('setMinOutgoingBitrate() [bitrate:%s]', bitrate);
|
|
284
|
+
const reqData = { bitrate };
|
|
285
|
+
await this.channel.request('transport.setMinOutgoingBitrate', this.internal.transportId, reqData);
|
|
286
|
+
}
|
|
279
287
|
/**
|
|
280
288
|
* Create a Producer.
|
|
281
289
|
*/
|
package/node/lib/Worker.js
CHANGED
|
@@ -90,7 +90,7 @@ class Worker extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
90
90
|
// options
|
|
91
91
|
{
|
|
92
92
|
env: {
|
|
93
|
-
MEDIASOUP_VERSION: '3.11.
|
|
93
|
+
MEDIASOUP_VERSION: '3.11.17',
|
|
94
94
|
// Let the worker process inherit all environment variables, useful
|
|
95
95
|
// if a custom and not in the path GCC is used so the user can set
|
|
96
96
|
// LD_LIBRARY_PATH environment variable for runtime.
|
package/node/lib/index.d.ts
CHANGED
package/node/lib/index.js
CHANGED
|
@@ -275,12 +275,53 @@ test('webRtcTransport.connect() with wrong arguments rejects with TypeError', as
|
|
|
275
275
|
expect(transport.dtlsParameters.role).toBe('auto');
|
|
276
276
|
}, 2000);
|
|
277
277
|
test('webRtcTransport.setMaxIncomingBitrate() succeeds', async () => {
|
|
278
|
-
await expect(transport.setMaxIncomingBitrate(
|
|
278
|
+
await expect(transport.setMaxIncomingBitrate(1000000))
|
|
279
|
+
.resolves
|
|
280
|
+
.toBeUndefined();
|
|
281
|
+
// Remove limit.
|
|
282
|
+
await expect(transport.setMaxIncomingBitrate(0))
|
|
279
283
|
.resolves
|
|
280
284
|
.toBeUndefined();
|
|
281
285
|
}, 2000);
|
|
282
286
|
test('webRtcTransport.setMaxOutgoingBitrate() succeeds', async () => {
|
|
283
|
-
await expect(transport.
|
|
287
|
+
await expect(transport.setMaxOutgoingBitrate(2000000))
|
|
288
|
+
.resolves
|
|
289
|
+
.toBeUndefined();
|
|
290
|
+
// Remove limit.
|
|
291
|
+
await expect(transport.setMaxOutgoingBitrate(0))
|
|
292
|
+
.resolves
|
|
293
|
+
.toBeUndefined();
|
|
294
|
+
}, 2000);
|
|
295
|
+
test('webRtcTransport.setMinOutgoingBitrate() succeeds', async () => {
|
|
296
|
+
await expect(transport.setMinOutgoingBitrate(100000))
|
|
297
|
+
.resolves
|
|
298
|
+
.toBeUndefined();
|
|
299
|
+
// Remove limit.
|
|
300
|
+
await expect(transport.setMinOutgoingBitrate(0))
|
|
301
|
+
.resolves
|
|
302
|
+
.toBeUndefined();
|
|
303
|
+
}, 2000);
|
|
304
|
+
test('webRtcTransport.setMaxOutgoingBitrate() fails if value is lower than current min limit', async () => {
|
|
305
|
+
await expect(transport.setMinOutgoingBitrate(3000000))
|
|
306
|
+
.resolves
|
|
307
|
+
.toBeUndefined();
|
|
308
|
+
await expect(transport.setMaxOutgoingBitrate(2000000))
|
|
309
|
+
.rejects
|
|
310
|
+
.toThrow(Error);
|
|
311
|
+
// Remove limit.
|
|
312
|
+
await expect(transport.setMinOutgoingBitrate(0))
|
|
313
|
+
.resolves
|
|
314
|
+
.toBeUndefined();
|
|
315
|
+
}, 2000);
|
|
316
|
+
test('webRtcTransport.setMinOutgoingBitrate() fails if value is higher than current max limit', async () => {
|
|
317
|
+
await expect(transport.setMaxOutgoingBitrate(2000000))
|
|
318
|
+
.resolves
|
|
319
|
+
.toBeUndefined();
|
|
320
|
+
await expect(transport.setMinOutgoingBitrate(3000000))
|
|
321
|
+
.rejects
|
|
322
|
+
.toThrow(Error);
|
|
323
|
+
// Remove limit.
|
|
324
|
+
await expect(transport.setMaxOutgoingBitrate(0))
|
|
284
325
|
.resolves
|
|
285
326
|
.toBeUndefined();
|
|
286
327
|
}, 2000);
|
|
@@ -394,6 +435,9 @@ test('WebRtcTransport methods reject if closed', async () => {
|
|
|
394
435
|
await expect(transport.setMaxOutgoingBitrate(200000))
|
|
395
436
|
.rejects
|
|
396
437
|
.toThrow(Error);
|
|
438
|
+
await expect(transport.setMinOutgoingBitrate(100000))
|
|
439
|
+
.rejects
|
|
440
|
+
.toThrow(Error);
|
|
397
441
|
await expect(transport.restartIce())
|
|
398
442
|
.rejects
|
|
399
443
|
.toThrow(Error);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mediasoup",
|
|
3
|
-
"version": "3.11.
|
|
3
|
+
"version": "3.11.17",
|
|
4
4
|
"description": "Cutting Edge WebRTC Video Conferencing",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
|
|
@@ -93,11 +93,11 @@
|
|
|
93
93
|
"devDependencies": {
|
|
94
94
|
"@types/debug": "^4.1.7",
|
|
95
95
|
"@types/jest": "^29.5.0",
|
|
96
|
-
"@types/node": "^18.15.
|
|
96
|
+
"@types/node": "^18.15.11",
|
|
97
97
|
"@types/uuid": "^9.0.1",
|
|
98
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
99
|
-
"@typescript-eslint/parser": "^5.
|
|
100
|
-
"eslint": "^8.
|
|
98
|
+
"@typescript-eslint/eslint-plugin": "^5.57.0",
|
|
99
|
+
"@typescript-eslint/parser": "^5.57.0",
|
|
100
|
+
"eslint": "^8.37.0",
|
|
101
101
|
"eslint-plugin-jest": "^27.2.1",
|
|
102
102
|
"jest": "^29.5.0",
|
|
103
103
|
"open-cli": "^7.2.0",
|
|
@@ -105,6 +105,6 @@
|
|
|
105
105
|
"sctp": "^1.0.0",
|
|
106
106
|
"ts-jest": "^29.0.5",
|
|
107
107
|
"tsc-watch": "^6.0.0",
|
|
108
|
-
"typescript": "^
|
|
108
|
+
"typescript": "^5.0.2"
|
|
109
109
|
}
|
|
110
110
|
}
|
|
@@ -29,7 +29,6 @@ namespace RTC
|
|
|
29
29
|
private:
|
|
30
30
|
static const SeqLowerThan isSeqLowerThan;
|
|
31
31
|
static const SeqHigherThan isSeqHigherThan;
|
|
32
|
-
static T Delta(const T lhs, const T rhs);
|
|
33
32
|
|
|
34
33
|
public:
|
|
35
34
|
static bool IsSeqLowerThan(const T lhs, const T rhs);
|
|
@@ -46,6 +45,9 @@ namespace RTC
|
|
|
46
45
|
T GetMaxInput() const;
|
|
47
46
|
T GetMaxOutput() const;
|
|
48
47
|
|
|
48
|
+
private:
|
|
49
|
+
void ClearDropped();
|
|
50
|
+
|
|
49
51
|
private:
|
|
50
52
|
T base{ 0 };
|
|
51
53
|
T maxOutput{ 0 };
|
|
@@ -329,6 +329,7 @@ namespace RTC
|
|
|
329
329
|
uint32_t initialAvailableOutgoingBitrate{ 600000u };
|
|
330
330
|
uint32_t maxIncomingBitrate{ 0u };
|
|
331
331
|
uint32_t maxOutgoingBitrate{ 0u };
|
|
332
|
+
uint32_t minOutgoingBitrate{ 0u };
|
|
332
333
|
struct TraceEventTypes traceEventTypes;
|
|
333
334
|
};
|
|
334
335
|
} // namespace RTC
|
|
@@ -56,7 +56,8 @@ namespace RTC
|
|
|
56
56
|
RTC::TransportCongestionControlClient::Listener* listener,
|
|
57
57
|
RTC::BweType bweType,
|
|
58
58
|
uint32_t initialAvailableBitrate,
|
|
59
|
-
uint32_t maxOutgoingBitrate
|
|
59
|
+
uint32_t maxOutgoingBitrate,
|
|
60
|
+
uint32_t minOutgoingBitrate);
|
|
60
61
|
virtual ~TransportCongestionControlClient();
|
|
61
62
|
|
|
62
63
|
public:
|
|
@@ -74,6 +75,7 @@ namespace RTC
|
|
|
74
75
|
void ReceiveRtcpTransportFeedback(const RTC::RTCP::FeedbackRtpTransportPacket* feedback);
|
|
75
76
|
void SetDesiredBitrate(uint32_t desiredBitrate, bool force);
|
|
76
77
|
void SetMaxOutgoingBitrate(uint32_t maxBitrate);
|
|
78
|
+
void SetMinOutgoingBitrate(uint32_t minBitrate);
|
|
77
79
|
const Bitrates& GetBitrates() const
|
|
78
80
|
{
|
|
79
81
|
return this->bitrates;
|
|
@@ -118,6 +120,7 @@ namespace RTC
|
|
|
118
120
|
RTC::BweType bweType;
|
|
119
121
|
uint32_t initialAvailableBitrate{ 0u };
|
|
120
122
|
uint32_t maxOutgoingBitrate{ 0u };
|
|
123
|
+
uint32_t minOutgoingBitrate{ 0u };
|
|
121
124
|
Bitrates bitrates;
|
|
122
125
|
bool availableBitrateEventCalled{ false };
|
|
123
126
|
uint64_t lastAvailableBitrateEventAtMs{ 0u };
|
package/worker/include/Utils.hpp
CHANGED
|
@@ -172,18 +172,26 @@ namespace Utils
|
|
|
172
172
|
{
|
|
173
173
|
// If size is not multiple of 32 bits then pad it.
|
|
174
174
|
if (size & 0x03)
|
|
175
|
+
{
|
|
175
176
|
return (size & 0xFFFC) + 4;
|
|
177
|
+
}
|
|
176
178
|
else
|
|
179
|
+
{
|
|
177
180
|
return size;
|
|
181
|
+
}
|
|
178
182
|
}
|
|
179
183
|
|
|
180
184
|
static uint32_t PadTo4Bytes(uint32_t size)
|
|
181
185
|
{
|
|
182
186
|
// If size is not multiple of 32 bits then pad it.
|
|
183
187
|
if (size & 0x03)
|
|
188
|
+
{
|
|
184
189
|
return (size & 0xFFFFFFFC) + 4;
|
|
190
|
+
}
|
|
185
191
|
else
|
|
192
|
+
{
|
|
186
193
|
return size;
|
|
194
|
+
}
|
|
187
195
|
}
|
|
188
196
|
};
|
|
189
197
|
|
|
@@ -213,10 +221,14 @@ namespace Utils
|
|
|
213
221
|
|
|
214
222
|
// Special case.
|
|
215
223
|
if (max == 4294967295)
|
|
224
|
+
{
|
|
216
225
|
--max;
|
|
226
|
+
}
|
|
217
227
|
|
|
218
228
|
if (min > max)
|
|
229
|
+
{
|
|
219
230
|
min = max;
|
|
231
|
+
}
|
|
220
232
|
|
|
221
233
|
return (((Crypto::seed >> 4) & 0x7FFF7FFF) % (max - min + 1)) + min;
|
|
222
234
|
}
|
|
@@ -229,7 +241,9 @@ namespace Utils
|
|
|
229
241
|
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
|
|
230
242
|
|
|
231
243
|
if (len > 64)
|
|
244
|
+
{
|
|
232
245
|
len = 64;
|
|
246
|
+
}
|
|
233
247
|
|
|
234
248
|
for (size_t i{ 0 }; i < len; ++i)
|
|
235
249
|
{
|
|
@@ -323,10 +337,12 @@ namespace Utils
|
|
|
323
337
|
// IsNewer(t2,t1)=false
|
|
324
338
|
// rather than having IsNewer(t1,t2) = IsNewer(t2,t1) = false.
|
|
325
339
|
if (static_cast<uint32_t>(timestamp - prevTimestamp) == 0x80000000)
|
|
340
|
+
{
|
|
326
341
|
return timestamp > prevTimestamp;
|
|
342
|
+
}
|
|
327
343
|
|
|
328
|
-
return
|
|
329
|
-
|
|
344
|
+
return (
|
|
345
|
+
timestamp != prevTimestamp && static_cast<uint32_t>(timestamp - prevTimestamp) < 0x80000000);
|
|
330
346
|
}
|
|
331
347
|
|
|
332
348
|
static uint32_t LatestTimestamp(uint32_t timestamp1, uint32_t timestamp2)
|
|
@@ -346,11 +362,17 @@ namespace Utils
|
|
|
346
362
|
static bool IsPositiveInteger(const json& value)
|
|
347
363
|
{
|
|
348
364
|
if (value.is_number_unsigned())
|
|
365
|
+
{
|
|
349
366
|
return true;
|
|
367
|
+
}
|
|
350
368
|
else if (value.is_number_integer())
|
|
369
|
+
{
|
|
351
370
|
return value.get<int64_t>() >= 0;
|
|
371
|
+
}
|
|
352
372
|
else
|
|
373
|
+
{
|
|
353
374
|
return false;
|
|
375
|
+
}
|
|
354
376
|
}
|
|
355
377
|
};
|
|
356
378
|
} // namespace Utils
|
|
@@ -37,6 +37,7 @@ namespace Channel
|
|
|
37
37
|
{ "transport.connect", ChannelRequest::MethodId::TRANSPORT_CONNECT },
|
|
38
38
|
{ "transport.setMaxIncomingBitrate", ChannelRequest::MethodId::TRANSPORT_SET_MAX_INCOMING_BITRATE },
|
|
39
39
|
{ "transport.setMaxOutgoingBitrate", ChannelRequest::MethodId::TRANSPORT_SET_MAX_OUTGOING_BITRATE },
|
|
40
|
+
{ "transport.setMinOutgoingBitrate", ChannelRequest::MethodId::TRANSPORT_SET_MIN_OUTGOING_BITRATE },
|
|
40
41
|
{ "transport.restartIce", ChannelRequest::MethodId::TRANSPORT_RESTART_ICE },
|
|
41
42
|
{ "transport.produce", ChannelRequest::MethodId::TRANSPORT_PRODUCE },
|
|
42
43
|
{ "transport.consume", ChannelRequest::MethodId::TRANSPORT_CONSUME },
|
|
@@ -29,17 +29,19 @@ namespace RTC
|
|
|
29
29
|
{
|
|
30
30
|
MS_TRACE();
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
const auto* oldestItem = GetOldest();
|
|
33
|
+
|
|
34
|
+
if (!oldestItem)
|
|
33
35
|
{
|
|
34
36
|
return nullptr;
|
|
35
37
|
}
|
|
36
38
|
|
|
37
|
-
if (RTC::SeqManager<uint16_t>::IsSeqLowerThan(seq,
|
|
39
|
+
if (RTC::SeqManager<uint16_t>::IsSeqLowerThan(seq, oldestItem->sequenceNumber))
|
|
38
40
|
{
|
|
39
41
|
return nullptr;
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
auto idx = static_cast<uint16_t>(seq -
|
|
44
|
+
const auto idx = static_cast<uint16_t>(seq - oldestItem->sequenceNumber);
|
|
43
45
|
|
|
44
46
|
if (idx > static_cast<uint16_t>(this->buffer.size() - 1))
|
|
45
47
|
{
|
|
@@ -61,9 +63,9 @@ namespace RTC
|
|
|
61
63
|
{
|
|
62
64
|
MS_TRACE();
|
|
63
65
|
|
|
64
|
-
auto ssrc = packet->GetSsrc();
|
|
65
|
-
auto seq = packet->GetSequenceNumber();
|
|
66
|
-
auto timestamp = packet->GetTimestamp();
|
|
66
|
+
const auto ssrc = packet->GetSsrc();
|
|
67
|
+
const auto seq = packet->GetSequenceNumber();
|
|
68
|
+
const auto timestamp = packet->GetTimestamp();
|
|
67
69
|
|
|
68
70
|
MS_DEBUG_DEV("packet [seq:%" PRIu16 ", timestamp:%" PRIu32 "]", seq, timestamp);
|
|
69
71
|
|
|
@@ -76,17 +78,14 @@ namespace RTC
|
|
|
76
78
|
|
|
77
79
|
this->buffer.push_back(FillItem(item, packet, sharedPacket));
|
|
78
80
|
|
|
79
|
-
// Packet's seq number becomes startSeq.
|
|
80
|
-
this->startSeq = seq;
|
|
81
|
-
|
|
82
81
|
return;
|
|
83
82
|
}
|
|
84
83
|
|
|
85
84
|
// Clear too old packets in the buffer.
|
|
86
85
|
ClearTooOld();
|
|
87
86
|
|
|
88
|
-
auto* oldestItem = GetOldest();
|
|
89
|
-
auto* newestItem = GetNewest();
|
|
87
|
+
const auto* oldestItem = GetOldest();
|
|
88
|
+
const auto* newestItem = GetNewest();
|
|
90
89
|
|
|
91
90
|
MS_ASSERT(oldestItem != nullptr, "oldest item doesn't exist");
|
|
92
91
|
MS_ASSERT(newestItem != nullptr, "newest item doesn't exist");
|
|
@@ -120,7 +119,7 @@ namespace RTC
|
|
|
120
119
|
// the buffer.
|
|
121
120
|
if (this->buffer.size() + numBlankSlots + 1 > this->maxItems)
|
|
122
121
|
{
|
|
123
|
-
auto numItemsToRemove =
|
|
122
|
+
const auto numItemsToRemove =
|
|
124
123
|
static_cast<uint16_t>(this->buffer.size() + numBlankSlots + 1 - this->maxItems);
|
|
125
124
|
|
|
126
125
|
// If num of items to be removed exceed buffer size minus one (needed to
|
|
@@ -138,9 +137,6 @@ namespace RTC
|
|
|
138
137
|
numBlankSlots = 0u;
|
|
139
138
|
|
|
140
139
|
Clear();
|
|
141
|
-
|
|
142
|
-
// After clearing the buffer, update startSeq.
|
|
143
|
-
this->startSeq = seq;
|
|
144
140
|
}
|
|
145
141
|
else
|
|
146
142
|
{
|
|
@@ -203,7 +199,7 @@ namespace RTC
|
|
|
203
199
|
|
|
204
200
|
// Calculate how many blank slots it would be necessary to add when
|
|
205
201
|
// pushing new item to the fton of the buffer.
|
|
206
|
-
auto numBlankSlots = static_cast<uint16_t>(oldestItem->sequenceNumber - seq - 1);
|
|
202
|
+
const auto numBlankSlots = static_cast<uint16_t>(oldestItem->sequenceNumber - seq - 1);
|
|
207
203
|
|
|
208
204
|
// If adding this packet (and needed blank slots) to the front makes the
|
|
209
205
|
// buffer exceed its max size, discard this packet.
|
|
@@ -230,9 +226,6 @@ namespace RTC
|
|
|
230
226
|
auto* item = new Item();
|
|
231
227
|
|
|
232
228
|
this->buffer.push_front(FillItem(item, packet, sharedPacket));
|
|
233
|
-
|
|
234
|
-
// Packet's seq number becomes startSeq.
|
|
235
|
-
this->startSeq = seq;
|
|
236
229
|
}
|
|
237
230
|
// Otherwise packet must be inserted between oldest and newest stored items
|
|
238
231
|
// so there is already an allocated slot for it.
|
|
@@ -259,13 +252,13 @@ namespace RTC
|
|
|
259
252
|
}
|
|
260
253
|
|
|
261
254
|
// idx is the intended position of the received packet in the buffer.
|
|
262
|
-
auto idx = static_cast<uint16_t>(seq -
|
|
255
|
+
const auto idx = static_cast<uint16_t>(seq - oldestItem->sequenceNumber);
|
|
263
256
|
|
|
264
257
|
// Validate that packet timestamp is equal or higher than the timestamp of
|
|
265
258
|
// the immediate older packet (if any).
|
|
266
259
|
for (auto idx2 = static_cast<int32_t>(idx - 1); idx2 >= 0; --idx2)
|
|
267
260
|
{
|
|
268
|
-
auto* olderItem = this->buffer.at(idx2);
|
|
261
|
+
const auto* olderItem = this->buffer.at(idx2);
|
|
269
262
|
|
|
270
263
|
// Blank slot, continue.
|
|
271
264
|
if (!olderItem)
|
|
@@ -296,7 +289,7 @@ namespace RTC
|
|
|
296
289
|
// the immediate newer packet (if any).
|
|
297
290
|
for (auto idx2 = static_cast<size_t>(idx + 1); idx2 < this->buffer.size(); ++idx2)
|
|
298
291
|
{
|
|
299
|
-
auto* newerItem = this->buffer.at(idx2);
|
|
292
|
+
const auto* newerItem = this->buffer.at(idx2);
|
|
300
293
|
|
|
301
294
|
// Blank slot, continue.
|
|
302
295
|
if (!newerItem)
|
|
@@ -354,7 +347,6 @@ namespace RTC
|
|
|
354
347
|
}
|
|
355
348
|
|
|
356
349
|
this->buffer.clear();
|
|
357
|
-
this->startSeq = 0u;
|
|
358
350
|
}
|
|
359
351
|
|
|
360
352
|
void RtpRetransmissionBuffer::Dump() const
|
|
@@ -362,11 +354,7 @@ namespace RTC
|
|
|
362
354
|
MS_TRACE();
|
|
363
355
|
|
|
364
356
|
MS_DUMP("<RtpRetransmissionBuffer>");
|
|
365
|
-
MS_DUMP(
|
|
366
|
-
" buffer [size:%zu, maxSize:%" PRIu16 ", startSeq:%" PRIu16 "]",
|
|
367
|
-
this->buffer.size(),
|
|
368
|
-
this->maxItems,
|
|
369
|
-
this->startSeq);
|
|
357
|
+
MS_DUMP(" buffer [size:%zu, maxSize:%" PRIu16 "]", this->buffer.size(), this->maxItems);
|
|
370
358
|
if (this->buffer.size() > 0)
|
|
371
359
|
{
|
|
372
360
|
const auto* oldestItem = GetOldest();
|
|
@@ -392,14 +380,24 @@ namespace RTC
|
|
|
392
380
|
{
|
|
393
381
|
MS_TRACE();
|
|
394
382
|
|
|
395
|
-
|
|
383
|
+
if (this->buffer.empty())
|
|
384
|
+
{
|
|
385
|
+
return nullptr;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return this->buffer.front();
|
|
396
389
|
}
|
|
397
390
|
|
|
398
391
|
RtpRetransmissionBuffer::Item* RtpRetransmissionBuffer::GetNewest() const
|
|
399
392
|
{
|
|
400
393
|
MS_TRACE();
|
|
401
394
|
|
|
402
|
-
|
|
395
|
+
if (this->buffer.empty())
|
|
396
|
+
{
|
|
397
|
+
return nullptr;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return this->buffer.back();
|
|
403
401
|
}
|
|
404
402
|
|
|
405
403
|
void RtpRetransmissionBuffer::RemoveOldest()
|
|
@@ -411,7 +409,7 @@ namespace RTC
|
|
|
411
409
|
return;
|
|
412
410
|
}
|
|
413
411
|
|
|
414
|
-
auto* item = this->buffer.
|
|
412
|
+
auto* item = this->buffer.front();
|
|
415
413
|
|
|
416
414
|
// Reset the stored item (decrease RTP packet shared pointer counter).
|
|
417
415
|
item->Reset();
|
|
@@ -419,7 +417,6 @@ namespace RTC
|
|
|
419
417
|
delete item;
|
|
420
418
|
|
|
421
419
|
this->buffer.pop_front();
|
|
422
|
-
this->startSeq++;
|
|
423
420
|
|
|
424
421
|
MS_DEBUG_DEV("removed 1 item from the front");
|
|
425
422
|
|
|
@@ -430,7 +427,6 @@ namespace RTC
|
|
|
430
427
|
while (!this->buffer.empty() && this->buffer.front() == nullptr)
|
|
431
428
|
{
|
|
432
429
|
this->buffer.pop_front();
|
|
433
|
-
this->startSeq++;
|
|
434
430
|
|
|
435
431
|
++numItemsRemoved;
|
|
436
432
|
}
|
|
@@ -439,12 +435,6 @@ namespace RTC
|
|
|
439
435
|
{
|
|
440
436
|
MS_DEBUG_DEV("removed 1 blank slot from the front");
|
|
441
437
|
}
|
|
442
|
-
|
|
443
|
-
// If we emptied the full buffer, reset startSeq.
|
|
444
|
-
if (this->buffer.empty())
|
|
445
|
-
{
|
|
446
|
-
this->startSeq = 0u;
|
|
447
|
-
}
|
|
448
438
|
}
|
|
449
439
|
|
|
450
440
|
void RtpRetransmissionBuffer::RemoveOldest(uint16_t numItems)
|
|
@@ -458,7 +448,7 @@ namespace RTC
|
|
|
458
448
|
numItems,
|
|
459
449
|
this->buffer.size());
|
|
460
450
|
|
|
461
|
-
auto intendedBufferSize = this->buffer.size() - numItems;
|
|
451
|
+
const auto intendedBufferSize = this->buffer.size() - numItems;
|
|
462
452
|
|
|
463
453
|
while (this->buffer.size() > intendedBufferSize)
|
|
464
454
|
{
|
|
@@ -11,8 +11,8 @@ namespace RTC
|
|
|
11
11
|
{
|
|
12
12
|
/* Static. */
|
|
13
13
|
|
|
14
|
-
// Limit
|
|
15
|
-
static constexpr size_t RetransmissionBufferMaxItems{
|
|
14
|
+
// Limit max number of items in the retransmission buffer.
|
|
15
|
+
static constexpr size_t RetransmissionBufferMaxItems{ 5000u };
|
|
16
16
|
// 17: 16 bit mask + the initial sequence number.
|
|
17
17
|
static constexpr size_t MaxRequestedPackets{ 17u };
|
|
18
18
|
thread_local static std::vector<RTC::RtpRetransmissionBuffer::Item*> RetransmissionContainer(
|