in src/redundantaudioencoder/RedundantAudioEncoder.ts [88:131]
static initializeWorker(): void {
RedundantAudioEncoder.log('Initializing RedundantAudioEncoder');
const encoder = new RedundantAudioEncoder();
// RED encoding is done using WebRTC Encoded Transform
// https://github.com/w3c/webrtc-encoded-transform/blob/main/explainer.md
// Check the DedicatedWorkerGlobalScope for existence of
// RTCRtpScriptTransformer interface. If exists, then
// RTCRtpScriptTransform is supported by this browser.
// @ts-ignore
if (self.RTCRtpScriptTransformer) {
// @ts-ignore
self.onrtctransform = (event: RTCTransformEvent) => {
if (event.transformer.options.type === 'SenderTransform') {
encoder.setupSenderTransform(event.transformer.readable, event.transformer.writable);
} else if (event.transformer.options.type === 'ReceiverTransform') {
encoder.setupReceiverTransform(event.transformer.readable, event.transformer.writable);
} else if (event.transformer.options.type === 'PassthroughTransform') {
encoder.setupPassthroughTransform(event.transformer.readable, event.transformer.writable);
}
};
}
self.onmessage = (event: MessageEvent) => {
if (event.data.msgType === 'StartRedWorker') {
encoder.setupSenderTransform(event.data.send.readable, event.data.send.writable);
encoder.setupReceiverTransform(event.data.receive.readable, event.data.receive.writable);
} else if (event.data.msgType === 'PassthroughTransform') {
encoder.setupPassthroughTransform(event.data.send.readable, event.data.send.writable);
encoder.setupPassthroughTransform(event.data.receive.readable, event.data.receive.writable);
} else if (event.data.msgType === 'RedPayloadType') {
encoder.setRedPayloadType(event.data.payloadType);
} else if (event.data.msgType === 'OpusPayloadType') {
encoder.setOpusPayloadType(event.data.payloadType);
} else if (event.data.msgType === 'UpdateNumRedundantEncodings') {
encoder.setNumRedundantEncodings(event.data.numRedundantEncodings);
} else if (event.data.msgType === 'Enable') {
encoder.setRedundancyEnabled(true);
} else if (event.data.msgType === 'Disable') {
encoder.setRedundancyEnabled(false);
}
};
}