let videoFrameMap = new Map(); let encodedVideoChunkMap = new Map(); self.onmessage = (e) => { if (e.data == 'create-VideoFrame') { let frameOrError = null; try { frameOrError = new VideoFrame( new Uint8Array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ]), { timestamp: 0, codedWidth: 2, codedHeight: 2, format: 'RGBA', }); } catch (error) { frameOrError = error } e.source.postMessage(frameOrError); return; } if (e.data == 'create-EncodedVideoChunk') { let chunkOrError = null; try { chunkOrError = new EncodedVideoChunk({ type: 'key', timestamp: 0, duration: 1, data: new Uint8Array([2, 3, 4, 5]) }); } catch (error) { chunkOrError = error } e.source.postMessage(chunkOrError); return; } if (e.data.hasOwnProperty('videoFrameId')) { e.source.postMessage( videoFrameMap.get(e.data.videoFrameId) ? 'RECEIVED' : 'NOT_RECEIVED'); return; } if (e.data.hasOwnProperty('encodedVideoChunkId')) { e.source.postMessage( encodedVideoChunkMap.get(e.data.encodedVideoChunkId) ? 'RECEIVED' : 'NOT_RECEIVED'); return; } if (e.data.toString() == '[object VideoFrame]') { videoFrameMap.set(e.data.timestamp, e.data); return; } if (e.data.toString() == '[object EncodedVideoChunk]') { encodedVideoChunkMap.set(e.data.timestamp, e.data); } };