1
- import { Audio , DataChannel , DataChannelInitConfig , Direction , PeerConnection , RtcpReceivingSession , Track , Video } from '../lib/index' ;
1
+ import { DataChannel , DataChannelInitConfig , PeerConnection } from '../lib/index' ;
2
2
import RTCSessionDescription from './RTCSessionDescription' ;
3
3
import RTCDataChannel from './RTCDataChannel' ;
4
4
import RTCIceCandidate from './RTCIceCandidate' ;
5
5
import { RTCDataChannelEvent , RTCPeerConnectionIceEvent } from './Events' ;
6
6
import RTCSctpTransport from './RTCSctpTransport' ;
7
7
import * as exceptions from './Exception' ;
8
8
import RTCCertificate from './RTCCertificate' ;
9
- import { RTCRtpSender , RTCRtpTransceiver } from './RTCRtp' ;
10
- import { MediaStreamTrack } from './MediaStream' ;
11
-
12
- const ndcDirectionMap : Record < string , Direction > = {
13
- inactive : 'Inactive' ,
14
- recvonly : 'RecvOnly' ,
15
- sendonly : 'SendOnly' ,
16
- sendrecv : 'SendRecv' ,
17
- stopped : 'Inactive' ,
18
- undefined : 'Unknown'
19
- }
20
9
21
10
// extend RTCConfiguration with peerIdentity
22
11
interface RTCConfiguration extends globalThis . RTCConfiguration {
@@ -32,9 +21,6 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
32
21
#localOffer: ReturnType < typeof createDeferredPromise > ;
33
22
#localAnswer: ReturnType < typeof createDeferredPromise > ;
34
23
#dataChannels = new Set < RTCDataChannel > ( ) ;
35
- #tracks = new Set < Track > ( )
36
- #transceivers: RTCRtpTransceiver [ ] = [ ]
37
- #unusedTransceivers: RTCRtpTransceiver [ ] = [ ]
38
24
#dataChannelsClosed = 0 ;
39
25
#config: RTCConfiguration ;
40
26
#canTrickleIceCandidates: boolean | null = null ;
@@ -161,22 +147,6 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
161
147
}
162
148
} ) ;
163
149
164
- this . #peerConnection. onTrack ( track => {
165
- const transceiver = new RTCRtpTransceiver ( { transceiver : track , pc : this } )
166
- this . #tracks. add ( track )
167
- transceiver . _setNDCTrack ( track )
168
- this . #transceivers. push ( transceiver )
169
- const mediastream = new MediaStreamTrack ( { kind : track . type ( ) , label : track . mid ( ) } )
170
- mediastream . track = track
171
- track . onClosed ( ( ) => {
172
- this . #tracks. delete ( track )
173
- mediastream . dispatchEvent ( new Event ( 'ended' ) )
174
- } )
175
- track . onMessage ( buf => mediastream . stream . push ( buf ) )
176
- transceiver . receiver . track = mediastream
177
- this . dispatchEvent ( new RTCTrackEvent ( 'track' , { track : mediastream , receiver : transceiver . receiver , transceiver } ) )
178
- } )
179
-
180
150
this . #peerConnection. onLocalCandidate ( ( candidate , sdpMid ) => {
181
151
if ( sdpMid === 'unspec' ) {
182
152
this . #localAnswer. reject ( new Error ( `Invalid description type ${ sdpMid } ` ) ) ;
@@ -325,84 +295,28 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
325
295
throw new DOMException ( error . message , 'UnknownError' ) ;
326
296
}
327
297
}
328
-
329
- #findUnusedTransceiver ( kind ) : RTCRtpTransceiver | null {
330
- const unused = this . #unusedTransceivers. find ( tr => tr . track . type ( ) === kind && tr . direction === 'sendonly' )
331
- if ( ! unused ) return null
332
- this . #unusedTransceivers. splice ( this . #unusedTransceivers. indexOf ( unused ) , 1 )
333
- return unused
334
- }
335
298
336
- #setUpTrack ( media : Video | Audio , track : MediaStreamTrack , transceiver : RTCRtpTransceiver , direction ) : void {
337
- const session = new RtcpReceivingSession ( )
338
- const pctrack = this . #peerConnection. addTrack ( media )
339
- this . #tracks. add ( pctrack )
340
- pctrack . onClosed ( ( ) => {
341
- this . #tracks. delete ( pctrack )
342
- track . dispatchEvent ( new Event ( 'ended' ) )
343
- } )
344
- pctrack . setMediaHandler ( session )
345
- track . media = media
346
- track . track = pctrack
347
- transceiver . _setNDCTrack ( pctrack )
348
- track . stream . on ( 'data' , buf => {
349
- pctrack . sendMessageBinary ( buf )
350
- } )
351
- if ( direction === 'recvonly' ) {
352
- transceiver . receiver . track = track
353
- } else if ( direction === 'sendonly' ) {
354
- transceiver . sender . track = track
355
- }
356
- if ( this . #announceNegotiation) {
357
- this . #announceNegotiation = false
358
- this . dispatchEvent ( new Event ( 'negotiationneeded' ) )
359
- }
360
- }
361
-
362
- addTrack ( track , ...streams ) : RTCRtpSender {
363
- for ( const stream of streams ) stream . addTrack ( track )
364
-
365
- const kind = track . kind
366
-
367
- const unused = this . #findUnusedTransceiver( kind )
368
- if ( unused ) {
369
- this . #setUpTrack( unused . media , track , unused , 'sendonly' )
370
- return unused . sender
371
- } else {
372
- const transceiver = this . addTransceiver ( track , { direction : 'sendonly' } )
373
- return transceiver . sender
374
- }
299
+ addTrack ( ) : globalThis . RTCRtpSender {
300
+ return { } as globalThis . RTCRtpSender
375
301
}
376
302
377
303
378
- addTransceiver ( trackOrKind : MediaStreamTrack | string , { direction = 'inactive' } : RTCRtpTransceiverInit = { } ) : RTCRtpTransceiver {
379
- if ( direction === 'sendrecv' ) throw new TypeError ( 'unsupported' )
380
- const track = trackOrKind instanceof MediaStreamTrack && trackOrKind
381
- const kind = ( track && track . kind ) || trackOrKind
382
- const ndcMedia = kind === 'video' ? new Video ( 'video' , ndcDirectionMap [ direction ] ) : new Audio ( 'audio' , ndcDirectionMap [ direction ] )
383
-
384
- const transceiver = new RTCRtpTransceiver ( { transceiver : ndcMedia , pc : this } )
385
- this . #transceivers. push ( transceiver )
386
- if ( track ) {
387
- this . #setUpTrack( ndcMedia , track , transceiver , direction )
388
- } else {
389
- this . #unusedTransceivers. push ( transceiver )
390
- }
391
- return transceiver
304
+ addTransceiver ( ) : globalThis . RTCRtpTransceiver {
305
+ return { } as globalThis . RTCRtpTransceiver
392
306
}
393
307
394
- getReceivers ( ) : RTCRtpReceiver [ ] {
308
+ getReceivers ( ) : globalThis . RTCRtpReceiver [ ] {
395
309
// receivers are created on ontrack
396
- return this . #transceivers . map ( tr => tr . direction === 'recvonly' && tr . receiver ) . filter ( re => re )
310
+ return [ ]
397
311
}
398
312
399
- getSenders ( ) : RTCRtpSender [ ] {
313
+ getSenders ( ) : globalThis . RTCRtpSender [ ] {
400
314
// senders are created on addTrack or addTransceiver
401
- return this . #transceivers . map ( tr => tr . direction === 'sendonly' && tr . sender ) . filter ( se => se )
315
+ return [ ]
402
316
}
403
317
404
- getTracks ( ) : Track [ ] {
405
- return [ ... this . #tracks ]
318
+ getTracks ( ) : globalThis . MediaStreamTrack [ ] {
319
+ return [ ]
406
320
}
407
321
408
322
close ( ) : void {
@@ -412,13 +326,6 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
412
326
this . #dataChannelsClosed++ ;
413
327
} ) ;
414
328
415
- for ( const transceiver of this . #transceivers) {
416
- transceiver . close ( )
417
- }
418
- for ( const track of this . #tracks) {
419
- track . close ( )
420
- }
421
-
422
329
this . #peerConnection. close ( ) ;
423
330
}
424
331
@@ -552,7 +459,7 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
552
459
}
553
460
554
461
getTransceivers ( ) : globalThis . RTCRtpTransceiver [ ] {
555
- return this . #transceivers ;
462
+ return [ ] ;
556
463
}
557
464
558
465
removeTrack ( ) : void {
0 commit comments