Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
### 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.
- `WebRtcTransport`, `PlainTransport`, `PipeTransport`: Add `sctpNegotiatedCapabilities()` getter.
- **Breaking change:** `WebRtcTransport`, `PlainTransport`, `PipeTransport` options: Remove `numSctpStreams` and `maxSctpMessageSize`, and add `maxSendMessageSize`, `maxReceiveMessageSize`, `sctpPerStreamSendQueueLimit` and `sctpMaxReceiverWindowBufferSize`.
- **Breaking change:** `DirectTransport` options: Remove `maxMessageSize`, and add `maxSendMessageSize` and `maxReceiveMessageSize`.
- **Breaking change:** Change `SctpParameters` type from `{ port, OS, MIS, maxMessageSize }` to `{ port, maxSendMessageSize, maxReceiveMessageSize, sendBufferSize, perStreamSendQueueLimit, maxReceiverWindowBufferSize, isDataChannel}`.

### 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
32 changes: 31 additions & 1 deletion node/src/PipeTransport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ import {
serializeRtpEncodingParameters,
serializeRtpParameters,
} from './rtpParametersFbsUtils';
import type { SctpParameters } from './sctpParametersTypes';
import type {
SctpParameters,
SctpNegotiatedCapabilities,
} from './sctpParametersTypes';
import type { SrtpParameters } from './srtpParametersTypes';
import {
parseSrtpParameters,
Expand All @@ -53,6 +56,7 @@ export type PipeTransportData = {
tuple: TransportTuple;
sctpParameters?: SctpParameters;
sctpState?: SctpState;
sctpNegotiatedCapabilities?: SctpNegotiatedCapabilities;
rtx: boolean;
srtpParameters?: SrtpParameters;
};
Expand Down Expand Up @@ -112,6 +116,10 @@ export class PipeTransportImpl<PipeTransportAppData extends AppData = AppData>
return this.#data.sctpState;
}

get sctpNegotiatedCapabilities(): SctpNegotiatedCapabilities | undefined {
return this.#data.sctpNegotiatedCapabilities;
}

get srtpParameters(): SrtpParameters | undefined {
return this.#data.srtpParameters;
}
Expand Down Expand Up @@ -311,6 +319,28 @@ export class PipeTransportImpl<PipeTransportAppData extends AppData = AppData>
break;
}

case Event.TRANSPORT_SCTP_NEGOTIATED_CAPABILITIES: {
const notification =
new FbsTransport.SctpNegotiatedCapabilitiesNotification();

data!.body(notification);

const sctpNegotiatedCapabilities: SctpNegotiatedCapabilities = {
negotiatedMaxOutboundStreams: notification
.negotiatedCapabilities()!
.negotiatedMaxOutboundStreams(),
negotiatedMaxInboundStreams: notification
.negotiatedCapabilities()!
.negotiatedMaxInboundStreams(),
};

this.#data.sctpNegotiatedCapabilities = sctpNegotiatedCapabilities;

super.handleSctpNegotiatedCapabilities(sctpNegotiatedCapabilities);

break;
}

case Event.TRANSPORT_TRACE: {
const notification = new FbsTransport.TraceNotification();

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

export type PipeTransportOptions<
Expand All @@ -24,22 +27,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 Expand Up @@ -155,6 +173,14 @@ export interface PipeTransport<
*/
get sctpState(): SctpState | undefined;

/**
* SCTP negotiated capabilities.
*
* @remarks
* - Only present if SCTP association is connected.
*/
get sctpNegotiatedCapabilities(): SctpNegotiatedCapabilities | undefined;

/**
* SRTP parameters.
*/
Expand Down
32 changes: 31 additions & 1 deletion node/src/PlainTransport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ import {
parseBaseTransportStats,
parseTransportTraceEventData,
} from './Transport';
import type { SctpParameters } from './sctpParametersTypes';
import type {
SctpParameters,
SctpNegotiatedCapabilities,
} from './sctpParametersTypes';
import type { SrtpParameters } from './srtpParametersTypes';
import {
parseSrtpParameters,
Expand All @@ -43,6 +46,7 @@ export type PlainTransportData = {
rtcpTuple?: TransportTuple;
sctpParameters?: SctpParameters;
sctpState?: SctpState;
sctpNegotiatedCapabilities?: SctpNegotiatedCapabilities;
srtpParameters?: SrtpParameters;
};

Expand Down Expand Up @@ -109,6 +113,10 @@ export class PlainTransportImpl<PlainTransportAppData extends AppData = AppData>
return this.#data.sctpState;
}

get sctpNegotiatedCapabilities(): SctpNegotiatedCapabilities | undefined {
return this.#data.sctpNegotiatedCapabilities;
}

get srtpParameters(): SrtpParameters | undefined {
return this.#data.srtpParameters;
}
Expand Down Expand Up @@ -277,6 +285,28 @@ export class PlainTransportImpl<PlainTransportAppData extends AppData = AppData>
break;
}

case Event.TRANSPORT_SCTP_NEGOTIATED_CAPABILITIES: {
const notification =
new FbsTransport.SctpNegotiatedCapabilitiesNotification();

data!.body(notification);

const sctpNegotiatedCapabilities: SctpNegotiatedCapabilities = {
negotiatedMaxOutboundStreams: notification
.negotiatedCapabilities()!
.negotiatedMaxOutboundStreams(),
negotiatedMaxInboundStreams: notification
.negotiatedCapabilities()!
.negotiatedMaxInboundStreams(),
};

this.#data.sctpNegotiatedCapabilities = sctpNegotiatedCapabilities;

super.handleSctpNegotiatedCapabilities(sctpNegotiatedCapabilities);

break;
}

case Event.TRANSPORT_TRACE: {
const notification = new FbsTransport.TraceNotification();

Expand Down
40 changes: 33 additions & 7 deletions node/src/PlainTransportTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ import type {
TransportObserverEvents,
} from './TransportTypes';
import type { SrtpParameters, SrtpCryptoSuite } from './srtpParametersTypes';
import type { SctpParameters, NumSctpStreams } from './sctpParametersTypes';
import type {
SctpParameters,
SctpNegotiatedCapabilities,
} from './sctpParametersTypes';
import type { Either, AppData } from './types';

export type PlainTransportOptions<
Expand All @@ -36,22 +39,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 Expand Up @@ -172,6 +190,14 @@ export interface PlainTransport<
*/
get sctpState(): SctpState | undefined;

/**
* SCTP negotiated capabilities.
*
* @remarks
* - Only present if SCTP association is connected.
*/
get sctpNegotiatedCapabilities(): SctpNegotiatedCapabilities | undefined;

/**
* SRTP parameters.
*/
Expand Down
Loading
Loading