跨平台 OTT PWA 应用开发,最方便的当然是选用 video.js 库。但是既然是安卓平台,exoplayer 看起来总是最稳妥的选择
介绍
Exoplayer 是 Android media3 的一个实现,以前是独立出来的,现在已经合并到 androidx.media3 中了。
Video.js 则是一个 js 库,给它一个 video dom 元素,它会把一系列操作挂上去,并提供一个 manager 来管理,从而获取 video 的状态和给 video 发送命令
二者都是老牌的播放器,video.js 从 2010 年就有了,使用它的产品很多,exoplayer 更不用说,google 开发维护的,因此都具有
功能
Exoplayer | Video.js | |
---|---|---|
DASH / HLS | √ | √ (with videojs-contrib-dash、videojs-contrib-hls plugin) |
H.264(AVC) / H.265(HEVC) | √ | H.264√,H.265 仅在 IE 和 Safari 上 √,Chromium× |
AAC / HE-AAC / AC3 / EAC-3 / AC4 | AAC HE-AAC AC4√,AC3 EAC3 需要 FFmpeg 库 | AAC HE-AAC EAC-3√ AC3× AC4 无数据,大概率 × |
Widevine / PlayReady | Widevine(CBCS, CENC) on fmp4、PlayReady(CENC) on fmp4√ CMAF×,PlayReady 仅在 Android TV 上 √ | √ (with videojs-contrib-eme plugin) |
TTML / SMPTE-TT / WebVTT | √ | WebVTT√ 其他 × |
SSAI | √ | √ (with videojs-contrib-ads plugin) |
数据源:
- https://developer.android.com/media/media3/exoplayer/supported-formats?hl=en
- https://developer.android.com/media/media3/exoplayer/drm?hl=en
- https://developer.android.com/media/media3/exoplayer/hls
- https://developer.android.com/media/media3/exoplayer/dash AC4:
- https://github.com/google/ExoPlayer/pull/5303
- https://videojs.com/html5-video-support/
- https://github.com/videojs/video.js/issues/7206
- https://videojs.com/guides/text-tracks/
首先看比较基础的功能,dash 和 hls。video.js 可以通过插件进行支持,exoplayer 本来就支持
视频编码,由于 Chrome 不支持 H.265 视频编码,导致 video.js 也不支持
音频编码,video.js 也受制于 chrome
drm,video.js 也是有插件,exoplayer 原生支持
字幕方面,Exoplayer 支持情况较好,video.js 只支持 webvtt
ad,主要是 SSAI,video.js 用插件可以,exoplayer 也可以
性能
使用 video.js 和 exoplayer 分别构建一个仅包含一个 player 的 app,测试其 GPU,CPU,Memory,视频流加载时间,multi video 情况五项,结果我把具体数据隐去了,只说结论:
- GPU 方面,二者总体帧率差别不大,不过 exoplayer 大部分时间能稳在红线(30 帧)以下,video.js 则在 30 帧徘徊,大部分时间在红线往上
- CPU 方面,平均值和最高点,video.js 都是 exoplayer 的两倍左右
- 内存占用方面,video.js 也差不多是 exoplayer 的两倍
- 视频流加载时间,其实两个都有点慢,video.js 比 exoplayer 更慢一点
- multi video,用四个 exoplayer 播放四路视频流没什么问题,但是 video.js 就不行了,完全播不出来第二个