当前位置: 首页 > news >正文

Android TV上OTT PWA应用开发的播放器选择:video.js vs exoplayer

跨平台 OTT PWA 应用开发,最方便的当然是选用 video.js 库。但是既然是安卓平台,exoplayer 看起来总是最稳妥的选择

介绍

Exoplayer 是 Android media3 的一个实现,以前是独立出来的,现在已经合并到 androidx.media3 中了。
Video.js 则是一个 js 库,给它一个 video dom 元素,它会把一系列操作挂上去,并提供一个 manager 来管理,从而获取 video 的状态和给 video 发送命令
二者都是老牌的播放器,video.js 从 2010 年就有了,使用它的产品很多,exoplayer 更不用说,google 开发维护的,因此都具有

功能

ExoplayerVideo.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 / AC4AAC HE-AAC AC4√,AC3 EAC3 需要 FFmpeg 库AAC HE-AAC EAC-3√ AC3× AC4 无数据,大概率 ×
Widevine / PlayReadyWidevine(CBCS, CENC) on fmp4、PlayReady(CENC) on fmp4√ CMAF×,PlayReady 仅在 Android TV 上 √√ (with videojs-contrib-eme plugin)
TTML / SMPTE-TT / WebVTTWebVTT√ 其他 ×
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 情况五项,结果我把具体数据隐去了,只说结论:

  1. GPU 方面,二者总体帧率差别不大,不过 exoplayer 大部分时间能稳在红线(30 帧)以下,video.js 则在 30 帧徘徊,大部分时间在红线往上
  2. CPU 方面,平均值和最高点,video.js 都是 exoplayer 的两倍左右
  3. 内存占用方面,video.js 也差不多是 exoplayer 的两倍
  4. 视频流加载时间,其实两个都有点慢,video.js 比 exoplayer 更慢一点
  5. multi video,用四个 exoplayer 播放四路视频流没什么问题,但是 video.js 就不行了,完全播不出来第二个
http://www.lryc.cn/news/423997.html

相关文章:

  • 24.8.14 《CLR via C#》 笔记12
  • P2801 教主的魔法
  • Go 语言channel的应用场景及使用技巧
  • QLabel设置图像的方法+绘制文本换行显示
  • LVS原理及相关配置
  • webrtc一对一视频通话功能实现
  • 通道(channel)传递数据的例子写一个
  • Vue3+Echarts+饼图环形图
  • Python while编程题目|AI悦创Python一对一教学辅导
  • C语言 | Leetcode C语言题解之第324题摆动排序II
  • Docker③_VMware虚拟机和Docker的备份与恢复
  • 【EMC专题】ESD抑制器简要介绍
  • 贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)
  • 『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比!
  • 基于SpringBoot+Vue框架的租车管理系统
  • HAProxy基本配置及参数实操
  • go-zero中间件的使用
  • 六、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色优化超时和线程
  • (el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程
  • UIAbility组件基础(一)
  • 神经网络的数学原理
  • Java设计模式-抽象工厂模式-一次性理解透
  • day16-测试自动化之selenium的PO模式
  • Springboot+freemarker大段文本内容动态修改输出,所见即所得
  • Kali Linux网络问题解决与静态IP配置技巧
  • 网络状态码-经验笔记
  • c++ 实现 actor 框架
  • 应对猫咪掉毛挑战,希喂、小米热门宠物空气净化器实测功效PK
  • 0002 保险会计及其特殊性
  • ChatTTS:终极文本转语音工具,支持API!