Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@
### NEXT

- Node: Update TypeScript to v6 ([PR #1790](https://github.com/versatica/mediasoup/pull/1790)).
- New built-in SCTP stack ([PR #1806](https://github.com/versatica/mediasoup/pull/1806)).
- **Breaking change:** Remove `useBuiltInSctpStack` option in `WorkerSettngs`.
- **Breaking change:** Remove `SctpCapabilities` type. No longer needed.
- **Breaking change:** Remove `numSctpStreams` option in all `Transport` options.
- **Breaking change:** Replace `maxSctpMessageSize` in all `Transport` options with `maxSendMessageSize` and `maxReceiveMessageSize`.
- **Breaking change:** Replace `maxMessageSize` in `DirectTransport` options with `maxSendMessageSize` and `maxReceiveMessageSize`.
- Add new `Transport` options: `sctpPerStreamSendQueueLimit` and `sctpMaxReceiverWindowBufferSize`.
- **Breaking change:** `SctpParameters` type changed from `{ port, OS, MIS, maxMessageSize }` to `{ maxSendMessageSize, maxReceiveMessageSize, sendBufferSize, perStreamSendQueueLimit, maxReceiverWindowBufferSize, isDataChannel}`.
- **Breaking change:** Add `bufferedAmount` in `DataConsumerDump`.

### 3.19.22

Expand Down
1 change: 1 addition & 0 deletions node/src/DataConsumer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,7 @@ export function parseDataConsumerDumpResponse(
: undefined,
label: data.label()!,
protocol: data.protocol()!,
bufferedAmount: data.bufferedAmount(),
bufferedAmountLowThreshold: data.bufferedAmountLowThreshold(),
paused: data.paused(),
dataProducerPaused: data.dataProducerPaused(),
Expand Down
1 change: 1 addition & 0 deletions node/src/DataConsumerTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ export type DataConsumerDump = {
sctpStreamParameters?: SctpStreamParameters;
label: string;
protocol: string;
bufferedAmount: number;
bufferedAmountLowThreshold: number;
};

Expand Down
10 changes: 8 additions & 2 deletions node/src/DirectTransportTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@ export type DirectTransportOptions<
DirectTransportAppData extends AppData = AppData,
> = {
/**
* Maximum allowed size for direct messages sent from DataProducers.
* Maximum allowed size for messages sent by DataConsumers (in bytes).
* Default 262144.
*/
maxMessageSize: number;
maxSendMessageSize?: number;

/**
* Maximum allowed size for SCTP messages received by DataProducers (in bytes).
* Default 262144.
*/
maxReceiveMessageSize?: number;

/**
* Custom application data.
Expand Down
31 changes: 23 additions & 8 deletions node/src/PipeTransportTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type {
} from './TransportTypes';
import type { Consumer } from './ConsumerTypes';
import type { SrtpParameters } from './srtpParametersTypes';
import type { SctpParameters, NumSctpStreams } from './sctpParametersTypes';
import type { SctpParameters } from './sctpParametersTypes';
import type { Either, AppData } from './types';

export type PipeTransportOptions<
Expand All @@ -24,22 +24,37 @@ export type PipeTransportOptions<
enableSctp?: boolean;

/**
* SCTP streams number.
* Maximum allowed size for SCTP messages sent by DataConsumers (in bytes).
* Default 262144.
*/
numSctpStreams?: NumSctpStreams;
maxSendMessageSize?: number;

/**
* Maximum allowed size for SCTP messages sent by DataProducers.
* Default 268435456.
* Maximum allowed size for SCTP messages received by DataProducers (in bytes).
* Default 262144.
*/
maxSctpMessageSize?: number;
maxReceiveMessageSize?: number;

/**
* Maximum SCTP send buffer used by DataConsumers.
* Default 268435456.
* Maximum SCTP send buffer used by DataConsumers (in bytes).
* Default 2000000.
*/
sctpSendBufferSize?: number;

/**
* Per stream send queue size limit. Similar to `sctpSendBufferSize`, but
* limiting the size of individual streams.
* Default 2000000.
*/
sctpPerStreamSendQueueLimit?: number;

/**
* Maximum received window buffer size (in bytes). This should be a bit larger
* than the largest sized message you want to be able to receive.
* Default 5242880.
*/
sctpMaxReceiverWindowBufferSize?: number;

/**
* Enable RTX and NACK for RTP retransmission. Useful if both Routers are
* located in different hosts and there is packet lost in the link. For this
Expand Down
29 changes: 22 additions & 7 deletions node/src/PlainTransportTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import type {
TransportObserverEvents,
} from './TransportTypes';
import type { SrtpParameters, SrtpCryptoSuite } from './srtpParametersTypes';
import type { SctpParameters, NumSctpStreams } from './sctpParametersTypes';
import type { SctpParameters } from './sctpParametersTypes';
import type { Either, AppData } from './types';

export type PlainTransportOptions<
Expand All @@ -36,22 +36,37 @@ export type PlainTransportOptions<
enableSctp?: boolean;

/**
* SCTP streams number.
* Maximum allowed size for SCTP messages sent by DataConsumers (in bytes).
* Default 262144.
*/
numSctpStreams?: NumSctpStreams;
maxSendMessageSize?: number;

/**
* Maximum allowed size for SCTP messages sent by DataProducers.
* Maximum allowed size for SCTP messages received by DataProducers (in bytes).
* Default 262144.
*/
maxSctpMessageSize?: number;
maxReceiveMessageSize?: number;

/**
* Maximum SCTP send buffer used by DataConsumers.
* Default 262144.
* Maximum SCTP send buffer used by DataConsumers (in bytes).
* Default 2000000.
*/
sctpSendBufferSize?: number;

/**
* Per stream send queue size limit. Similar to `sctpSendBufferSize`, but
* limiting the size of individual streams.
* Default 2000000.
*/
sctpPerStreamSendQueueLimit?: number;

/**
* Maximum received window buffer size (in bytes). This should be a bit larger
* than the largest sized message you want to be able to receive.
* Default 5242880.
*/
sctpMaxReceiverWindowBufferSize?: number;

/**
* Enable SRTP. For this to work, connect() must be called
* with remote SRTP parameters. Default false.
Expand Down
133 changes: 69 additions & 64 deletions node/src/Router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ import * as FbsWebRtcTransport from './fbs/web-rtc-transport';
import * as FbsPlainTransport from './fbs/plain-transport';
import * as FbsPipeTransport from './fbs/pipe-transport';
import * as FbsDirectTransport from './fbs/direct-transport';
import * as FbsSctpParameters from './fbs/sctp-parameters';

export type RouterInternal = {
routerId: string;
Expand Down Expand Up @@ -302,9 +301,11 @@ export class RouterImpl<RouterAppData extends AppData = AppData>
preferTcp = false,
initialAvailableOutgoingBitrate = 600000,
enableSctp = false,
numSctpStreams = { OS: 1024, MIS: 1024 },
maxSctpMessageSize = 262144,
sctpSendBufferSize = 262144,
maxSendMessageSize = 262144,
maxReceiveMessageSize = 262144,
sctpSendBufferSize = 2000000,
sctpPerStreamSendQueueLimit = 2000000,
sctpMaxReceiverWindowBufferSize = 5242880,
iceConsentTimeout = 30,
appData,
}: WebRtcTransportOptions<WebRtcTransportAppData>): Promise<
Expand All @@ -324,12 +325,6 @@ export class RouterImpl<RouterAppData extends AppData = AppData>
throw new TypeError(
'only one of webRtcServer, listenInfos and listenIps must be given'
);
} else if (
numSctpStreams &&
(typeof numSctpStreams.OS !== 'number' ||
typeof numSctpStreams.MIS !== 'number')
) {
throw new TypeError('if given, numSctpStreams must contain OS and MIS');
} else if (appData && typeof appData !== 'object') {
throw new TypeError('if given, appData must be an object');
}
Expand Down Expand Up @@ -425,17 +420,15 @@ export class RouterImpl<RouterAppData extends AppData = AppData>
}

const baseTransportOptions = new FbsTransport.OptionsT(
undefined /* direct */,
undefined /* maxMessageSize */,
/* direct */ undefined,
initialAvailableOutgoingBitrate,
enableSctp,
new FbsSctpParameters.NumSctpStreamsT(
numSctpStreams.OS,
numSctpStreams.MIS
),
maxSctpMessageSize,
maxSendMessageSize,
maxReceiveMessageSize,
sctpSendBufferSize,
true /* isDataChannel */
sctpPerStreamSendQueueLimit,
sctpMaxReceiverWindowBufferSize,
/* isDataChannel */ true
);

const webRtcTransportOptions =
Expand Down Expand Up @@ -529,9 +522,11 @@ export class RouterImpl<RouterAppData extends AppData = AppData>
rtcpMux = true,
comedia = false,
enableSctp = false,
numSctpStreams = { OS: 1024, MIS: 1024 },
maxSctpMessageSize = 262144,
sctpSendBufferSize = 262144,
maxSendMessageSize = 262144,
maxReceiveMessageSize = 262144,
sctpSendBufferSize = 2000000,
sctpPerStreamSendQueueLimit = 2000000,
sctpMaxReceiverWindowBufferSize = 5242880,
Comment thread
jmillan marked this conversation as resolved.
enableSrtp = false,
srtpCryptoSuite = 'AES_CM_128_HMAC_SHA1_80',
appData,
Expand Down Expand Up @@ -578,17 +573,15 @@ export class RouterImpl<RouterAppData extends AppData = AppData>

/* Build Request. */
const baseTransportOptions = new FbsTransport.OptionsT(
undefined /* direct */,
undefined /* maxMessageSize */,
undefined /* initialAvailableOutgoingBitrate */,
/* direct */ undefined,
/* initialAvailableOutgoingBitrate */ undefined,
enableSctp,
new FbsSctpParameters.NumSctpStreamsT(
numSctpStreams.OS,
numSctpStreams.MIS
),
maxSctpMessageSize,
maxSendMessageSize,
maxReceiveMessageSize,
sctpSendBufferSize,
false /* isDataChannel */
sctpPerStreamSendQueueLimit,
sctpMaxReceiverWindowBufferSize,
/* isDataChannel */ false
);

const plainTransportOptions = new FbsPlainTransport.PlainTransportOptionsT(
Expand Down Expand Up @@ -693,9 +686,11 @@ export class RouterImpl<RouterAppData extends AppData = AppData>
listenIp,
port,
enableSctp = false,
numSctpStreams = { OS: 1024, MIS: 1024 },
maxSctpMessageSize = 268435456,
sctpSendBufferSize = 268435456,
maxSendMessageSize = 262144,
maxReceiveMessageSize = 262144,
sctpSendBufferSize = 2000000,
sctpPerStreamSendQueueLimit = 2000000,
sctpMaxReceiverWindowBufferSize = 5242880,
Comment thread
ibc marked this conversation as resolved.
enableRtx = false,
enableSrtp = false,
appData,
Expand Down Expand Up @@ -733,17 +728,15 @@ export class RouterImpl<RouterAppData extends AppData = AppData>

/* Build Request. */
const baseTransportOptions = new FbsTransport.OptionsT(
undefined /* direct */,
undefined /* maxMessageSize */,
undefined /* initialAvailableOutgoingBitrate */,
/* direct */ undefined,
/* initialAvailableOutgoingBitrate */ undefined,
enableSctp,
new FbsSctpParameters.NumSctpStreamsT(
numSctpStreams.OS,
numSctpStreams.MIS
),
maxSctpMessageSize,
maxSendMessageSize,
maxReceiveMessageSize,
sctpSendBufferSize,
false /* isDataChannel */
sctpPerStreamSendQueueLimit,
sctpMaxReceiverWindowBufferSize,
/* isDataChannel */ false
);

const pipeTransportOptions = new FbsPipeTransport.PipeTransportOptionsT(
Expand Down Expand Up @@ -826,34 +819,34 @@ export class RouterImpl<RouterAppData extends AppData = AppData>
return transport;
}

async createDirectTransport<DirectTransportAppData extends AppData = AppData>(
{
maxMessageSize = 262144,
appData,
}: DirectTransportOptions<DirectTransportAppData> = {
maxMessageSize: 262144,
}
): Promise<DirectTransport<DirectTransportAppData>> {
async createDirectTransport<
DirectTransportAppData extends AppData = AppData,
>({
maxSendMessageSize = 262144,
maxReceiveMessageSize = 262144,
appData,
}: DirectTransportOptions<DirectTransportAppData> = {}): Promise<
DirectTransport<DirectTransportAppData>
> {
logger.debug('createDirectTransport()');

if (typeof maxMessageSize !== 'number' || maxMessageSize < 0) {
throw new TypeError('if given, maxMessageSize must be a positive number');
} else if (appData && typeof appData !== 'object') {
if (appData && typeof appData !== 'object') {
throw new TypeError('if given, appData must be an object');
}

const transportId = utils.generateUUIDv4();

/* Build Request. */
const baseTransportOptions = new FbsTransport.OptionsT(
true /* direct */,
maxMessageSize,
undefined /* initialAvailableOutgoingBitrate */,
undefined /* enableSctp */,
undefined /* numSctpStreams */,
undefined /* maxSctpMessageSize */,
undefined /* sctpSendBufferSize */,
undefined /* isDataChannel */
/* direct */ true,
/* initialAvailableOutgoingBitrate */ undefined,
/* enableSctp */ undefined,
maxSendMessageSize,
maxReceiveMessageSize,
/* sctpSendBufferSize */ undefined,
/* sctpPerStreamSendQueueLimit */ undefined,
/* sctpMaxReceiverWindowBufferSize */ undefined,
/* isDataChannel */ undefined
);

const directTransportOptions =
Expand Down Expand Up @@ -928,7 +921,11 @@ export class RouterImpl<RouterAppData extends AppData = AppData>
listenInfo,
listenIp,
enableSctp = true,
numSctpStreams = { OS: 1024, MIS: 1024 },
maxSendMessageSize = 262144,
maxReceiveMessageSize = 262144,
sctpSendBufferSize = 2000000,
sctpPerStreamSendQueueLimit = 2000000,
sctpMaxReceiverWindowBufferSize = 5242880,
enableRtx = false,
enableSrtp = false,
}: PipeToRouterOptions): Promise<PipeToRouterResult> {
Expand Down Expand Up @@ -1001,14 +998,22 @@ export class RouterImpl<RouterAppData extends AppData = AppData>
this.createPipeTransport({
listenInfo: listenInfo!,
enableSctp,
numSctpStreams,
maxSendMessageSize,
maxReceiveMessageSize,
sctpSendBufferSize,
sctpPerStreamSendQueueLimit,
sctpMaxReceiverWindowBufferSize,
enableRtx,
enableSrtp,
}),
router.createPipeTransport({
listenInfo: listenInfo!,
enableSctp,
numSctpStreams,
maxSendMessageSize,
maxReceiveMessageSize,
sctpSendBufferSize,
sctpPerStreamSendQueueLimit,
sctpMaxReceiverWindowBufferSize,
enableRtx,
enableSrtp,
}),
Expand Down
Loading
Loading