| 185 | } |
| 186 | |
| 187 | async setupReceiverTransform(receiver: RTCRtpReceiver) { |
| 188 | console.log('Setting up receiver transform') |
| 189 | |
| 190 | // If this is Firefox, we will have to use RTCRtpScriptTransform |
| 191 | if (window.RTCRtpScriptTransform) { |
| 192 | receiver.transform = new RTCRtpScriptTransform(this.worker, { |
| 193 | operation: 'decryptStream', |
| 194 | }) |
| 195 | |
| 196 | return |
| 197 | } |
| 198 | |
| 199 | // Otherwise if this is Chrome we'll have to use createEncodedStreams |
| 200 | if ( |
| 201 | 'createEncodedStreams' in receiver && |
| 202 | typeof receiver.createEncodedStreams === 'function' |
| 203 | ) { |
| 204 | const senderStreams = receiver.createEncodedStreams() |
| 205 | const { readable, writable } = senderStreams |
| 206 | this.worker.postMessage( |
| 207 | { |
| 208 | type: 'decryptStream', |
| 209 | in: readable, |
| 210 | out: writable, |
| 211 | }, |
| 212 | [readable, writable] |
| 213 | ) |
| 214 | |
| 215 | return |
| 216 | } |
| 217 | |
| 218 | throw new Error( |
| 219 | 'Neither RTCRtpScriptTransform nor RTCRtpSender.createEncodedStreams methods supported' |
| 220 | ) |
| 221 | } |
| 222 | |
| 223 | decryptStream(inStream: ReadableStream, outStream: WritableStream) { |
| 224 | this.worker.postMessage({ |