mediasoup-client 3.14.2 → 3.15.1
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/lib/Device.d.ts +1 -1
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +22 -25
- package/lib/RtpParameters.d.ts +32 -0
- package/lib/RtpParameters.d.ts.map +1 -1
- package/lib/Transport.d.ts +6 -5
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +10 -6
- package/lib/handlers/Chrome111.d.ts +2 -2
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +23 -26
- package/lib/handlers/Chrome74.d.ts +2 -2
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +24 -27
- package/lib/handlers/FakeHandler.d.ts +2 -1
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +20 -16
- package/lib/handlers/Firefox120.d.ts +2 -2
- package/lib/handlers/Firefox120.d.ts.map +1 -1
- package/lib/handlers/Firefox120.js +21 -24
- package/lib/handlers/HandlerInterface.d.ts +2 -3
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative106.d.ts +2 -2
- package/lib/handlers/ReactNative106.d.ts.map +1 -1
- package/lib/handlers/ReactNative106.js +24 -27
- package/lib/handlers/Safari12.d.ts +3 -3
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +23 -26
- package/lib/handlers/sdp/commonUtils.d.ts +4 -2
- package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/commonUtils.js +13 -21
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.d.ts +5 -7
- package/lib/ortc.d.ts.map +1 -1
- package/lib/ortc.js +11 -13
- package/lib/test/fakeParameters.d.ts.map +1 -1
- package/lib/test/fakeParameters.js +37 -0
- package/lib/test/test.js +3 -26
- package/npm-scripts.mjs +6 -6
- package/package.json +2 -2
- package/lib/privateTypes.d.ts +0 -27
- package/lib/privateTypes.d.ts.map +0 -1
- package/lib/privateTypes.js +0 -2
|
@@ -14,8 +14,8 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
14
14
|
_closed = false;
|
|
15
15
|
// Fake parameters source of RTP and SCTP parameters and capabilities.
|
|
16
16
|
_fakeParameters;
|
|
17
|
-
//
|
|
18
|
-
|
|
17
|
+
// Callback to request sending extended RTP capabilities on demand.
|
|
18
|
+
_getSendExtendedRtpCapabilities;
|
|
19
19
|
// Local RTCP CNAME.
|
|
20
20
|
_cname = `CNAME-${utils.generateRandomNumber()}`;
|
|
21
21
|
// Got transport local and remote parameters.
|
|
@@ -35,7 +35,7 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
35
35
|
factory: (options) => new FakeHandler(options, fakeParameters),
|
|
36
36
|
getNativeRtpCapabilities: async () => {
|
|
37
37
|
logger.debug('getNativeRtpCapabilities()');
|
|
38
|
-
return
|
|
38
|
+
return FakeHandler.getLocalRtpCapabilities(fakeParameters);
|
|
39
39
|
},
|
|
40
40
|
getNativeSctpCapabilities: async () => {
|
|
41
41
|
logger.debug('getNativeSctpCapabilities()');
|
|
@@ -43,6 +43,10 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
43
43
|
},
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
+
static getLocalRtpCapabilities(fakeParameters) {
|
|
47
|
+
const nativeRtpCapabilities = fakeParameters.generateNativeRtpCapabilities();
|
|
48
|
+
return nativeRtpCapabilities;
|
|
49
|
+
}
|
|
46
50
|
constructor({
|
|
47
51
|
// direction,
|
|
48
52
|
// iceParameters,
|
|
@@ -52,15 +56,10 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
52
56
|
// iceServers,
|
|
53
57
|
// iceTransportPolicy,
|
|
54
58
|
// additionalSettings,
|
|
55
|
-
|
|
59
|
+
getSendExtendedRtpCapabilities, }, fakeParameters) {
|
|
56
60
|
super();
|
|
57
61
|
logger.debug('constructor()');
|
|
58
|
-
|
|
59
|
-
// @type {Object}
|
|
60
|
-
this._rtpParametersByKind = {
|
|
61
|
-
audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
|
|
62
|
-
video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
|
|
63
|
-
};
|
|
62
|
+
this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
|
|
64
63
|
this._fakeParameters = fakeParameters;
|
|
65
64
|
}
|
|
66
65
|
get name() {
|
|
@@ -105,9 +104,14 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
105
104
|
if (!this._transportReady) {
|
|
106
105
|
await this.setupTransport({ localDtlsRole: 'server' });
|
|
107
106
|
}
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
|
|
107
|
+
const nativeRtpCapabilities = FakeHandler.getLocalRtpCapabilities(this._fakeParameters);
|
|
108
|
+
const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
|
|
109
|
+
// Generic sending RTP parameters.
|
|
110
|
+
const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
111
|
+
// This may throw.
|
|
112
|
+
sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
113
|
+
const useRtx = sendingRtpParameters.codecs.some(_codec => /.+\/rtx$/i.test(_codec.mimeType));
|
|
114
|
+
sendingRtpParameters.mid = `mid-${utils.generateRandomNumber()}`;
|
|
111
115
|
if (!encodings) {
|
|
112
116
|
encodings = [{}];
|
|
113
117
|
}
|
|
@@ -117,16 +121,16 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
117
121
|
encoding.rtx = { ssrc: utils.generateRandomNumber() };
|
|
118
122
|
}
|
|
119
123
|
}
|
|
120
|
-
|
|
124
|
+
sendingRtpParameters.encodings = encodings;
|
|
121
125
|
// Fill RTCRtpParameters.rtcp.
|
|
122
|
-
|
|
126
|
+
sendingRtpParameters.rtcp = {
|
|
123
127
|
cname: this._cname,
|
|
124
128
|
reducedSize: true,
|
|
125
129
|
mux: true,
|
|
126
130
|
};
|
|
127
131
|
const localId = this._nextLocalId++;
|
|
128
132
|
this._tracks.set(localId, track);
|
|
129
|
-
return { localId: String(localId), rtpParameters };
|
|
133
|
+
return { localId: String(localId), rtpParameters: sendingRtpParameters };
|
|
130
134
|
}
|
|
131
135
|
async stopSending(localId) {
|
|
132
136
|
logger.debug('stopSending() [localId:%s]', localId);
|
|
@@ -5,8 +5,7 @@ export declare class Firefox120 extends EnhancedEventEmitter<HandlerEvents> impl
|
|
|
5
5
|
private _closed;
|
|
6
6
|
private _direction;
|
|
7
7
|
private _remoteSdp;
|
|
8
|
-
private
|
|
9
|
-
private _sendingRemoteRtpParametersByKind;
|
|
8
|
+
private _getSendExtendedRtpCapabilities;
|
|
10
9
|
private _pc;
|
|
11
10
|
private readonly _mapMidTransceiver;
|
|
12
11
|
private readonly _sendStream;
|
|
@@ -17,6 +16,7 @@ export declare class Firefox120 extends EnhancedEventEmitter<HandlerEvents> impl
|
|
|
17
16
|
* Creates a factory function.
|
|
18
17
|
*/
|
|
19
18
|
static createFactory(): HandlerFactory;
|
|
19
|
+
private static getLocalRtpCapabilities;
|
|
20
20
|
private constructor();
|
|
21
21
|
get name(): string;
|
|
22
22
|
close(): void;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"Firefox120.d.ts","sourceRoot":"","sources":["../../src/handlers/Firefox120.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ const sdpTransform = require("sdp-transform");
|
|
|
5
5
|
const enhancedEvents_1 = require("../enhancedEvents");
|
|
6
6
|
const Logger_1 = require("../Logger");
|
|
7
7
|
const errors_1 = require("../errors");
|
|
8
|
-
const utils = require("../utils");
|
|
9
8
|
const ortc = require("../ortc");
|
|
10
9
|
const scalabilityModes_1 = require("../scalabilityModes");
|
|
11
10
|
const sdpCommonUtils = require("./sdp/commonUtils");
|
|
@@ -21,11 +20,8 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
21
20
|
_direction;
|
|
22
21
|
// Remote SDP handler.
|
|
23
22
|
_remoteSdp;
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
// Generic sending RTP parameters for audio and video suitable for the SDP
|
|
27
|
-
// remote answer.
|
|
28
|
-
_sendingRemoteRtpParametersByKind;
|
|
23
|
+
// Callback to request sending extended RTP capabilities on demand.
|
|
24
|
+
_getSendExtendedRtpCapabilities;
|
|
29
25
|
// RTCPeerConnection instance.
|
|
30
26
|
_pc;
|
|
31
27
|
// Map of RTCTransceivers indexed by MID.
|
|
@@ -84,9 +80,7 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
84
80
|
catch (error) { }
|
|
85
81
|
pc = undefined;
|
|
86
82
|
const sdpObject = sdpTransform.parse(offer.sdp);
|
|
87
|
-
const nativeRtpCapabilities =
|
|
88
|
-
sdpObject,
|
|
89
|
-
});
|
|
83
|
+
const nativeRtpCapabilities = Firefox120.getLocalRtpCapabilities(sdpObject);
|
|
90
84
|
return nativeRtpCapabilities;
|
|
91
85
|
}
|
|
92
86
|
catch (error) {
|
|
@@ -114,7 +108,13 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
114
108
|
},
|
|
115
109
|
};
|
|
116
110
|
}
|
|
117
|
-
|
|
111
|
+
static getLocalRtpCapabilities(localSdpObject) {
|
|
112
|
+
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
113
|
+
sdpObject: localSdpObject,
|
|
114
|
+
});
|
|
115
|
+
return nativeRtpCapabilities;
|
|
116
|
+
}
|
|
117
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
|
|
118
118
|
super();
|
|
119
119
|
logger.debug('constructor()');
|
|
120
120
|
this._direction = direction;
|
|
@@ -124,14 +124,7 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
124
124
|
dtlsParameters,
|
|
125
125
|
sctpParameters,
|
|
126
126
|
});
|
|
127
|
-
this.
|
|
128
|
-
audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
|
|
129
|
-
video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
|
|
130
|
-
};
|
|
131
|
-
this._sendingRemoteRtpParametersByKind = {
|
|
132
|
-
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
|
|
133
|
-
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
|
|
134
|
-
};
|
|
127
|
+
this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
|
|
135
128
|
this._pc = new RTCPeerConnection({
|
|
136
129
|
iceServers: iceServers ?? [],
|
|
137
130
|
iceTransportPolicy: iceTransportPolicy ?? 'all',
|
|
@@ -221,12 +214,6 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
221
214
|
encoding.rid = `r${idx}`;
|
|
222
215
|
});
|
|
223
216
|
}
|
|
224
|
-
const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind]);
|
|
225
|
-
// This may throw.
|
|
226
|
-
sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
227
|
-
const sendingRemoteRtpParameters = utils.clone(this._sendingRemoteRtpParametersByKind[track.kind]);
|
|
228
|
-
// This may throw.
|
|
229
|
-
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
230
217
|
// NOTE: Firefox fails sometimes to properly anticipate the closed media
|
|
231
218
|
// section that it should use, so don't reuse closed media sections.
|
|
232
219
|
// https://github.com/versatica/mediasoup-client/issues/104
|
|
@@ -245,6 +232,16 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
245
232
|
if (localSdpObject.extmapAllowMixed) {
|
|
246
233
|
this._remoteSdp.setSessionExtmapAllowMixed();
|
|
247
234
|
}
|
|
235
|
+
const nativeRtpCapabilities = Firefox120.getLocalRtpCapabilities(localSdpObject);
|
|
236
|
+
const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
|
|
237
|
+
// Generic sending RTP parameters.
|
|
238
|
+
const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
239
|
+
// This may throw.
|
|
240
|
+
sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
241
|
+
// Generic sending RTP parameters suitable for the SDP remote answer.
|
|
242
|
+
const sendingRemoteRtpParameters = ortc.getSendingRemoteRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
243
|
+
// This may throw.
|
|
244
|
+
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
248
245
|
// In Firefox use DTLS role client even if we are the "offerer" since
|
|
249
246
|
// Firefox does not respect ICE-Lite.
|
|
250
247
|
if (!this._transportReady) {
|
|
@@ -2,9 +2,8 @@ import { EnhancedEventEmitter } from '../enhancedEvents';
|
|
|
2
2
|
import type { IceParameters, IceCandidate, DtlsParameters, IceGatheringState, ConnectionState } from '../Transport';
|
|
3
3
|
import type { ProducerCodecOptions, OnRtpSenderCallback } from '../Producer';
|
|
4
4
|
import type { OnRtpReceiverCallback } from '../Consumer';
|
|
5
|
-
import type { RtpCapabilities, RtpCodecCapability, RtpParameters, RtpEncodingParameters } from '../RtpParameters';
|
|
5
|
+
import type { RtpCapabilities, RtpCodecCapability, RtpParameters, RtpEncodingParameters, ExtendedRtpCapabilities } from '../RtpParameters';
|
|
6
6
|
import type { SctpCapabilities, SctpParameters, SctpStreamParameters } from '../SctpParameters';
|
|
7
|
-
import type { ExtendedRtpCapabilities } from '../privateTypes';
|
|
8
7
|
export type HandlerOptions = {
|
|
9
8
|
direction: 'send' | 'recv';
|
|
10
9
|
iceParameters: IceParameters;
|
|
@@ -14,7 +13,7 @@ export type HandlerOptions = {
|
|
|
14
13
|
iceServers?: RTCIceServer[];
|
|
15
14
|
iceTransportPolicy?: RTCIceTransportPolicy;
|
|
16
15
|
additionalSettings?: Partial<RTCConfiguration>;
|
|
17
|
-
|
|
16
|
+
getSendExtendedRtpCapabilities: (nativeRtpCapabilities: RtpCapabilities) => ExtendedRtpCapabilities;
|
|
18
17
|
};
|
|
19
18
|
export type HandlerFactory = {
|
|
20
19
|
name: string;
|
|
@@ -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,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EACX,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACX,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"HandlerInterface.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerInterface.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,7 @@ export declare class ReactNative106 extends EnhancedEventEmitter<HandlerEvents>
|
|
|
5
5
|
private _closed;
|
|
6
6
|
private _direction;
|
|
7
7
|
private _remoteSdp;
|
|
8
|
-
private
|
|
9
|
-
private _sendingRemoteRtpParametersByKind;
|
|
8
|
+
private _getSendExtendedRtpCapabilities;
|
|
10
9
|
private _forcedLocalDtlsRole?;
|
|
11
10
|
private _pc;
|
|
12
11
|
private readonly _mapMidTransceiver;
|
|
@@ -18,6 +17,7 @@ export declare class ReactNative106 extends EnhancedEventEmitter<HandlerEvents>
|
|
|
18
17
|
* Creates a factory function.
|
|
19
18
|
*/
|
|
20
19
|
static createFactory(): HandlerFactory;
|
|
20
|
+
private static getLocalRtpCapabilities;
|
|
21
21
|
private constructor();
|
|
22
22
|
get name(): string;
|
|
23
23
|
close(): 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;
|
|
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;AAQ5D,OAAO,KAAK,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EAEb,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;AAW5B,qBAAa,cACZ,SAAQ,oBAAoB,CAAC,aAAa,CAC1C,YAAW,gBAAgB;IAG3B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,CAAC,UAAU,CAAY;IAE9B,OAAO,CAAC,+BAA+B,CAEV;IAG7B,OAAO,CAAC,oBAAoB,CAAC,CAAW;IAExC,OAAO,CAAC,GAAG,CAAoB;IAE/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CACxB;IAEX,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,eAAe,CAAS;IAEhC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,cAAc;IAoDtC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAatC,OAAO;IA+DP,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEQ,KAAK,IAAI,IAAI;IA0ChB,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3D,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDvD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAM5C,IAAI,CAAC,EACV,KAAK,EACL,SAAS,EACT,YAAY,EACZ,KAAK,EACL,WAAW,GACX,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoN5C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD3C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC7C,YAAY,CACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC;IAuBV,kBAAkB,CACvB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAsDV,wBAAwB,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,CAAC,wBAAwB,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC;IAkDV,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAaxD,eAAe,CAAC,EACrB,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,KAAK,EACL,QAAQ,GACR,EAAE,6BAA6B,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAuElE,OAAO,CACZ,WAAW,EAAE,qBAAqB,EAAE,GAClC,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAmH5B,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6ChD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCjD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuClD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAa1D,kBAAkB,CAAC,EACxB,oBAAoB,EACpB,KAAK,EACL,QAAQ,GACR,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC;YAiEhE,cAAc;IAgC5B,OAAO,CAAC,yBAAyB,CAE/B;IAEF,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,uBAAuB,CAE7B;IAEF,OAAO,CAAC,0BAA0B,CAiChC;IAEF,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;CAO3B"}
|
|
@@ -4,7 +4,6 @@ exports.ReactNative106 = void 0;
|
|
|
4
4
|
const sdpTransform = require("sdp-transform");
|
|
5
5
|
const enhancedEvents_1 = require("../enhancedEvents");
|
|
6
6
|
const Logger_1 = require("../Logger");
|
|
7
|
-
const utils = require("../utils");
|
|
8
7
|
const ortc = require("../ortc");
|
|
9
8
|
const errors_1 = require("../errors");
|
|
10
9
|
const scalabilityModes_1 = require("../scalabilityModes");
|
|
@@ -22,11 +21,8 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
22
21
|
_direction;
|
|
23
22
|
// Remote SDP handler.
|
|
24
23
|
_remoteSdp;
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
// Generic sending RTP parameters for audio and video suitable for the SDP
|
|
28
|
-
// remote answer.
|
|
29
|
-
_sendingRemoteRtpParametersByKind;
|
|
24
|
+
// Callback to request sending extended RTP capabilities on demand.
|
|
25
|
+
_getSendExtendedRtpCapabilities;
|
|
30
26
|
// Initial server side DTLS role. If not 'auto', it will force the opposite
|
|
31
27
|
// value in client side.
|
|
32
28
|
_forcedLocalDtlsRole;
|
|
@@ -67,11 +63,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
67
63
|
catch (error) { }
|
|
68
64
|
pc = undefined;
|
|
69
65
|
const sdpObject = sdpTransform.parse(offer.sdp);
|
|
70
|
-
const nativeRtpCapabilities =
|
|
71
|
-
sdpObject,
|
|
72
|
-
});
|
|
73
|
-
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
74
|
-
ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
|
|
66
|
+
const nativeRtpCapabilities = ReactNative106.getLocalRtpCapabilities(sdpObject);
|
|
75
67
|
return nativeRtpCapabilities;
|
|
76
68
|
}
|
|
77
69
|
catch (error) {
|
|
@@ -91,7 +83,15 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
91
83
|
},
|
|
92
84
|
};
|
|
93
85
|
}
|
|
94
|
-
|
|
86
|
+
static getLocalRtpCapabilities(localSdpObject) {
|
|
87
|
+
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
88
|
+
sdpObject: localSdpObject,
|
|
89
|
+
});
|
|
90
|
+
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
91
|
+
ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
|
|
92
|
+
return nativeRtpCapabilities;
|
|
93
|
+
}
|
|
94
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
|
|
95
95
|
super();
|
|
96
96
|
logger.debug('constructor()');
|
|
97
97
|
this._direction = direction;
|
|
@@ -101,14 +101,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
101
101
|
dtlsParameters,
|
|
102
102
|
sctpParameters,
|
|
103
103
|
});
|
|
104
|
-
this.
|
|
105
|
-
audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
|
|
106
|
-
video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
|
|
107
|
-
};
|
|
108
|
-
this._sendingRemoteRtpParametersByKind = {
|
|
109
|
-
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
|
|
110
|
-
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
|
|
111
|
-
};
|
|
104
|
+
this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
|
|
112
105
|
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
|
|
113
106
|
this._forcedLocalDtlsRole =
|
|
114
107
|
dtlsParameters.role === 'server' ? 'client' : 'server';
|
|
@@ -207,12 +200,6 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
207
200
|
encoding.rid = `r${idx}`;
|
|
208
201
|
});
|
|
209
202
|
}
|
|
210
|
-
const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind]);
|
|
211
|
-
// This may throw.
|
|
212
|
-
sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
213
|
-
const sendingRemoteRtpParameters = utils.clone(this._sendingRemoteRtpParametersByKind[track.kind]);
|
|
214
|
-
// This may throw.
|
|
215
|
-
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
216
203
|
const mediaSectionIdx = this._remoteSdp.getNextMediaSectionIdx();
|
|
217
204
|
const transceiver = this._pc.addTransceiver(track, {
|
|
218
205
|
direction: 'sendonly',
|
|
@@ -227,7 +214,16 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
227
214
|
if (localSdpObject.extmapAllowMixed) {
|
|
228
215
|
this._remoteSdp.setSessionExtmapAllowMixed();
|
|
229
216
|
}
|
|
230
|
-
|
|
217
|
+
const nativeRtpCapabilities = ReactNative106.getLocalRtpCapabilities(localSdpObject);
|
|
218
|
+
const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
|
|
219
|
+
// Generic sending RTP parameters.
|
|
220
|
+
const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
221
|
+
// This may throw.
|
|
222
|
+
sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
223
|
+
// Generic sending RTP parameters suitable for the SDP remote answer.
|
|
224
|
+
const sendingRemoteRtpParameters = ortc.getSendingRemoteRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
225
|
+
// This may throw.
|
|
226
|
+
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
231
227
|
if (!this._transportReady) {
|
|
232
228
|
await this.setupTransport({
|
|
233
229
|
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
@@ -237,6 +233,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
237
233
|
// Special case for VP9 with SVC.
|
|
238
234
|
let hackVp9Svc = false;
|
|
239
235
|
const layers = (0, scalabilityModes_1.parse)((encodings ?? [{}])[0].scalabilityMode);
|
|
236
|
+
let offerMediaObject;
|
|
240
237
|
if (encodings &&
|
|
241
238
|
encodings.length === 1 &&
|
|
242
239
|
layers.spatialLayers > 1 &&
|
|
@@ -5,8 +5,7 @@ export declare class Safari12 extends EnhancedEventEmitter<HandlerEvents> implem
|
|
|
5
5
|
private _closed;
|
|
6
6
|
private _direction;
|
|
7
7
|
private _remoteSdp;
|
|
8
|
-
private
|
|
9
|
-
private _sendingRemoteRtpParametersByKind;
|
|
8
|
+
private _getSendExtendedRtpCapabilities;
|
|
10
9
|
private _forcedLocalDtlsRole?;
|
|
11
10
|
private _pc;
|
|
12
11
|
private readonly _mapMidTransceiver;
|
|
@@ -18,7 +17,8 @@ export declare class Safari12 extends EnhancedEventEmitter<HandlerEvents> implem
|
|
|
18
17
|
* Creates a factory function.
|
|
19
18
|
*/
|
|
20
19
|
static createFactory(): HandlerFactory;
|
|
21
|
-
|
|
20
|
+
private static getLocalRtpCapabilities;
|
|
21
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }: HandlerOptions);
|
|
22
22
|
get name(): string;
|
|
23
23
|
close(): void;
|
|
24
24
|
updateIceServers(iceServers: RTCIceServer[]): 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;
|
|
1
|
+
{"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"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"}
|
package/lib/handlers/Safari12.js
CHANGED
|
@@ -4,7 +4,6 @@ exports.Safari12 = void 0;
|
|
|
4
4
|
const sdpTransform = require("sdp-transform");
|
|
5
5
|
const enhancedEvents_1 = require("../enhancedEvents");
|
|
6
6
|
const Logger_1 = require("../Logger");
|
|
7
|
-
const utils = require("../utils");
|
|
8
7
|
const ortc = require("../ortc");
|
|
9
8
|
const errors_1 = require("../errors");
|
|
10
9
|
const scalabilityModes_1 = require("../scalabilityModes");
|
|
@@ -22,11 +21,8 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
22
21
|
_direction;
|
|
23
22
|
// Remote SDP handler.
|
|
24
23
|
_remoteSdp;
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
// Generic sending RTP parameters for audio and video suitable for the SDP
|
|
28
|
-
// remote answer.
|
|
29
|
-
_sendingRemoteRtpParametersByKind;
|
|
24
|
+
// Callback to request sending extended RTP capabilities on demand.
|
|
25
|
+
_getSendExtendedRtpCapabilities;
|
|
30
26
|
// Initial server side DTLS role. If not 'auto', it will force the opposite
|
|
31
27
|
// value in client side.
|
|
32
28
|
_forcedLocalDtlsRole;
|
|
@@ -67,11 +63,7 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
67
63
|
catch (error) { }
|
|
68
64
|
pc = undefined;
|
|
69
65
|
const sdpObject = sdpTransform.parse(offer.sdp);
|
|
70
|
-
const nativeRtpCapabilities =
|
|
71
|
-
sdpObject,
|
|
72
|
-
});
|
|
73
|
-
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
74
|
-
ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
|
|
66
|
+
const nativeRtpCapabilities = Safari12.getLocalRtpCapabilities(sdpObject);
|
|
75
67
|
return nativeRtpCapabilities;
|
|
76
68
|
}
|
|
77
69
|
catch (error) {
|
|
@@ -91,7 +83,15 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
91
83
|
},
|
|
92
84
|
};
|
|
93
85
|
}
|
|
94
|
-
|
|
86
|
+
static getLocalRtpCapabilities(localSdpObject) {
|
|
87
|
+
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
88
|
+
sdpObject: localSdpObject,
|
|
89
|
+
});
|
|
90
|
+
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
91
|
+
ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
|
|
92
|
+
return nativeRtpCapabilities;
|
|
93
|
+
}
|
|
94
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
|
|
95
95
|
super();
|
|
96
96
|
logger.debug('constructor()');
|
|
97
97
|
this._direction = direction;
|
|
@@ -101,14 +101,7 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
101
101
|
dtlsParameters,
|
|
102
102
|
sctpParameters,
|
|
103
103
|
});
|
|
104
|
-
this.
|
|
105
|
-
audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
|
|
106
|
-
video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
|
|
107
|
-
};
|
|
108
|
-
this._sendingRemoteRtpParametersByKind = {
|
|
109
|
-
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
|
|
110
|
-
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
|
|
111
|
-
};
|
|
104
|
+
this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
|
|
112
105
|
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
|
|
113
106
|
this._forcedLocalDtlsRole =
|
|
114
107
|
dtlsParameters.role === 'server' ? 'client' : 'server';
|
|
@@ -204,12 +197,6 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
204
197
|
this.assertNotClosed();
|
|
205
198
|
this.assertSendDirection();
|
|
206
199
|
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
|
|
207
|
-
const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind]);
|
|
208
|
-
// This may throw.
|
|
209
|
-
sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
210
|
-
const sendingRemoteRtpParameters = utils.clone(this._sendingRemoteRtpParametersByKind[track.kind]);
|
|
211
|
-
// This may throw.
|
|
212
|
-
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
213
200
|
const mediaSectionIdx = this._remoteSdp.getNextMediaSectionIdx();
|
|
214
201
|
const transceiver = this._pc.addTransceiver(track, {
|
|
215
202
|
direction: 'sendonly',
|
|
@@ -223,6 +210,16 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
|
|
|
223
210
|
if (localSdpObject.extmapAllowMixed) {
|
|
224
211
|
this._remoteSdp.setSessionExtmapAllowMixed();
|
|
225
212
|
}
|
|
213
|
+
const nativeRtpCapabilities = Safari12.getLocalRtpCapabilities(localSdpObject);
|
|
214
|
+
const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
|
|
215
|
+
// Generic sending RTP parameters.
|
|
216
|
+
const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
217
|
+
// This may throw.
|
|
218
|
+
sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
219
|
+
// Generic sending RTP parameters suitable for the SDP remote answer.
|
|
220
|
+
const sendingRemoteRtpParameters = ortc.getSendingRemoteRtpParameters(track.kind, sendExtendedRtpCapabilities);
|
|
221
|
+
// This may throw.
|
|
222
|
+
sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
226
223
|
let offerMediaObject;
|
|
227
224
|
if (!this._transportReady) {
|
|
228
225
|
await this.setupTransport({
|
|
@@ -2,8 +2,10 @@ import type * as SdpTransform from 'sdp-transform';
|
|
|
2
2
|
import type { DtlsParameters } from '../../Transport';
|
|
3
3
|
import type { RtpCapabilities, RtpParameters } from '../../RtpParameters';
|
|
4
4
|
/**
|
|
5
|
-
* This function
|
|
6
|
-
*
|
|
5
|
+
* This function extracs RTP capabilities from the given SDP.
|
|
6
|
+
*
|
|
7
|
+
* BUNDLE is assumed so, as per spec, all media sections in the SDP must share
|
|
8
|
+
* same ids for codecs and RTP extensions.
|
|
7
9
|
*/
|
|
8
10
|
export declare function extractRtpCapabilities({ sdpObject, }: {
|
|
9
11
|
sdpObject: SdpTransform.SessionDescription;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/commonUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,YAAY,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EACX,cAAc,EAGd,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACX,eAAe,EAIf,aAAa,EAEb,MAAM,qBAAqB,CAAC;AAE7B
|
|
1
|
+
{"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/commonUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,YAAY,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EACX,cAAc,EAGd,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACX,eAAe,EAIf,aAAa,EAEb,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EACtC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,YAAY,CAAC,kBAAkB,CAAC;CAC3C,GAAG,eAAe,CAgHlB;AAED,wBAAgB,qBAAqB,CAAC,EACrC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,YAAY,CAAC,kBAAkB,CAAC;CAC3C,GAAG,cAAc,CAsDjB;AAED,wBAAgB,QAAQ,CAAC,EACxB,gBAAgB,GAChB,EAAE;IACF,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,CAAC;CAChD,GAAG,MAAM,CAUT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACpC,kBAAkB,EAClB,iBAAiB,GACjB,EAAE;IACF,kBAAkB,EAAE,aAAa,CAAC;IAClC,iBAAiB,EAAE,YAAY,CAAC,gBAAgB,CAAC;CACjD,GAAG,IAAI,CAsDP"}
|
|
@@ -6,32 +6,21 @@ exports.getCname = getCname;
|
|
|
6
6
|
exports.applyCodecParameters = applyCodecParameters;
|
|
7
7
|
const sdpTransform = require("sdp-transform");
|
|
8
8
|
/**
|
|
9
|
-
* This function
|
|
10
|
-
*
|
|
9
|
+
* This function extracs RTP capabilities from the given SDP.
|
|
10
|
+
*
|
|
11
|
+
* BUNDLE is assumed so, as per spec, all media sections in the SDP must share
|
|
12
|
+
* same ids for codecs and RTP extensions.
|
|
11
13
|
*/
|
|
12
14
|
function extractRtpCapabilities({ sdpObject, }) {
|
|
13
15
|
// Map of RtpCodecParameters indexed by payload type.
|
|
14
16
|
const codecsMap = new Map();
|
|
15
|
-
//
|
|
16
|
-
const
|
|
17
|
-
// Whether a m=audio/video section has been already found.
|
|
18
|
-
let gotAudio = false;
|
|
19
|
-
let gotVideo = false;
|
|
17
|
+
// Map of RtpHeaderExtensions indexed by preferred id.
|
|
18
|
+
const headerExtensionMap = new Map();
|
|
20
19
|
for (const m of sdpObject.media) {
|
|
21
20
|
const kind = m.type;
|
|
22
21
|
switch (kind) {
|
|
23
|
-
case 'audio':
|
|
24
|
-
if (gotAudio) {
|
|
25
|
-
continue;
|
|
26
|
-
}
|
|
27
|
-
gotAudio = true;
|
|
28
|
-
break;
|
|
29
|
-
}
|
|
22
|
+
case 'audio':
|
|
30
23
|
case 'video': {
|
|
31
|
-
if (gotVideo) {
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
gotVideo = true;
|
|
35
24
|
break;
|
|
36
25
|
}
|
|
37
26
|
default: {
|
|
@@ -58,10 +47,13 @@ function extractRtpCapabilities({ sdpObject, }) {
|
|
|
58
47
|
if (!codec) {
|
|
59
48
|
continue;
|
|
60
49
|
}
|
|
61
|
-
// Specials
|
|
50
|
+
// Specials cases to convert parameter value to string.
|
|
62
51
|
if (parameters?.hasOwnProperty('profile-level-id')) {
|
|
63
52
|
parameters['profile-level-id'] = String(parameters['profile-level-id']);
|
|
64
53
|
}
|
|
54
|
+
if (parameters?.hasOwnProperty('profile-id')) {
|
|
55
|
+
parameters['profile-id'] = String(parameters['profile-id']);
|
|
56
|
+
}
|
|
65
57
|
codec.parameters = parameters;
|
|
66
58
|
}
|
|
67
59
|
// Get RTCP feedback for each codec.
|
|
@@ -103,12 +95,12 @@ function extractRtpCapabilities({ sdpObject, }) {
|
|
|
103
95
|
uri: ext.uri,
|
|
104
96
|
preferredId: ext.value,
|
|
105
97
|
};
|
|
106
|
-
|
|
98
|
+
headerExtensionMap.set(headerExtension.preferredId, headerExtension);
|
|
107
99
|
}
|
|
108
100
|
}
|
|
109
101
|
const rtpCapabilities = {
|
|
110
102
|
codecs: Array.from(codecsMap.values()),
|
|
111
|
-
headerExtensions:
|
|
103
|
+
headerExtensions: Array.from(headerExtensionMap.values()),
|
|
112
104
|
};
|
|
113
105
|
return rtpCapabilities;
|
|
114
106
|
}
|
package/lib/index.d.ts
CHANGED