概述Insertable Streams 允许对 `RTCRtpSender/Receiver` 的编码帧进行 JS 级变换,用于 E2EE 或水印特效。现代实现可通过 `RTCRtpScriptTransform` 在 Worker 中执行。用法/示例const pc = new RTCPeerConnection() const stream = await navigator.mediaDevices.getUserMedia({ video: true }) pc.addTrack(stream.getVideoTracks()[0], stream) const sender = pc.getSenders().find(s => s.track?.kind === 'video') const worker = new Worker('/transform.js', { type: 'module' }) sender.transform = new RTCRtpScriptTransform(worker, { name: 'encrypt' }) // transform.js (Worker) onrtctransform = e => { const { readable, writable } = e.transformer readable.pipeTo(new WritableStream({ write(frame) { // 对 frame.data 进行加密/变换后写入 writable.getWriter().write(frame) } })) } 工程建议在 Worker 中执行以降低主线程干扰;对加密使用 Web Crypto 并管理密钥轮换。关注兼容性,旧实现可能使用 `createEncodedStreams()`;提供关闭变换的回退路径。监控时延与丢帧,必要时降低分辨率或帧率以保证实时性。参考与验证web.dev:E2EE with insertable streams — https://web.dev/articles/webrtc-insertable-streamsW3C/Community:Insertable Streams — https://github.com/w3c/webrtc-extensions

发表评论 取消回复