概述WebCodecs 提供直接访问媒体编解码器的接口(如 `VideoDecoder`/`VideoEncoder`),用于低延迟渲染与高性能管线。它不负责容器/复用/传输层,需要结合 MSE/WebRTC 或自定义复用器。合理的帧生命周期管理与硬件加速偏好至关重要。解码示例:VideoDecoder 输出到 OffscreenCanvasconst canvas = new OffscreenCanvas(1280, 720)
const ctx = canvas.getContext('2d')
const decoder = new VideoDecoder({
output: frame => {
// 将解码帧绘制到画布,并及时释放资源
const bitmap = frame.clone()
ctx.drawImage(bitmap, 0, 0)
frame.close()
bitmap.close()
},
error: e => console.error(e)
})
decoder.configure({ codec: 'vp09.00.10.08', hardwareAcceleration: 'prefer-hardware' })
// 提供编码帧数据(示意);真实场景需从网络分片组装为 chunks
const chunk = new EncodedVideoChunk({ type: 'key', timestamp: 0, data: someBuffer })
decoder.decode(chunk)
编码示例:VideoEncoder 基本使用const encoder = new VideoEncoder({
output: chunk => {
// 将编码数据送往网络/存储;真实场景需复用到容器(如 MP4/WEBM)
sendEncodedChunk(chunk)
},
error: e => console.error(e)
})
encoder.configure({
codec: 'avc1.42001E',
width: 1280,
height: 720,
bitrate: 2_000_000,
framerate: 30,
hardwareAcceleration: 'prefer-hardware'
})
// 将渲染帧编码(示意)
const frame = new VideoFrame(canvas, { timestamp: performance.now() })
encoder.encode(frame)
frame.close()
工程建议生命周期:`VideoFrame`/`ImageBitmap` 使用后立即 `close()`;避免无界内存增长。硬件加速:配置 `hardwareAcceleration`(`prefer-hardware`/`deny`),根据平台能力与功耗进行权衡。与 MSE/WebRTC 的协作:MSE:适合点播/直播的拉流播放;编码侧需容器复用。WebRTC:适合实时互动与低延迟;结合 `RTCRtpSender`/`getStats` 调整码率与分辨率。兼容与回退:对不支持的浏览器回退到 `HTMLVideoElement` + MSE;检测 API 可用性后再初始化。参考与验证MDN WebCodecs 指南:https://developer.mozilla.org/docs/Web/API/WebCodecs_APIWICG WebCodecs 规范草案:https://wicg.github.io/webcodecs/web.dev WebCodecs 文章:https://web.dev/articles/webcodecsChrome 媒体相关文档:https://developer.chrome.com/docs/web-platform/webcodecs/

发表评论 取消回复