static initializeWorker()

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);
      }
    };
  }