@@ -130,10 +130,12 @@ export class Device {
130130 // Callback for sending Transports to request sending extended RTP capabilities
131131 // on demand.
132132 private _getSendExtendedRtpCapabilities ?: (
133- nativeRtpCapabilities : RtpCapabilities
133+ nativeSendRtpCapabilities : RtpCapabilities
134134 ) => ExtendedRtpCapabilities ;
135135 // Local RTP capabilities for receiving media.
136136 private _recvRtpCapabilities ?: RtpCapabilities ;
137+ // Local RTP capabilities for sending media.
138+ private _sendRtpCapabilities ?: RtpCapabilities ;
137139 // Whether we can produce audio/video based on remote RTP capabilities.
138140 private readonly _canProduceByKind : CanProduceByKind = {
139141 audio : false ,
@@ -260,16 +262,40 @@ export class Device {
260262 /**
261263 * RTP capabilities of the Device for receiving media.
262264 *
265+ * @deprecated Use {@link recvRtpCapabilities} instead.
266+ *
263267 * @throws {InvalidStateError } if not loaded.
264268 */
265269 get rtpCapabilities ( ) : RtpCapabilities {
270+ return this . recvRtpCapabilities ;
271+ }
272+
273+ /**
274+ * RTP capabilities of the Device for receiving media.
275+ *
276+ * @throws {InvalidStateError } if not loaded.
277+ */
278+ get recvRtpCapabilities ( ) : RtpCapabilities {
266279 if ( ! this . _loaded ) {
267280 throw new InvalidStateError ( 'not loaded' ) ;
268281 }
269282
270283 return this . _recvRtpCapabilities ! ;
271284 }
272285
286+ /**
287+ * RTP capabilities of the Device for sending media.
288+ *
289+ * @throws {InvalidStateError } if not loaded.
290+ */
291+ get sendRtpCapabilities ( ) : RtpCapabilities {
292+ if ( ! this . _loaded ) {
293+ throw new InvalidStateError ( 'not loaded' ) ;
294+ }
295+
296+ return this . _sendRtpCapabilities ! ;
297+ }
298+
273299 /**
274300 * SCTP capabilities of the Device.
275301 *
@@ -314,32 +340,44 @@ export class Device {
314340 const { getNativeRtpCapabilities, getNativeSctpCapabilities } =
315341 this . _handlerFactory ;
316342
317- const clonedNativeRtpCapabilities = utils . clone < RtpCapabilities > (
318- await getNativeRtpCapabilities ( )
343+ const clonedNativeRecvRtpCapabilities = utils . clone < RtpCapabilities > (
344+ await getNativeRtpCapabilities ( { direction : 'recvonly' } )
345+ ) ;
346+
347+ logger . debug (
348+ 'load() | got native receiving RTP capabilities:%o' ,
349+ clonedNativeRecvRtpCapabilities
319350 ) ;
320351
321352 // This may throw.
322- ortc . validateAndNormalizeRtpCapabilities ( clonedNativeRtpCapabilities ) ;
353+ ortc . validateAndNormalizeRtpCapabilities ( clonedNativeRecvRtpCapabilities ) ;
354+
355+ const clonedNativeSendRtpCapabilities = utils . clone < RtpCapabilities > (
356+ await getNativeRtpCapabilities ( { direction : 'sendonly' } )
357+ ) ;
323358
324359 logger . debug (
325- 'load() | got native RTP capabilities:%o' ,
326- clonedNativeRtpCapabilities
360+ 'load() | got native sending RTP capabilities:%o' ,
361+ clonedNativeSendRtpCapabilities
327362 ) ;
328363
364+ // This may throw.
365+ ortc . validateAndNormalizeRtpCapabilities ( clonedNativeSendRtpCapabilities ) ;
366+
329367 this . _getSendExtendedRtpCapabilities = (
330- nativeRtpCapabilities : RtpCapabilities
368+ nativeSendRtpCapabilities : RtpCapabilities
331369 ) => {
332370 return utils . clone < ExtendedRtpCapabilities > (
333371 ortc . getExtendedRtpCapabilities (
334- nativeRtpCapabilities ,
372+ nativeSendRtpCapabilities ,
335373 clonedRouterRtpCapabilities ,
336374 preferLocalCodecsOrder
337375 )
338376 ) ;
339377 } ;
340378
341379 const recvExtendedRtpCapabilities = ortc . getExtendedRtpCapabilities (
342- clonedNativeRtpCapabilities ,
380+ clonedNativeRecvRtpCapabilities ,
343381 clonedRouterRtpCapabilities ,
344382 /* preferLocalCodecsOrder */ false
345383 ) ;
@@ -349,22 +387,41 @@ export class Device {
349387 recvExtendedRtpCapabilities
350388 ) ;
351389
390+ logger . debug (
391+ 'load() | got receiving RTP capabilities:%o' ,
392+ this . _recvRtpCapabilities
393+ ) ;
394+
352395 // This may throw.
353396 ortc . validateAndNormalizeRtpCapabilities ( this . _recvRtpCapabilities ) ;
354397
398+ const sendExtendedRtpCapabilities = ortc . getExtendedRtpCapabilities (
399+ clonedNativeSendRtpCapabilities ,
400+ clonedRouterRtpCapabilities ,
401+ preferLocalCodecsOrder
402+ ) ;
403+
404+ // Generate our sending RTP capabilities for sending media.
405+ this . _sendRtpCapabilities = ortc . getSendRtpCapabilities (
406+ sendExtendedRtpCapabilities
407+ ) ;
408+
355409 logger . debug (
356- 'load() | got receiving RTP capabilities:%o' ,
357- this . _recvRtpCapabilities
410+ 'load() | got sending RTP capabilities:%o' ,
411+ this . _sendRtpCapabilities
358412 ) ;
359413
414+ // This may throw.
415+ ortc . validateAndNormalizeRtpCapabilities ( this . _sendRtpCapabilities ) ;
416+
360417 // Check whether we can produce audio/video.
361418 this . _canProduceByKind . audio = ortc . canSend (
362419 'audio' ,
363- this . _recvRtpCapabilities
420+ this . _sendRtpCapabilities
364421 ) ;
365422 this . _canProduceByKind . video = ortc . canSend (
366423 'video' ,
367- this . _recvRtpCapabilities
424+ this . _sendRtpCapabilities
368425 ) ;
369426
370427 // Generate our SCTP capabilities.
0 commit comments