概述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

发表评论 取消回复