mediasoup-client 3.21.0 → 3.23.0
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/README.md +9 -0
- package/lib/Device.d.ts +7 -3
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +22 -8
- package/lib/Producer.d.ts +0 -4
- package/lib/Producer.d.ts.map +1 -1
- package/lib/RtpParameters.d.ts.map +1 -1
- package/lib/Transport.d.ts +1 -1
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +1 -2
- package/lib/handlers/Chrome111.d.ts +4 -3
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +23 -32
- package/lib/handlers/Chrome74.d.ts +4 -3
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +38 -31
- package/lib/handlers/Firefox120.d.ts +3 -2
- package/lib/handlers/Firefox120.d.ts.map +1 -1
- package/lib/handlers/Firefox120.js +19 -5
- package/lib/handlers/HandlerInterface.d.ts +9 -3
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative106.d.ts +4 -3
- package/lib/handlers/ReactNative106.d.ts.map +1 -1
- package/lib/handlers/ReactNative106.js +22 -31
- package/lib/handlers/Safari12.d.ts +5 -4
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +22 -31
- package/lib/handlers/fakeEvents/FakeEventListener.d.ts.map +1 -1
- package/lib/handlers/ortc/utils.d.ts +8 -9
- package/lib/handlers/ortc/utils.d.ts.map +1 -1
- package/lib/handlers/ortc/utils.js +30 -39
- package/lib/handlers/sdp/commonUtils.d.ts +1 -9
- package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/commonUtils.js +0 -13
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.js +15 -5
- package/lib/test/test.js +3 -1
- package/npm-scripts.mjs +137 -25
- package/package.json +11 -9
package/lib/handlers/Chrome74.js
CHANGED
|
@@ -57,6 +57,7 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
57
57
|
_remoteSdp;
|
|
58
58
|
// Callback to request sending extended RTP capabilities on demand.
|
|
59
59
|
_getSendExtendedRtpCapabilities;
|
|
60
|
+
_forcedRtpExtensions;
|
|
60
61
|
// Initial server side DTLS role. If not 'auto', it will force the opposite
|
|
61
62
|
// value in client side.
|
|
62
63
|
_forcedLocalDtlsRole;
|
|
@@ -75,10 +76,10 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
75
76
|
/**
|
|
76
77
|
* Creates a factory function.
|
|
77
78
|
*/
|
|
78
|
-
static createFactory() {
|
|
79
|
+
static createFactory({ forcedRtpExtensions, }) {
|
|
79
80
|
return {
|
|
80
81
|
name: NAME,
|
|
81
|
-
factory: (options) => new Chrome74(options),
|
|
82
|
+
factory: (options) => new Chrome74({ ...options, forcedRtpExtensions }),
|
|
82
83
|
getNativeRtpCapabilities: async ({ direction, }) => {
|
|
83
84
|
logger.debug('getNativeRtpCapabilities() [direction:%o]', direction);
|
|
84
85
|
let pc = new RTCPeerConnection({
|
|
@@ -88,8 +89,14 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
88
89
|
rtcpMuxPolicy: 'require',
|
|
89
90
|
});
|
|
90
91
|
try {
|
|
91
|
-
pc.addTransceiver('audio', { direction });
|
|
92
|
-
|
|
92
|
+
const audioTransceiver = pc.addTransceiver('audio', { direction });
|
|
93
|
+
if (forcedRtpExtensions) {
|
|
94
|
+
ortcUtils.applyForcedRtpExtensions(audioTransceiver, forcedRtpExtensions);
|
|
95
|
+
}
|
|
96
|
+
const videoTransceiver = pc.addTransceiver('video', { direction });
|
|
97
|
+
if (forcedRtpExtensions) {
|
|
98
|
+
ortcUtils.applyForcedRtpExtensions(videoTransceiver, forcedRtpExtensions);
|
|
99
|
+
}
|
|
93
100
|
const offer = await pc.createOffer();
|
|
94
101
|
try {
|
|
95
102
|
pc.close();
|
|
@@ -112,7 +119,7 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
112
119
|
},
|
|
113
120
|
};
|
|
114
121
|
}
|
|
115
|
-
static getLocalRtpCapabilities(localSdpObject
|
|
122
|
+
static getLocalRtpCapabilities(localSdpObject) {
|
|
116
123
|
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
117
124
|
sdpObject: localSdpObject,
|
|
118
125
|
});
|
|
@@ -120,12 +127,9 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
120
127
|
ortc.validateAndNormalizeRtpCapabilities(nativeRtpCapabilities);
|
|
121
128
|
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
122
129
|
ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
|
|
123
|
-
for (const headerExtension of extraHeaderExtensions) {
|
|
124
|
-
ortcUtils.addHeaderExtensionSupport(nativeRtpCapabilities, headerExtension);
|
|
125
|
-
}
|
|
126
130
|
return nativeRtpCapabilities;
|
|
127
131
|
}
|
|
128
|
-
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
|
|
132
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, forcedRtpExtensions, }) {
|
|
129
133
|
super();
|
|
130
134
|
logger.debug('constructor()');
|
|
131
135
|
this._direction = direction;
|
|
@@ -138,6 +142,7 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
138
142
|
sctpParameters,
|
|
139
143
|
});
|
|
140
144
|
this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
|
|
145
|
+
this._forcedRtpExtensions = forcedRtpExtensions;
|
|
141
146
|
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
|
|
142
147
|
this._forcedLocalDtlsRole =
|
|
143
148
|
dtlsParameters.role === 'server' ? 'client' : 'server';
|
|
@@ -223,7 +228,7 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
223
228
|
this.assertNotClosed();
|
|
224
229
|
return this._pc.getStats();
|
|
225
230
|
}
|
|
226
|
-
async send({ track, streamId, encodings, codecOptions,
|
|
231
|
+
async send({ track, streamId, encodings, codecOptions, codec, onRtpSender, }) {
|
|
227
232
|
this.assertNotClosed();
|
|
228
233
|
this.assertSendDirection();
|
|
229
234
|
logger.debug('send() [kind:%s, track.id:%s, streamId:%s]', track.kind, track.id, streamId);
|
|
@@ -238,18 +243,18 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
238
243
|
streams: [this._sendStream],
|
|
239
244
|
sendEncodings: encodings,
|
|
240
245
|
});
|
|
246
|
+
if (this._forcedRtpExtensions) {
|
|
247
|
+
ortcUtils.applyForcedRtpExtensions(transceiver, this._forcedRtpExtensions);
|
|
248
|
+
}
|
|
249
|
+
if (onRtpSender) {
|
|
250
|
+
onRtpSender(transceiver.sender);
|
|
251
|
+
}
|
|
241
252
|
let offer = await this._pc.createOffer();
|
|
242
253
|
let localSdpObject = sdpTransform.parse(offer.sdp);
|
|
243
254
|
if (localSdpObject.extmapAllowMixed) {
|
|
244
255
|
this._remoteSdp.setSessionExtmapAllowMixed();
|
|
245
256
|
}
|
|
246
|
-
const
|
|
247
|
-
extraHeaderExtensions.push({
|
|
248
|
-
uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time',
|
|
249
|
-
kind: track.kind,
|
|
250
|
-
direction: 'sendonly',
|
|
251
|
-
});
|
|
252
|
-
const nativeRtpCapabilities = Chrome74.getLocalRtpCapabilities(localSdpObject, extraHeaderExtensions);
|
|
257
|
+
const nativeRtpCapabilities = Chrome74.getLocalRtpCapabilities(localSdpObject);
|
|
253
258
|
const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
|
|
254
259
|
// Generic sending RTP parameters.
|
|
255
260
|
const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
@@ -286,20 +291,6 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
286
291
|
};
|
|
287
292
|
}
|
|
288
293
|
logger.debug('send() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
289
|
-
// Optimize. Only generate new offer if needed.
|
|
290
|
-
if (headerExtensionOptions?.absCaptureTime) {
|
|
291
|
-
offerMediaObject = localSdpObject.media[mediaSectionIdx.idx];
|
|
292
|
-
sdpCommonUtils.addHeaderExtension({
|
|
293
|
-
offerMediaObject,
|
|
294
|
-
headerExtensionUri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time',
|
|
295
|
-
headerExtensionId: sendingRemoteRtpParameters.headerExtensions.find(headerExtension => headerExtension.uri ===
|
|
296
|
-
'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time').id,
|
|
297
|
-
});
|
|
298
|
-
offer = {
|
|
299
|
-
type: 'offer',
|
|
300
|
-
sdp: sdpTransform.write(localSdpObject),
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
294
|
await this._pc.setLocalDescription(offer);
|
|
304
295
|
// We can now get the transceiver.mid.
|
|
305
296
|
const localId = transceiver.mid;
|
|
@@ -594,6 +585,22 @@ class Chrome74 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
594
585
|
};
|
|
595
586
|
logger.debug('receive() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
596
587
|
await this._pc.setRemoteDescription(offer);
|
|
588
|
+
for (const options of optionsList) {
|
|
589
|
+
const { trackId, onRtpReceiver } = options;
|
|
590
|
+
if (onRtpReceiver) {
|
|
591
|
+
const localId = mapLocalId.get(trackId);
|
|
592
|
+
const transceiver = this._pc
|
|
593
|
+
.getTransceivers()
|
|
594
|
+
.find((t) => t.mid === localId);
|
|
595
|
+
if (!transceiver) {
|
|
596
|
+
throw new Error('transceiver not found');
|
|
597
|
+
}
|
|
598
|
+
if (this._forcedRtpExtensions) {
|
|
599
|
+
ortcUtils.applyForcedRtpExtensions(transceiver, this._forcedRtpExtensions);
|
|
600
|
+
}
|
|
601
|
+
onRtpReceiver(transceiver.receiver);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
597
604
|
let answer = await this._pc.createAnswer();
|
|
598
605
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
599
606
|
for (const options of optionsList) {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { EnhancedEventEmitter } from '../enhancedEvents';
|
|
2
2
|
import type { IceParameters } from '../Transport';
|
|
3
|
-
import type { HandlerFactory, HandlerInterface, HandlerEvents, HandlerSendOptions, HandlerSendResult, HandlerReceiveOptions, HandlerReceiveResult, HandlerSendDataChannelOptions, HandlerSendDataChannelResult, HandlerReceiveDataChannelOptions, HandlerReceiveDataChannelResult } from './HandlerInterface';
|
|
3
|
+
import type { HandlerFactoryOptions, HandlerFactory, HandlerInterface, HandlerEvents, HandlerSendOptions, HandlerSendResult, HandlerReceiveOptions, HandlerReceiveResult, HandlerSendDataChannelOptions, HandlerSendDataChannelResult, HandlerReceiveDataChannelOptions, HandlerReceiveDataChannelResult } from './HandlerInterface';
|
|
4
4
|
export declare class Firefox120 extends EnhancedEventEmitter<HandlerEvents> implements HandlerInterface {
|
|
5
5
|
private _closed;
|
|
6
6
|
private _direction;
|
|
7
7
|
private _sctpMaxReceiveMessageSize?;
|
|
8
8
|
private _remoteSdp;
|
|
9
9
|
private _getSendExtendedRtpCapabilities;
|
|
10
|
+
private _forcedRtpExtensions?;
|
|
10
11
|
private _pc;
|
|
11
12
|
private readonly _mapMidTransceiver;
|
|
12
13
|
private readonly _sendStream;
|
|
@@ -16,7 +17,7 @@ export declare class Firefox120 extends EnhancedEventEmitter<HandlerEvents> impl
|
|
|
16
17
|
/**
|
|
17
18
|
* Creates a factory function.
|
|
18
19
|
*/
|
|
19
|
-
static createFactory(): HandlerFactory;
|
|
20
|
+
static createFactory({ forcedRtpExtensions, }: HandlerFactoryOptions): HandlerFactory;
|
|
20
21
|
private static getLocalRtpCapabilities;
|
|
21
22
|
private constructor();
|
|
22
23
|
get name(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Firefox120.d.ts","sourceRoot":"","sources":["../../src/handlers/Firefox120.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAKzD,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AAY5D,OAAO,KAAK,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EAGb,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;AAM5B,qBAAa,UACZ,SAAQ,oBAAoB,CAAC,aAAa,CAC1C,YAAW,gBAAgB;IAG3B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,CAAC,0BAA0B,CAAC,CAAS;IAE5C,OAAO,CAAC,UAAU,CAAY;IAE9B,OAAO,CAAC,+BAA+B,CAEV;
|
|
1
|
+
{"version":3,"file":"Firefox120.d.ts","sourceRoot":"","sources":["../../src/handlers/Firefox120.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,7 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
57
57
|
_remoteSdp;
|
|
58
58
|
// Callback to request sending extended RTP capabilities on demand.
|
|
59
59
|
_getSendExtendedRtpCapabilities;
|
|
60
|
+
_forcedRtpExtensions;
|
|
60
61
|
// RTCPeerConnection instance.
|
|
61
62
|
_pc;
|
|
62
63
|
// Map of RTCTransceivers indexed by MID.
|
|
@@ -72,10 +73,10 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
72
73
|
/**
|
|
73
74
|
* Creates a factory function.
|
|
74
75
|
*/
|
|
75
|
-
static createFactory() {
|
|
76
|
+
static createFactory({ forcedRtpExtensions, }) {
|
|
76
77
|
return {
|
|
77
78
|
name: NAME,
|
|
78
|
-
factory: (options) => new Firefox120(options),
|
|
79
|
+
factory: (options) => new Firefox120({ ...options, forcedRtpExtensions }),
|
|
79
80
|
getNativeRtpCapabilities: async ({ direction, }) => {
|
|
80
81
|
logger.debug('getNativeRtpCapabilities() [direction:%o]', direction);
|
|
81
82
|
let pc = new RTCPeerConnection({
|
|
@@ -92,14 +93,20 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
92
93
|
const fakeStream = canvas.captureStream();
|
|
93
94
|
const fakeVideoTrack = fakeStream.getVideoTracks()[0];
|
|
94
95
|
try {
|
|
95
|
-
pc.addTransceiver('audio', { direction });
|
|
96
|
-
|
|
96
|
+
const audioTransceiver = pc.addTransceiver('audio', { direction });
|
|
97
|
+
if (forcedRtpExtensions) {
|
|
98
|
+
ortcUtils.applyForcedRtpExtensions(audioTransceiver, forcedRtpExtensions);
|
|
99
|
+
}
|
|
100
|
+
const videoTransceiver = pc.addTransceiver(fakeVideoTrack, {
|
|
97
101
|
direction,
|
|
98
102
|
sendEncodings: [
|
|
99
103
|
{ rid: 'r0', maxBitrate: 100000 },
|
|
100
104
|
{ rid: 'r1', maxBitrate: 500000 },
|
|
101
105
|
],
|
|
102
106
|
});
|
|
107
|
+
if (forcedRtpExtensions) {
|
|
108
|
+
ortcUtils.applyForcedRtpExtensions(videoTransceiver, forcedRtpExtensions);
|
|
109
|
+
}
|
|
103
110
|
const offer = await pc.createOffer();
|
|
104
111
|
try {
|
|
105
112
|
canvas.remove();
|
|
@@ -146,7 +153,7 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
146
153
|
ortc.validateAndNormalizeRtpCapabilities(nativeRtpCapabilities);
|
|
147
154
|
return nativeRtpCapabilities;
|
|
148
155
|
}
|
|
149
|
-
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
|
|
156
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, forcedRtpExtensions, }) {
|
|
150
157
|
super();
|
|
151
158
|
logger.debug('constructor()');
|
|
152
159
|
this._direction = direction;
|
|
@@ -159,6 +166,7 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
159
166
|
sctpParameters,
|
|
160
167
|
});
|
|
161
168
|
this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
|
|
169
|
+
this._forcedRtpExtensions = forcedRtpExtensions;
|
|
162
170
|
this._pc = new RTCPeerConnection({
|
|
163
171
|
iceServers: iceServers ?? [],
|
|
164
172
|
iceTransportPolicy: iceTransportPolicy ?? 'all',
|
|
@@ -258,6 +266,9 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
258
266
|
streams: [this._sendStream],
|
|
259
267
|
sendEncodings: encodings,
|
|
260
268
|
});
|
|
269
|
+
if (this._forcedRtpExtensions) {
|
|
270
|
+
ortcUtils.applyForcedRtpExtensions(transceiver, this._forcedRtpExtensions);
|
|
271
|
+
}
|
|
261
272
|
if (onRtpSender) {
|
|
262
273
|
onRtpSender(transceiver.sender);
|
|
263
274
|
}
|
|
@@ -584,6 +595,9 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
584
595
|
if (!transceiver) {
|
|
585
596
|
throw new Error('transceiver not found');
|
|
586
597
|
}
|
|
598
|
+
if (this._forcedRtpExtensions) {
|
|
599
|
+
ortcUtils.applyForcedRtpExtensions(transceiver, this._forcedRtpExtensions);
|
|
600
|
+
}
|
|
587
601
|
onRtpReceiver(transceiver.receiver);
|
|
588
602
|
}
|
|
589
603
|
}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { EnhancedEventEmitter } from '../enhancedEvents';
|
|
2
2
|
import type { IceParameters, IceCandidate, DtlsParameters, IceGatheringState, ConnectionState } from '../Transport';
|
|
3
|
-
import type { ProducerCodecOptions,
|
|
3
|
+
import type { ProducerCodecOptions, OnRtpSenderCallback } from '../Producer';
|
|
4
4
|
import type { OnRtpReceiverCallback } from '../Consumer';
|
|
5
|
-
import type { RtpCapabilities, RtpCodecCapability, RtpParameters, RtpEncodingParameters, ExtendedRtpCapabilities } from '../RtpParameters';
|
|
5
|
+
import type { RtpCapabilities, RtpCodecCapability, RtpParameters, RtpEncodingParameters, RtpHeaderExtensionUri, ExtendedRtpCapabilities } from '../RtpParameters';
|
|
6
6
|
import type { SctpParameters, SctpStreamParameters } from '../SctpParameters';
|
|
7
|
+
export type HandlerFactoryOptions = {
|
|
8
|
+
forcedRtpExtensions?: HandlerForcedRtpExtensions;
|
|
9
|
+
};
|
|
10
|
+
export type HandlerForcedRtpExtensions = {
|
|
11
|
+
[K in RtpHeaderExtensionUri]?: boolean;
|
|
12
|
+
};
|
|
7
13
|
export type HandlerFactory = {
|
|
8
14
|
name: string;
|
|
9
15
|
factory: (options: HandlerOptions) => HandlerInterface;
|
|
@@ -19,6 +25,7 @@ export type HandlerOptions = {
|
|
|
19
25
|
iceTransportPolicy?: RTCIceTransportPolicy;
|
|
20
26
|
additionalSettings?: Partial<RTCConfiguration>;
|
|
21
27
|
getSendExtendedRtpCapabilities: (nativeSendRtpCapabilities: RtpCapabilities) => ExtendedRtpCapabilities;
|
|
28
|
+
forcedRtpExtensions?: HandlerForcedRtpExtensions;
|
|
22
29
|
};
|
|
23
30
|
export type HandlerGetNativeRtpCapabilitiesOptions = {
|
|
24
31
|
direction: Extract<RTCRtpTransceiverDirection, 'sendonly' | 'recvonly'>;
|
|
@@ -34,7 +41,6 @@ export type HandlerSendOptions = {
|
|
|
34
41
|
streamId?: string;
|
|
35
42
|
encodings?: RtpEncodingParameters[];
|
|
36
43
|
codecOptions?: ProducerCodecOptions;
|
|
37
|
-
headerExtensionOptions?: ProducerHeaderExtensionOptions;
|
|
38
44
|
codec?: RtpCodecCapability;
|
|
39
45
|
onRtpSender?: OnRtpSenderCallback;
|
|
40
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlerInterface.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"HandlerInterface.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerInterface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { EnhancedEventEmitter } from '../enhancedEvents';
|
|
2
2
|
import type { IceParameters } from '../Transport';
|
|
3
|
-
import type { HandlerFactory, HandlerInterface, HandlerEvents, HandlerSendOptions, HandlerSendResult, HandlerReceiveOptions, HandlerReceiveResult, HandlerSendDataChannelOptions, HandlerSendDataChannelResult, HandlerReceiveDataChannelOptions, HandlerReceiveDataChannelResult } from './HandlerInterface';
|
|
3
|
+
import type { HandlerFactoryOptions, HandlerFactory, HandlerInterface, HandlerEvents, HandlerSendOptions, HandlerSendResult, HandlerReceiveOptions, HandlerReceiveResult, HandlerSendDataChannelOptions, HandlerSendDataChannelResult, HandlerReceiveDataChannelOptions, HandlerReceiveDataChannelResult } from './HandlerInterface';
|
|
4
4
|
export declare class ReactNative106 extends EnhancedEventEmitter<HandlerEvents> implements HandlerInterface {
|
|
5
5
|
private _closed;
|
|
6
6
|
private _direction;
|
|
7
7
|
private _sctpMaxReceiveMessageSize?;
|
|
8
8
|
private _remoteSdp;
|
|
9
9
|
private _getSendExtendedRtpCapabilities;
|
|
10
|
+
private _forcedRtpExtensions?;
|
|
10
11
|
private _forcedLocalDtlsRole?;
|
|
11
12
|
private _pc;
|
|
12
13
|
private readonly _mapMidTransceiver;
|
|
@@ -17,7 +18,7 @@ export declare class ReactNative106 extends EnhancedEventEmitter<HandlerEvents>
|
|
|
17
18
|
/**
|
|
18
19
|
* Creates a factory function.
|
|
19
20
|
*/
|
|
20
|
-
static createFactory(): HandlerFactory;
|
|
21
|
+
static createFactory({ forcedRtpExtensions, }: HandlerFactoryOptions): HandlerFactory;
|
|
21
22
|
private static getLocalRtpCapabilities;
|
|
22
23
|
private constructor();
|
|
23
24
|
get name(): string;
|
|
@@ -25,7 +26,7 @@ export declare class ReactNative106 extends EnhancedEventEmitter<HandlerEvents>
|
|
|
25
26
|
updateIceServers(iceServers: RTCIceServer[]): Promise<void>;
|
|
26
27
|
restartIce(iceParameters: IceParameters): Promise<void>;
|
|
27
28
|
getTransportStats(): Promise<RTCStatsReport>;
|
|
28
|
-
send({ track, streamId, encodings, codecOptions,
|
|
29
|
+
send({ track, streamId, encodings, codecOptions, codec, onRtpSender, }: HandlerSendOptions): Promise<HandlerSendResult>;
|
|
29
30
|
stopSending(localId: string): Promise<void>;
|
|
30
31
|
pauseSending(localId: string): Promise<void>;
|
|
31
32
|
resumeSending(localId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactNative106.d.ts","sourceRoot":"","sources":["../../src/handlers/ReactNative106.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAKzD,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ReactNative106.d.ts","sourceRoot":"","sources":["../../src/handlers/ReactNative106.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
57
57
|
_remoteSdp;
|
|
58
58
|
// Callback to request sending extended RTP capabilities on demand.
|
|
59
59
|
_getSendExtendedRtpCapabilities;
|
|
60
|
+
_forcedRtpExtensions;
|
|
60
61
|
// Initial server side DTLS role. If not 'auto', it will force the opposite
|
|
61
62
|
// value in client side.
|
|
62
63
|
_forcedLocalDtlsRole;
|
|
@@ -75,10 +76,10 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
75
76
|
/**
|
|
76
77
|
* Creates a factory function.
|
|
77
78
|
*/
|
|
78
|
-
static createFactory() {
|
|
79
|
+
static createFactory({ forcedRtpExtensions, }) {
|
|
79
80
|
return {
|
|
80
81
|
name: NAME,
|
|
81
|
-
factory: (options) => new ReactNative106(options),
|
|
82
|
+
factory: (options) => new ReactNative106({ ...options, forcedRtpExtensions }),
|
|
82
83
|
getNativeRtpCapabilities: async ({ direction, }) => {
|
|
83
84
|
logger.debug('getNativeRtpCapabilities() [direction:%o]', direction);
|
|
84
85
|
let pc = new RTCPeerConnection({
|
|
@@ -88,8 +89,14 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
88
89
|
rtcpMuxPolicy: 'require',
|
|
89
90
|
});
|
|
90
91
|
try {
|
|
91
|
-
pc.addTransceiver('audio', { direction });
|
|
92
|
-
|
|
92
|
+
const audioTransceiver = pc.addTransceiver('audio', { direction });
|
|
93
|
+
if (forcedRtpExtensions) {
|
|
94
|
+
ortcUtils.applyForcedRtpExtensions(audioTransceiver, forcedRtpExtensions);
|
|
95
|
+
}
|
|
96
|
+
const videoTransceiver = pc.addTransceiver('video', { direction });
|
|
97
|
+
if (forcedRtpExtensions) {
|
|
98
|
+
ortcUtils.applyForcedRtpExtensions(videoTransceiver, forcedRtpExtensions);
|
|
99
|
+
}
|
|
93
100
|
const offer = await pc.createOffer();
|
|
94
101
|
try {
|
|
95
102
|
pc.close();
|
|
@@ -112,7 +119,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
112
119
|
},
|
|
113
120
|
};
|
|
114
121
|
}
|
|
115
|
-
static getLocalRtpCapabilities(localSdpObject
|
|
122
|
+
static getLocalRtpCapabilities(localSdpObject) {
|
|
116
123
|
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
117
124
|
sdpObject: localSdpObject,
|
|
118
125
|
});
|
|
@@ -120,12 +127,9 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
120
127
|
ortc.validateAndNormalizeRtpCapabilities(nativeRtpCapabilities);
|
|
121
128
|
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
122
129
|
ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
|
|
123
|
-
for (const headerExtension of extraHeaderExtensions) {
|
|
124
|
-
ortcUtils.addHeaderExtensionSupport(nativeRtpCapabilities, headerExtension);
|
|
125
|
-
}
|
|
126
130
|
return nativeRtpCapabilities;
|
|
127
131
|
}
|
|
128
|
-
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
|
|
132
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, forcedRtpExtensions, }) {
|
|
129
133
|
super();
|
|
130
134
|
logger.debug('constructor()');
|
|
131
135
|
this._direction = direction;
|
|
@@ -138,6 +142,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
138
142
|
sctpParameters,
|
|
139
143
|
});
|
|
140
144
|
this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
|
|
145
|
+
this._forcedRtpExtensions = forcedRtpExtensions;
|
|
141
146
|
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
|
|
142
147
|
this._forcedLocalDtlsRole =
|
|
143
148
|
dtlsParameters.role === 'server' ? 'client' : 'server';
|
|
@@ -227,7 +232,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
227
232
|
this.assertNotClosed();
|
|
228
233
|
return this._pc.getStats();
|
|
229
234
|
}
|
|
230
|
-
async send({ track, streamId, encodings, codecOptions,
|
|
235
|
+
async send({ track, streamId, encodings, codecOptions, codec, onRtpSender, }) {
|
|
231
236
|
this.assertNotClosed();
|
|
232
237
|
this.assertSendDirection();
|
|
233
238
|
logger.debug('send() [kind:%s, track.id:%s, streamId:%s]', track.kind, track.id, streamId);
|
|
@@ -242,6 +247,9 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
242
247
|
streams: [this._sendStream],
|
|
243
248
|
sendEncodings: encodings,
|
|
244
249
|
});
|
|
250
|
+
if (this._forcedRtpExtensions) {
|
|
251
|
+
ortcUtils.applyForcedRtpExtensions(transceiver, this._forcedRtpExtensions);
|
|
252
|
+
}
|
|
245
253
|
if (onRtpSender) {
|
|
246
254
|
onRtpSender(transceiver.sender);
|
|
247
255
|
}
|
|
@@ -250,13 +258,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
250
258
|
if (localSdpObject.extmapAllowMixed) {
|
|
251
259
|
this._remoteSdp.setSessionExtmapAllowMixed();
|
|
252
260
|
}
|
|
253
|
-
const
|
|
254
|
-
extraHeaderExtensions.push({
|
|
255
|
-
uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time',
|
|
256
|
-
kind: track.kind,
|
|
257
|
-
direction: 'sendonly',
|
|
258
|
-
});
|
|
259
|
-
const nativeRtpCapabilities = ReactNative106.getLocalRtpCapabilities(localSdpObject, extraHeaderExtensions);
|
|
261
|
+
const nativeRtpCapabilities = ReactNative106.getLocalRtpCapabilities(localSdpObject);
|
|
260
262
|
const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
|
|
261
263
|
// Generic sending RTP parameters.
|
|
262
264
|
const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
@@ -292,20 +294,6 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
292
294
|
sdp: sdpTransform.write(localSdpObject),
|
|
293
295
|
};
|
|
294
296
|
}
|
|
295
|
-
// Optimize. Only generate new offer if needed.
|
|
296
|
-
if (headerExtensionOptions?.absCaptureTime) {
|
|
297
|
-
offerMediaObject = localSdpObject.media[mediaSectionIdx.idx];
|
|
298
|
-
sdpCommonUtils.addHeaderExtension({
|
|
299
|
-
offerMediaObject,
|
|
300
|
-
headerExtensionUri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time',
|
|
301
|
-
headerExtensionId: sendingRemoteRtpParameters.headerExtensions.find(headerExtension => headerExtension.uri ===
|
|
302
|
-
'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time').id,
|
|
303
|
-
});
|
|
304
|
-
offer = {
|
|
305
|
-
type: 'offer',
|
|
306
|
-
sdp: sdpTransform.write(localSdpObject),
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
297
|
logger.debug('send() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
310
298
|
await this._pc.setLocalDescription(offer);
|
|
311
299
|
// We can now get the transceiver.mid.
|
|
@@ -629,6 +617,9 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
629
617
|
if (!transceiver) {
|
|
630
618
|
throw new Error('transceiver not found');
|
|
631
619
|
}
|
|
620
|
+
if (this._forcedRtpExtensions) {
|
|
621
|
+
ortcUtils.applyForcedRtpExtensions(transceiver, this._forcedRtpExtensions);
|
|
622
|
+
}
|
|
632
623
|
onRtpReceiver(transceiver.receiver);
|
|
633
624
|
}
|
|
634
625
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { EnhancedEventEmitter } from '../enhancedEvents';
|
|
2
2
|
import type { IceParameters } from '../Transport';
|
|
3
|
-
import type { HandlerFactory, HandlerInterface, HandlerEvents, HandlerOptions, HandlerSendOptions, HandlerSendResult, HandlerReceiveOptions, HandlerReceiveResult, HandlerSendDataChannelOptions, HandlerSendDataChannelResult, HandlerReceiveDataChannelOptions, HandlerReceiveDataChannelResult } from './HandlerInterface';
|
|
3
|
+
import type { HandlerFactoryOptions, HandlerFactory, HandlerInterface, HandlerEvents, HandlerOptions, HandlerSendOptions, HandlerSendResult, HandlerReceiveOptions, HandlerReceiveResult, HandlerSendDataChannelOptions, HandlerSendDataChannelResult, HandlerReceiveDataChannelOptions, HandlerReceiveDataChannelResult } from './HandlerInterface';
|
|
4
4
|
export declare class Safari12 extends EnhancedEventEmitter<HandlerEvents> implements HandlerInterface {
|
|
5
5
|
private _closed;
|
|
6
6
|
private _direction;
|
|
7
7
|
private _sctpMaxReceiveMessageSize?;
|
|
8
8
|
private _remoteSdp;
|
|
9
9
|
private _getSendExtendedRtpCapabilities;
|
|
10
|
+
private _forcedRtpExtensions?;
|
|
10
11
|
private _forcedLocalDtlsRole?;
|
|
11
12
|
private _pc;
|
|
12
13
|
private readonly _mapMidTransceiver;
|
|
@@ -17,15 +18,15 @@ export declare class Safari12 extends EnhancedEventEmitter<HandlerEvents> implem
|
|
|
17
18
|
/**
|
|
18
19
|
* Creates a factory function.
|
|
19
20
|
*/
|
|
20
|
-
static createFactory(): HandlerFactory;
|
|
21
|
+
static createFactory({ forcedRtpExtensions, }: HandlerFactoryOptions): HandlerFactory;
|
|
21
22
|
private static getLocalRtpCapabilities;
|
|
22
|
-
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }: HandlerOptions);
|
|
23
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, forcedRtpExtensions, }: HandlerOptions);
|
|
23
24
|
get name(): string;
|
|
24
25
|
close(): void;
|
|
25
26
|
updateIceServers(iceServers: RTCIceServer[]): Promise<void>;
|
|
26
27
|
restartIce(iceParameters: IceParameters): Promise<void>;
|
|
27
28
|
getTransportStats(): Promise<RTCStatsReport>;
|
|
28
|
-
send({ track, streamId, encodings, codecOptions,
|
|
29
|
+
send({ track, streamId, encodings, codecOptions, codec, onRtpSender, }: HandlerSendOptions): Promise<HandlerSendResult>;
|
|
29
30
|
stopSending(localId: string): Promise<void>;
|
|
30
31
|
pauseSending(localId: string): Promise<void>;
|
|
31
32
|
resumeSending(localId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAKzD,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"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"}
|