mediasoup-client 3.7.0 → 3.7.2
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 +85 -112
- package/lib/Consumer.d.ts +1 -1
- package/lib/Consumer.d.ts.map +1 -1
- package/lib/Consumer.js +1 -1
- package/lib/DataConsumer.d.ts +1 -1
- package/lib/DataConsumer.d.ts.map +1 -1
- package/lib/DataConsumer.js +1 -1
- package/lib/DataProducer.d.ts +1 -1
- package/lib/DataProducer.d.ts.map +1 -1
- package/lib/DataProducer.js +1 -1
- package/lib/Device.d.ts +3 -3
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +43 -42
- package/lib/EnhancedEventEmitter.d.ts.map +1 -1
- package/lib/Logger.d.ts.map +1 -1
- package/lib/Producer.d.ts +5 -15
- package/lib/Producer.d.ts.map +1 -1
- package/lib/Producer.js +2 -2
- package/lib/RtpParameters.d.ts.map +1 -1
- package/lib/SctpParameters.d.ts.map +1 -1
- package/lib/Transport.d.ts +14 -10
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +71 -53
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +6 -6
- package/lib/handlers/Chrome111.d.ts +4 -4
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +64 -57
- package/lib/handlers/Chrome55.d.ts +4 -4
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +75 -62
- package/lib/handlers/Chrome67.d.ts +4 -4
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +77 -65
- package/lib/handlers/Chrome70.d.ts +4 -4
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +68 -60
- package/lib/handlers/Chrome74.d.ts +4 -4
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +65 -58
- package/lib/handlers/Edge11.d.ts +1 -1
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +43 -37
- package/lib/handlers/FakeHandler.d.ts +3 -3
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +19 -22
- package/lib/handlers/Firefox60.d.ts +4 -4
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +65 -52
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative.d.ts +4 -4
- package/lib/handlers/ReactNative.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +76 -64
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts +4 -4
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
- package/lib/handlers/ReactNativeUnifiedPlan.js +65 -58
- package/lib/handlers/Safari11.d.ts +4 -4
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +74 -61
- package/lib/handlers/Safari12.d.ts +4 -4
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +65 -57
- package/lib/handlers/ortc/edgeUtils.d.ts.map +1 -1
- package/lib/handlers/ortc/utils.d.ts.map +1 -1
- package/lib/handlers/ortc/utils.js +2 -2
- package/lib/handlers/sdp/MediaSection.d.ts +5 -5
- package/lib/handlers/sdp/MediaSection.d.ts.map +1 -1
- package/lib/handlers/sdp/MediaSection.js +287 -305
- package/lib/handlers/sdp/RemoteSdp.d.ts +5 -5
- package/lib/handlers/sdp/RemoteSdp.d.ts.map +1 -1
- package/lib/handlers/sdp/RemoteSdp.js +28 -30
- package/lib/handlers/sdp/commonUtils.d.ts +4 -4
- package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/commonUtils.js +41 -46
- package/lib/handlers/sdp/plainRtpUtils.d.ts +2 -2
- package/lib/handlers/sdp/plainRtpUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/plainRtpUtils.js +5 -7
- package/lib/handlers/sdp/planBUtils.d.ts +2 -2
- package/lib/handlers/sdp/planBUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/planBUtils.js +11 -14
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts +2 -2
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/unifiedPlanUtils.js +11 -14
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.d.ts.map +1 -1
- package/lib/ortc.js +90 -92
- package/lib/scalabilityModes.d.ts.map +1 -1
- package/lib/scalabilityModes.js +2 -2
- package/lib/{tests → test}/fakeParameters.d.ts +2 -2
- package/lib/test/fakeParameters.d.ts.map +1 -0
- package/lib/test/fakeParameters.js +645 -0
- package/lib/{tests → test}/test.d.ts.map +1 -1
- package/lib/{tests → test}/test.js +466 -495
- package/lib/test/uaTestCases.d.ts.map +1 -0
- package/lib/{tests → test}/uaTestCases.js +17 -17
- package/lib/types.d.ts.map +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/npm-scripts.mjs +72 -98
- package/package.json +93 -90
- package/lib/tests/fakeParameters.d.ts.map +0 -1
- package/lib/tests/fakeParameters.js +0 -662
- package/lib/tests/uaTestCases.d.ts.map +0 -1
- /package/lib/{tests → test}/test.d.ts +0 -0
- /package/lib/{tests → test}/uaTestCases.d.ts +0 -0
package/lib/errors.js
CHANGED
|
@@ -8,13 +8,13 @@ class UnsupportedError extends Error {
|
|
|
8
8
|
constructor(message) {
|
|
9
9
|
super(message);
|
|
10
10
|
this.name = 'UnsupportedError';
|
|
11
|
-
if (Error.hasOwnProperty('captureStackTrace'))
|
|
12
|
-
|
|
11
|
+
if (Error.hasOwnProperty('captureStackTrace')) {
|
|
12
|
+
// Just in V8.
|
|
13
13
|
// @ts-ignore
|
|
14
14
|
Error.captureStackTrace(this, UnsupportedError);
|
|
15
15
|
}
|
|
16
16
|
else {
|
|
17
|
-
this.stack =
|
|
17
|
+
this.stack = new Error(message).stack;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -26,13 +26,13 @@ class InvalidStateError extends Error {
|
|
|
26
26
|
constructor(message) {
|
|
27
27
|
super(message);
|
|
28
28
|
this.name = 'InvalidStateError';
|
|
29
|
-
if (Error.hasOwnProperty('captureStackTrace'))
|
|
30
|
-
|
|
29
|
+
if (Error.hasOwnProperty('captureStackTrace')) {
|
|
30
|
+
// Just in V8.
|
|
31
31
|
// @ts-ignore
|
|
32
32
|
Error.captureStackTrace(this, InvalidStateError);
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
|
-
this.stack =
|
|
35
|
+
this.stack = new Error(message).stack;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -24,11 +24,11 @@ export declare class Chrome111 extends HandlerInterface {
|
|
|
24
24
|
close(): void;
|
|
25
25
|
getNativeRtpCapabilities(): Promise<RtpCapabilities>;
|
|
26
26
|
getNativeSctpCapabilities(): Promise<SctpCapabilities>;
|
|
27
|
-
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities }: HandlerRunOptions): void;
|
|
27
|
+
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities, }: HandlerRunOptions): void;
|
|
28
28
|
updateIceServers(iceServers: RTCIceServer[]): Promise<void>;
|
|
29
29
|
restartIce(iceParameters: IceParameters): Promise<void>;
|
|
30
30
|
getTransportStats(): Promise<RTCStatsReport>;
|
|
31
|
-
send({ track, encodings, codecOptions, codec }: HandlerSendOptions): Promise<HandlerSendResult>;
|
|
31
|
+
send({ track, encodings, codecOptions, codec, }: HandlerSendOptions): Promise<HandlerSendResult>;
|
|
32
32
|
stopSending(localId: string): Promise<void>;
|
|
33
33
|
pauseSending(localId: string): Promise<void>;
|
|
34
34
|
resumeSending(localId: string): Promise<void>;
|
|
@@ -36,13 +36,13 @@ export declare class Chrome111 extends HandlerInterface {
|
|
|
36
36
|
setMaxSpatialLayer(localId: string, spatialLayer: number): Promise<void>;
|
|
37
37
|
setRtpEncodingParameters(localId: string, params: any): Promise<void>;
|
|
38
38
|
getSenderStats(localId: string): Promise<RTCStatsReport>;
|
|
39
|
-
sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
|
|
39
|
+
sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol, }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
|
|
40
40
|
receive(optionsList: HandlerReceiveOptions[]): Promise<HandlerReceiveResult[]>;
|
|
41
41
|
stopReceiving(localIds: string[]): Promise<void>;
|
|
42
42
|
pauseReceiving(localIds: string[]): Promise<void>;
|
|
43
43
|
resumeReceiving(localIds: string[]): Promise<void>;
|
|
44
44
|
getReceiverStats(localId: string): Promise<RTCStatsReport>;
|
|
45
|
-
receiveDataChannel({ sctpStreamParameters, label, protocol }: HandlerReceiveDataChannelOptions): Promise<HandlerReceiveDataChannelResult>;
|
|
45
|
+
receiveDataChannel({ sctpStreamParameters, label, protocol, }: HandlerReceiveDataChannelOptions): Promise<HandlerReceiveDataChannelResult>;
|
|
46
46
|
private setupTransport;
|
|
47
47
|
private assertNotClosed;
|
|
48
48
|
private assertSendDirection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chrome111.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome111.ts"],"names":[],"mappings":"AAQA,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAM3E,qBAAa,SAAU,SAAQ,gBAAgB;
|
|
1
|
+
{"version":3,"file":"Chrome111.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome111.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,7 +84,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
84
84
|
iceTransportPolicy: 'all',
|
|
85
85
|
bundlePolicy: 'max-bundle',
|
|
86
86
|
rtcpMuxPolicy: 'require',
|
|
87
|
-
sdpSemantics: 'unified-plan'
|
|
87
|
+
sdpSemantics: 'unified-plan',
|
|
88
88
|
});
|
|
89
89
|
try {
|
|
90
90
|
pc.addTransceiver('audio');
|
|
@@ -95,7 +95,9 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
95
95
|
}
|
|
96
96
|
catch (error) { }
|
|
97
97
|
const sdpObject = sdpTransform.parse(offer.sdp);
|
|
98
|
-
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
98
|
+
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
99
|
+
sdpObject,
|
|
100
|
+
});
|
|
99
101
|
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
100
102
|
ortcUtils.addNackSuppportForOpus(nativeRtpCapabilities);
|
|
101
103
|
return nativeRtpCapabilities;
|
|
@@ -111,10 +113,10 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
111
113
|
async getNativeSctpCapabilities() {
|
|
112
114
|
logger.debug('getNativeSctpCapabilities()');
|
|
113
115
|
return {
|
|
114
|
-
numStreams: SCTP_NUM_STREAMS
|
|
116
|
+
numStreams: SCTP_NUM_STREAMS,
|
|
115
117
|
};
|
|
116
118
|
}
|
|
117
|
-
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities }) {
|
|
119
|
+
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities, }) {
|
|
118
120
|
this.assertNotClosed();
|
|
119
121
|
logger.debug('run()');
|
|
120
122
|
this._direction = direction;
|
|
@@ -122,22 +124,19 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
122
124
|
iceParameters,
|
|
123
125
|
iceCandidates,
|
|
124
126
|
dtlsParameters,
|
|
125
|
-
sctpParameters
|
|
127
|
+
sctpParameters,
|
|
126
128
|
});
|
|
127
|
-
this._sendingRtpParametersByKind =
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities)
|
|
136
|
-
};
|
|
129
|
+
this._sendingRtpParametersByKind = {
|
|
130
|
+
audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
|
|
131
|
+
video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
|
|
132
|
+
};
|
|
133
|
+
this._sendingRemoteRtpParametersByKind = {
|
|
134
|
+
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
|
|
135
|
+
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
|
|
136
|
+
};
|
|
137
137
|
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
|
|
138
|
-
this._forcedLocalDtlsRole =
|
|
139
|
-
? 'client'
|
|
140
|
-
: 'server';
|
|
138
|
+
this._forcedLocalDtlsRole =
|
|
139
|
+
dtlsParameters.role === 'server' ? 'client' : 'server';
|
|
141
140
|
}
|
|
142
141
|
this._pc = new RTCPeerConnection({
|
|
143
142
|
iceServers: iceServers || [],
|
|
@@ -145,7 +144,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
145
144
|
bundlePolicy: 'max-bundle',
|
|
146
145
|
rtcpMuxPolicy: 'require',
|
|
147
146
|
sdpSemantics: 'unified-plan',
|
|
148
|
-
...additionalSettings
|
|
147
|
+
...additionalSettings,
|
|
149
148
|
}, proprietaryConstraints);
|
|
150
149
|
this._pc.addEventListener('icegatheringstatechange', () => {
|
|
151
150
|
this.emit('@icegatheringstatechange', this._pc.iceGatheringState);
|
|
@@ -159,22 +158,27 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
159
158
|
logger.warn('run() | pc.connectionState not supported, using pc.iceConnectionState');
|
|
160
159
|
this._pc.addEventListener('iceconnectionstatechange', () => {
|
|
161
160
|
switch (this._pc.iceConnectionState) {
|
|
162
|
-
case 'checking':
|
|
161
|
+
case 'checking': {
|
|
163
162
|
this.emit('@connectionstatechange', 'connecting');
|
|
164
163
|
break;
|
|
164
|
+
}
|
|
165
165
|
case 'connected':
|
|
166
|
-
case 'completed':
|
|
166
|
+
case 'completed': {
|
|
167
167
|
this.emit('@connectionstatechange', 'connected');
|
|
168
168
|
break;
|
|
169
|
-
|
|
169
|
+
}
|
|
170
|
+
case 'failed': {
|
|
170
171
|
this.emit('@connectionstatechange', 'failed');
|
|
171
172
|
break;
|
|
172
|
-
|
|
173
|
+
}
|
|
174
|
+
case 'disconnected': {
|
|
173
175
|
this.emit('@connectionstatechange', 'disconnected');
|
|
174
176
|
break;
|
|
175
|
-
|
|
177
|
+
}
|
|
178
|
+
case 'closed': {
|
|
176
179
|
this.emit('@connectionstatechange', 'closed');
|
|
177
180
|
break;
|
|
181
|
+
}
|
|
178
182
|
}
|
|
179
183
|
});
|
|
180
184
|
}
|
|
@@ -215,7 +219,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
215
219
|
this.assertNotClosed();
|
|
216
220
|
return this._pc.getStats();
|
|
217
221
|
}
|
|
218
|
-
async send({ track, encodings, codecOptions, codec }) {
|
|
222
|
+
async send({ track, encodings, codecOptions, codec, }) {
|
|
219
223
|
this.assertNotClosed();
|
|
220
224
|
this.assertSendDirection();
|
|
221
225
|
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
|
|
@@ -245,24 +249,22 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
245
249
|
}
|
|
246
250
|
const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind]);
|
|
247
251
|
// This may throw.
|
|
248
|
-
sendingRtpParameters.codecs =
|
|
249
|
-
ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
252
|
+
sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
250
253
|
const sendingRemoteRtpParameters = utils.clone(this._sendingRemoteRtpParametersByKind[track.kind]);
|
|
251
254
|
// This may throw.
|
|
252
|
-
sendingRemoteRtpParameters.codecs =
|
|
253
|
-
ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
255
|
+
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
254
256
|
const mediaSectionIdx = this._remoteSdp.getNextMediaSectionIdx();
|
|
255
257
|
const transceiver = this._pc.addTransceiver(track, {
|
|
256
258
|
direction: 'sendonly',
|
|
257
259
|
streams: [this._sendStream],
|
|
258
|
-
sendEncodings: encodings
|
|
260
|
+
sendEncodings: encodings,
|
|
259
261
|
});
|
|
260
262
|
const offer = await this._pc.createOffer();
|
|
261
263
|
let localSdpObject = sdpTransform.parse(offer.sdp);
|
|
262
264
|
if (!this._transportReady) {
|
|
263
265
|
await this.setupTransport({
|
|
264
266
|
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
265
|
-
localSdpObject
|
|
267
|
+
localSdpObject,
|
|
266
268
|
});
|
|
267
269
|
}
|
|
268
270
|
logger.debug('send() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
@@ -274,17 +276,21 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
274
276
|
localSdpObject = sdpTransform.parse(this._pc.localDescription.sdp);
|
|
275
277
|
const offerMediaObject = localSdpObject.media[mediaSectionIdx.idx];
|
|
276
278
|
// Set RTCP CNAME.
|
|
277
|
-
sendingRtpParameters.rtcp.cname =
|
|
278
|
-
|
|
279
|
+
sendingRtpParameters.rtcp.cname = sdpCommonUtils.getCname({
|
|
280
|
+
offerMediaObject,
|
|
281
|
+
});
|
|
279
282
|
// Set RTP encodings by parsing the SDP offer if no encodings are given.
|
|
280
283
|
if (!encodings) {
|
|
281
|
-
sendingRtpParameters.encodings =
|
|
282
|
-
|
|
284
|
+
sendingRtpParameters.encodings = sdpUnifiedPlanUtils.getRtpEncodings({
|
|
285
|
+
offerMediaObject,
|
|
286
|
+
});
|
|
283
287
|
}
|
|
284
288
|
// Set RTP encodings by parsing the SDP offer and complete them with given
|
|
285
289
|
// one if just a single encoding has been given.
|
|
286
290
|
else if (encodings.length === 1) {
|
|
287
|
-
const newEncodings = sdpUnifiedPlanUtils.getRtpEncodings({
|
|
291
|
+
const newEncodings = sdpUnifiedPlanUtils.getRtpEncodings({
|
|
292
|
+
offerMediaObject,
|
|
293
|
+
});
|
|
288
294
|
Object.assign(newEncodings[0], encodings[0]);
|
|
289
295
|
sendingRtpParameters.encodings = newEncodings;
|
|
290
296
|
}
|
|
@@ -298,7 +304,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
298
304
|
offerRtpParameters: sendingRtpParameters,
|
|
299
305
|
answerRtpParameters: sendingRemoteRtpParameters,
|
|
300
306
|
codecOptions,
|
|
301
|
-
extmapAllowMixed: true
|
|
307
|
+
extmapAllowMixed: true,
|
|
302
308
|
});
|
|
303
309
|
const answer = { type: 'answer', sdp: this._remoteSdp.getSdp() };
|
|
304
310
|
logger.debug('send() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
@@ -308,7 +314,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
308
314
|
return {
|
|
309
315
|
localId,
|
|
310
316
|
rtpParameters: sendingRtpParameters,
|
|
311
|
-
rtpSender: transceiver.sender
|
|
317
|
+
rtpSender: transceiver.sender,
|
|
312
318
|
};
|
|
313
319
|
}
|
|
314
320
|
async stopSending(localId) {
|
|
@@ -443,7 +449,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
443
449
|
}
|
|
444
450
|
return transceiver.sender.getStats();
|
|
445
451
|
}
|
|
446
|
-
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
452
|
+
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol, }) {
|
|
447
453
|
this.assertNotClosed();
|
|
448
454
|
this.assertSendDirection();
|
|
449
455
|
const options = {
|
|
@@ -452,7 +458,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
452
458
|
ordered,
|
|
453
459
|
maxPacketLifeTime,
|
|
454
460
|
maxRetransmits,
|
|
455
|
-
protocol
|
|
461
|
+
protocol,
|
|
456
462
|
};
|
|
457
463
|
logger.debug('sendDataChannel() [options:%o]', options);
|
|
458
464
|
const dataChannel = this._pc.createDataChannel(label, options);
|
|
@@ -464,12 +470,11 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
464
470
|
if (!this._hasDataChannelMediaSection) {
|
|
465
471
|
const offer = await this._pc.createOffer();
|
|
466
472
|
const localSdpObject = sdpTransform.parse(offer.sdp);
|
|
467
|
-
const offerMediaObject = localSdpObject.media
|
|
468
|
-
.find((m) => m.type === 'application');
|
|
473
|
+
const offerMediaObject = localSdpObject.media.find((m) => m.type === 'application');
|
|
469
474
|
if (!this._transportReady) {
|
|
470
475
|
await this.setupTransport({
|
|
471
476
|
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
472
|
-
localSdpObject
|
|
477
|
+
localSdpObject,
|
|
473
478
|
});
|
|
474
479
|
}
|
|
475
480
|
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
@@ -484,7 +489,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
484
489
|
streamId: options.id,
|
|
485
490
|
ordered: options.ordered,
|
|
486
491
|
maxPacketLifeTime: options.maxPacketLifeTime,
|
|
487
|
-
maxRetransmits: options.maxRetransmits
|
|
492
|
+
maxRetransmits: options.maxRetransmits,
|
|
488
493
|
};
|
|
489
494
|
return { dataChannel, sctpStreamParameters };
|
|
490
495
|
}
|
|
@@ -503,7 +508,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
503
508
|
kind,
|
|
504
509
|
offerRtpParameters: rtpParameters,
|
|
505
510
|
streamId: streamId || rtpParameters.rtcp.cname,
|
|
506
|
-
trackId
|
|
511
|
+
trackId,
|
|
507
512
|
});
|
|
508
513
|
}
|
|
509
514
|
const offer = { type: 'offer', sdp: this._remoteSdp.getSdp() };
|
|
@@ -514,20 +519,19 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
514
519
|
for (const options of optionsList) {
|
|
515
520
|
const { trackId, rtpParameters } = options;
|
|
516
521
|
const localId = mapLocalId.get(trackId);
|
|
517
|
-
const answerMediaObject = localSdpObject.media
|
|
518
|
-
.find((m) => String(m.mid) === localId);
|
|
522
|
+
const answerMediaObject = localSdpObject.media.find((m) => String(m.mid) === localId);
|
|
519
523
|
// May need to modify codec parameters in the answer based on codec
|
|
520
524
|
// parameters in the offer.
|
|
521
525
|
sdpCommonUtils.applyCodecParameters({
|
|
522
526
|
offerRtpParameters: rtpParameters,
|
|
523
|
-
answerMediaObject
|
|
527
|
+
answerMediaObject,
|
|
524
528
|
});
|
|
525
529
|
}
|
|
526
530
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
527
531
|
if (!this._transportReady) {
|
|
528
532
|
await this.setupTransport({
|
|
529
533
|
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
530
|
-
localSdpObject
|
|
534
|
+
localSdpObject,
|
|
531
535
|
});
|
|
532
536
|
}
|
|
533
537
|
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
|
|
@@ -535,7 +539,8 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
535
539
|
for (const options of optionsList) {
|
|
536
540
|
const { trackId } = options;
|
|
537
541
|
const localId = mapLocalId.get(trackId);
|
|
538
|
-
const transceiver = this._pc
|
|
542
|
+
const transceiver = this._pc
|
|
543
|
+
.getTransceivers()
|
|
539
544
|
.find((t) => t.mid === localId);
|
|
540
545
|
if (!transceiver) {
|
|
541
546
|
throw new Error('new RTCRtpTransceiver not found');
|
|
@@ -546,7 +551,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
546
551
|
results.push({
|
|
547
552
|
localId,
|
|
548
553
|
track: transceiver.receiver.track,
|
|
549
|
-
rtpReceiver: transceiver.receiver
|
|
554
|
+
rtpReceiver: transceiver.receiver,
|
|
550
555
|
});
|
|
551
556
|
}
|
|
552
557
|
}
|
|
@@ -622,17 +627,17 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
622
627
|
}
|
|
623
628
|
return transceiver.receiver.getStats();
|
|
624
629
|
}
|
|
625
|
-
async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
|
|
630
|
+
async receiveDataChannel({ sctpStreamParameters, label, protocol, }) {
|
|
626
631
|
this.assertNotClosed();
|
|
627
632
|
this.assertRecvDirection();
|
|
628
|
-
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
|
|
633
|
+
const { streamId, ordered, maxPacketLifeTime, maxRetransmits, } = sctpStreamParameters;
|
|
629
634
|
const options = {
|
|
630
635
|
negotiated: true,
|
|
631
636
|
id: streamId,
|
|
632
637
|
ordered,
|
|
633
638
|
maxPacketLifeTime,
|
|
634
639
|
maxRetransmits,
|
|
635
|
-
protocol
|
|
640
|
+
protocol,
|
|
636
641
|
};
|
|
637
642
|
logger.debug('receiveDataChannel() [options:%o]', options);
|
|
638
643
|
const dataChannel = this._pc.createDataChannel(label, options);
|
|
@@ -648,7 +653,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
648
653
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
649
654
|
await this.setupTransport({
|
|
650
655
|
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
651
|
-
localSdpObject
|
|
656
|
+
localSdpObject,
|
|
652
657
|
});
|
|
653
658
|
}
|
|
654
659
|
logger.debug('receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
@@ -657,12 +662,14 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
657
662
|
}
|
|
658
663
|
return { dataChannel };
|
|
659
664
|
}
|
|
660
|
-
async setupTransport({ localDtlsRole, localSdpObject }) {
|
|
665
|
+
async setupTransport({ localDtlsRole, localSdpObject, }) {
|
|
661
666
|
if (!localSdpObject) {
|
|
662
667
|
localSdpObject = sdpTransform.parse(this._pc.localDescription.sdp);
|
|
663
668
|
}
|
|
664
669
|
// Get our local DTLS parameters.
|
|
665
|
-
const dtlsParameters = sdpCommonUtils.extractDtlsParameters({
|
|
670
|
+
const dtlsParameters = sdpCommonUtils.extractDtlsParameters({
|
|
671
|
+
sdpObject: localSdpObject,
|
|
672
|
+
});
|
|
666
673
|
// Set our DTLS role.
|
|
667
674
|
dtlsParameters.role = localDtlsRole;
|
|
668
675
|
// Update the remote DTLS role in the SDP.
|
|
@@ -25,11 +25,11 @@ export declare class Chrome55 extends HandlerInterface {
|
|
|
25
25
|
close(): void;
|
|
26
26
|
getNativeRtpCapabilities(): Promise<RtpCapabilities>;
|
|
27
27
|
getNativeSctpCapabilities(): Promise<SctpCapabilities>;
|
|
28
|
-
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities }: HandlerRunOptions): void;
|
|
28
|
+
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities, }: HandlerRunOptions): void;
|
|
29
29
|
updateIceServers(iceServers: RTCIceServer[]): Promise<void>;
|
|
30
30
|
restartIce(iceParameters: IceParameters): Promise<void>;
|
|
31
31
|
getTransportStats(): Promise<RTCStatsReport>;
|
|
32
|
-
send({ track, encodings, codecOptions, codec }: HandlerSendOptions): Promise<HandlerSendResult>;
|
|
32
|
+
send({ track, encodings, codecOptions, codec, }: HandlerSendOptions): Promise<HandlerSendResult>;
|
|
33
33
|
stopSending(localId: string): Promise<void>;
|
|
34
34
|
pauseSending(localId: string): Promise<void>;
|
|
35
35
|
resumeSending(localId: string): Promise<void>;
|
|
@@ -37,13 +37,13 @@ export declare class Chrome55 extends HandlerInterface {
|
|
|
37
37
|
setMaxSpatialLayer(localId: string, spatialLayer: number): Promise<void>;
|
|
38
38
|
setRtpEncodingParameters(localId: string, params: any): Promise<void>;
|
|
39
39
|
getSenderStats(localId: string): Promise<RTCStatsReport>;
|
|
40
|
-
sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
|
|
40
|
+
sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol, }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
|
|
41
41
|
receive(optionsList: HandlerReceiveOptions[]): Promise<HandlerReceiveResult[]>;
|
|
42
42
|
stopReceiving(localIds: string[]): Promise<void>;
|
|
43
43
|
pauseReceiving(localIds: string[]): Promise<void>;
|
|
44
44
|
resumeReceiving(localIds: string[]): Promise<void>;
|
|
45
45
|
getReceiverStats(localId: string): Promise<RTCStatsReport>;
|
|
46
|
-
receiveDataChannel({ sctpStreamParameters, label, protocol }: HandlerReceiveDataChannelOptions): Promise<HandlerReceiveDataChannelResult>;
|
|
46
|
+
receiveDataChannel({ sctpStreamParameters, label, protocol, }: HandlerReceiveDataChannelOptions): Promise<HandlerReceiveDataChannelResult>;
|
|
47
47
|
private setupTransport;
|
|
48
48
|
private assertSendDirection;
|
|
49
49
|
private assertRecvDirection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chrome55.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome55.ts"],"names":[],"mappings":"AAOA,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAM3E,qBAAa,QAAS,SAAQ,gBAAgB;
|
|
1
|
+
{"version":3,"file":"Chrome55.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome55.ts"],"names":[],"mappings":"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"}
|