Skip to content

Commit 8b46bef

Browse files
committed
fix: nuke mediastream impl
1 parent 03ac9d3 commit 8b46bef

File tree

4 files changed

+12
-491
lines changed

4 files changed

+12
-491
lines changed

src/polyfill/MediaStream.ts

-177
This file was deleted.

src/polyfill/RTCPeerConnection.ts

+12-105
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
1-
import { Audio, DataChannel, DataChannelInitConfig, Direction, PeerConnection, RtcpReceivingSession, Track, Video } from '../lib/index';
1+
import { DataChannel, DataChannelInitConfig, PeerConnection } from '../lib/index';
22
import RTCSessionDescription from './RTCSessionDescription';
33
import RTCDataChannel from './RTCDataChannel';
44
import RTCIceCandidate from './RTCIceCandidate';
55
import { RTCDataChannelEvent, RTCPeerConnectionIceEvent } from './Events';
66
import RTCSctpTransport from './RTCSctpTransport';
77
import * as exceptions from './Exception';
88
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-
}
209

2110
// extend RTCConfiguration with peerIdentity
2211
interface RTCConfiguration extends globalThis.RTCConfiguration {
@@ -32,9 +21,6 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
3221
#localOffer: ReturnType<typeof createDeferredPromise>;
3322
#localAnswer: ReturnType<typeof createDeferredPromise>;
3423
#dataChannels = new Set<RTCDataChannel>();
35-
#tracks = new Set<Track>()
36-
#transceivers: RTCRtpTransceiver[] = []
37-
#unusedTransceivers: RTCRtpTransceiver[] = []
3824
#dataChannelsClosed = 0;
3925
#config: RTCConfiguration;
4026
#canTrickleIceCandidates: boolean | null = null;
@@ -161,22 +147,6 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
161147
}
162148
});
163149

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-
180150
this.#peerConnection.onLocalCandidate((candidate, sdpMid) => {
181151
if (sdpMid === 'unspec') {
182152
this.#localAnswer.reject(new Error(`Invalid description type ${sdpMid}`));
@@ -325,84 +295,28 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
325295
throw new DOMException(error.message, 'UnknownError');
326296
}
327297
}
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-
}
335298

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
375301
}
376302

377303

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
392306
}
393307

394-
getReceivers (): RTCRtpReceiver[] {
308+
getReceivers (): globalThis.RTCRtpReceiver[] {
395309
// receivers are created on ontrack
396-
return this.#transceivers.map(tr => tr.direction === 'recvonly' && tr.receiver).filter(re => re)
310+
return []
397311
}
398312

399-
getSenders (): RTCRtpSender[] {
313+
getSenders (): globalThis.RTCRtpSender[] {
400314
// senders are created on addTrack or addTransceiver
401-
return this.#transceivers.map(tr => tr.direction === 'sendonly' && tr.sender).filter(se => se)
315+
return []
402316
}
403317

404-
getTracks (): Track[] {
405-
return [...this.#tracks]
318+
getTracks (): globalThis.MediaStreamTrack[] {
319+
return []
406320
}
407321

408322
close(): void {
@@ -412,13 +326,6 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
412326
this.#dataChannelsClosed++;
413327
});
414328

415-
for (const transceiver of this.#transceivers) {
416-
transceiver.close()
417-
}
418-
for (const track of this.#tracks) {
419-
track.close()
420-
}
421-
422329
this.#peerConnection.close();
423330
}
424331

@@ -552,7 +459,7 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
552459
}
553460

554461
getTransceivers(): globalThis.RTCRtpTransceiver[] {
555-
return this.#transceivers;
462+
return [];
556463
}
557464

558465
removeTrack(): void {

0 commit comments

Comments
 (0)