RTCRtpScriptTransform-encoded-transform-worker.js (1718B)
1 const modification = 1; 2 3 function appendToBuffer(buffer, value) { 4 const result = new ArrayBuffer(buffer.byteLength + 1); 5 const byteResult = new Uint8Array(result); 6 byteResult.set(new Uint8Array(buffer), 0); 7 byteResult[buffer.byteLength] = value; 8 return result; 9 } 10 11 function ModifyAndWrite(chunk, transformer) { 12 chunk.value.data = appendToBuffer(chunk.value.data, modification); 13 transformer.writer.write(chunk.value); 14 } 15 16 function RestoreAndWrite(chunk, transformer) { 17 const lastByte = new Uint8Array(chunk.value.data)[chunk.value.data.byteLength - 1]; 18 chunk.value.data = chunk.value.data.slice(0, chunk.value.data.byteLength - 1); 19 let frameData = chunk.value.data; 20 transformer.writer.write(chunk.value); 21 if (lastByte === modification && frameData.byteLength == 0) { 22 self.postMessage("got expected"); 23 } 24 else { 25 self.postMessage("unexpected value: lastByte (got " + lastByte + 26 ", expected " + modification + 27 "), frame data length (got " + frameData.byteLength + 28 ", expected 0))"); 29 } 30 } 31 onrtctransform = (event) => { 32 const transformer = event.transformer; 33 34 transformer.reader = transformer.readable.getReader(); 35 transformer.writer = transformer.writable.getWriter(); 36 async function process(transformer) 37 { 38 const chunk = await transformer.reader.read(); 39 if (chunk.done) 40 return; 41 if (transformer.options.name === 'sender') // sender 42 ModifyAndWrite(chunk, transformer); 43 else // receiver 44 RestoreAndWrite(chunk, transformer); 45 46 await process(transformer); 47 } 48 process(transformer); 49 }; 50 self.postMessage("registered");