首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >H.265 软解选型实录:CCPlayer 为什么用 WASM + Canvas,而不是 WebCodecs

H.265 软解选型实录:CCPlayer 为什么用 WASM + Canvas,而不是 WebCodecs

原创
作者头像
用户12797848
修改于 2026-10-29 12:50:29
修改于 2026-10-29 12:50:29
110
举报

在线演示:https://player.ccnvr.com

源码仓库:https://github.com/ccnvr/ccplayer

H265

H.265 在安防、教育、广电这几个圈子里基本已经是默认编码。摄像头出厂就是 H.265,同画质下码率比 H.264 省将近一半。

方案选择

1、MSE 硬解

最优方案,使用浏览器默认支持(Media Source Extensions),目前Chrome支持h265。这种方案会调用系统GPU硬件。效果,性能最优。

2、WebCodecs

新方案,使用 VideoDecoder

把系统 / 浏览器已有的解码能力封装成可调用的 API。底层实际干活的是操作系统的解码模块:

  • Windows → DXVA(硬解,取决于有没有装对应扩展)
  • Linux → VAAPI / VDPAU
  • macOS → VideoToolbox

decode 进去的是压缩流,出来的是能画的原始帧,中间那步不在 JS 里

缺点是强制 HTTPS

3、WASM + Canvas

兼容最佳方案

WebAssembly 本身不受 secure context 限制。HTTP 页面照样可以 fetch 一个 .wasm、编译、执行。这是我们最终选它的直接原因,没有更复杂的理由。

画面则画在一块覆盖在 video 上方的 canvas 上。video 只负责出声和走时间,画面由 canvas 出。

CCPlayer

CCPlayer 集成了 ws-flv、http-flv、mp4、hls 的软解能力,统一天下解决h265播放问题。应该是市面上兼容性最强的播放了。并且CCPlayer 完全免费

这是使用方法,非常简单:

代码语言:javascript
复制
import Player from 'ccplayer'
import 'ccplayer-flv'
import 'ccplayer-soft-decode' // import 即注册,之后 softDecode 默认为 'auto'

new Player({
  id: 'mse',
  url: 'http://192.168.1.10:8080/live/stream.flv',
  isLive: true,
  softDecode: 'auto',
  softDecodeOptions: {
    wasmBaseUrl: '/wasm', // 内网自托管,指向包含 decode/ 的那一层
    openLog: true
  },
  onSoftDecodeFallback (info) {
    console.log('已回退软解', info.reason)
  }
})

基于西瓜播放器(xgplayer)二次封装。 API 完全一致,ui完全一致。无感切换。比jessibuca和easyplayer 更加稳定可靠。api更简洁。

这里真的要吐槽一下 easyplayer和jessibuca。easyplayer API 文档乱七八糟非常不完善,还有公司logo,没人维护,样式还丑。jessibuca 收费,支持直播。免费版软解只支持到720p,api太多,太乱,都不知道怎么配置。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • H265
  • 方案选择
    • 1、MSE 硬解
    • 2、WebCodecs
    • 3、WASM + Canvas
  • CCPlayer
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档