当前位置: 首页 > 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 就不行了,完全播不出来第二个

相关文章:

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

跨平台 OTT PWA 应用开发,最方便的当然是选用 video.js 库。但是既然是安卓平台,exoplayer 看起来总是最稳妥的选择 介绍 Exoplayer 是 Android media3 的一个实现,以前是独立出来的,现在已经合并到 androidx.media3 中了。 Vid…...

24.8.14 《CLR via C#》 笔记12

第十五章 枚举类型和位标志 使用枚举类型而不是硬编码的理由:枚举类型更易编写,阅读和维护;枚举类型是强类型枚举类型是值类型,不能定义任何方法,属性或事件,可利用扩展方法向枚举类型添加方法枚举类型定义…...

P2801 教主的魔法

[题目通道](教主的魔法 - 洛谷) 摘要 分块,是一种优雅的暴力,它通过对数列分段,完成对数列一些区间操作和区间查询的操作,是一种根号算法。 这篇学习笔记&题解是本萌新在学习分块过程中的一些感悟,希望能够帮助…...

Go 语言channel的应用场景及使用技巧

通过反映的方式执行 select 语句。这在处理有很多 case 子句,尤其是不定长 case 子句的情况时非常有用。 1. 使用反射操作 select 和 channel 使用 select 语句可以处理 chan 的 send 和 recv, send 和 recv 都可以作为 case 子句。如果需要同时处理两个 chan, 则可以写成下面…...

QLabel设置图像的方法+绘制文本换行显示

1、QLabel设置图像有两种方法 (1) void setPicture(const QPicture &); (2) void setPixmap(const QPixmap &); QPicture和QPixmap都是继承于QPaintDevice,它们都可以通过加载图片的方式获取:bool load(QIODevice *dev, const char *format …...

LVS原理及相关配置

1. 描述以及工作原理 1. 什么是 LVS linux virtural server 的简称,也就是 linxu 虚拟机服务器,这是一个 由章文嵩博士发起的开源项目,官网是 http://www.linuxvirtualserver.org,现在 lvs 已经是 linux 内核标 准的一部分,使用…...

webrtc一对一视频通话功能实现

项目效果 实现原理 关于原理我就不做说明,直接看图 WebRTC建立的时序图 系统用例逻辑 搭建环境 turn服务器:Ubuntu24.04搭建turn服务器 mkcert的安装和使用:配置https访问 必须使用https协议, 由于浏览器的安全策略导致的&am…...

通道(channel)传递数据的例子写一个

当然!以下是一个简单的 Go 程序示例,展示了如何使用通道(channel)在两个 goroutine 之间传递数据。示例代码 go package mainimport ("fmt""time" )// 发送数据到通道的 goroutine func sendData(ch chan int…...

Vue3+Echarts+饼图环形图

记得给容器宽高 <div id"leftChartguawang" style"height: 28vh"></div> 配置函数 const leftChartguawang () > {const chartBox echarts.init(document.getElementById(leftChartguawang))let datas [[{ name: 居民节能建筑, value…...

Python while编程题目|AI悦创Python一对一教学辅导

你好&#xff0c;我是悦创。 以下是十道有创意的while循环编程题目&#xff0c;每道题目都有一定的难度&#xff0c;适合锻炼编程逻辑和思维能力。 题目1&#xff1a;旋转字符串 描述&#xff1a;给定一个字符串&#xff0c;每次循环将字符串的第一个字符移到末尾&#xff0…...

C语言 | Leetcode C语言题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; static inline void swap(int *a, int *b) {int c *a;*a *b;*b c; }static inline int partitionAroundPivot(int left, int right, int pivot, int *nums) {int pivotValue nums[pivot];int newPivot left;swap(&nums[pivot], &a…...

Docker③_VMware虚拟机和Docker的备份与恢复

目录 1. VMware虚拟机的快照备份 1.1 VMware本机的快照备份 1.2 VMware快照备份到另一电脑 2. Docker知识点 2.1 Docker镜像和容器的关系 2.2 Docker的存储卷 2.3 Docker命令简介 2.4 删除Anylink镜像 3. Docker备份和恢复 3.1 确定要回滚的容器和版本 3.2 备份当前…...

【EMC专题】ESD抑制器简要介绍

在ESD保护器件中可以分为陶瓷基类型和半导体基类型。其中有一类陶瓷基类型,使用的机制是电极间放电方法的产品就是ESD抑制器。本文章简要介绍了ESD抑制器的特点、基本结构和特性。 ESD抑制器的特点 ESD抑制器是间隙型的ESD(静电放电 Electrostatic Discharge)对策保护元件,…...

贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)

目录 标题&#xff1a;贷齐乐系统最新版SQL注入&#xff08;绕过WAF可union select跨表查询&#xff09; 内容&#xff1a; 一&#xff0c;环境部署 二&#xff0c;源码分析 三&#xff0c;sql注入 总结&#xff1a; [回到顶部]&#xff08;#article_top&#xff09; 一&am…...

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比!

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比! 文章目录 一. 虚拟机(Virtual Machine,VM)与Docker对比!1. 定义这两种技术2. 工作原理3. 关于如何选择适合工作负载的技术的指导二. 参考文献Docker 只是一个轻量级的虚拟机吗?虽然二者确实有一个共同点,即 虚…...

基于SpringBoot+Vue框架的租车管理系统

文章目录 一、项目介绍二、项目类型三、技术栈介绍1.客户端技术栈2.服务端技术栈 四、项目创新点五、项目功能介绍1.客户端功能2.服务端功能 六、项目的主要截图页面如下展示1.客户端展示2.服务端展示 七、项目源码 一、项目介绍 ​大家好&#xff0c;我是执手天涯&#xff0c;…...

HAProxy基本配置及参数实操

目录 ​编辑什么是负载均衡 为什么用负载均衡 四层和七层的区别 实验环境 实验步骤 webserver上安装nginx 启动nginx 安装haproxy 编辑配置文件 多进程 多线程 SORRY SERVER 访问重定向 maxconne最大可承受连接 socat 工具 常用示例 ha p r ox y 的 算 法 静 …...

go-zero中间件的使用

一、自定义中间件 1、在api中在服务中定义一个中间件,名字随便取 type PostDemoReq {Name string json:"name" validate:"required" // 姓名Age int64 json:"age" validate:"required,gte1,lte130" // 年龄// optional 表示可选,omi…...

六、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色优化超时和线程

实现通过ESP32S3连接Wi-Fi并使用Web页面控制WS2812灯珠的颜色&#xff0c;可以使用ESP32的WebServer库来创建一个简单的Web界面。通过这个界面&#xff0c;可以动态地控制灯珠的显示效果。 针对 五、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色…...

(el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程

Ⅰ、Element-plus 提供的 TimePicker 时间选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 TimePicker 组件情况&#xff1a; 其一、Element-ui 自提供的 TimePicker 代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template>…...

超实用!电机、仪表盘、流动条…一个专为工控量身打造的 WinForm 控件库

前言在.NET 开发中&#xff0c;WinForm 虽然早已不是"新潮"的代名词&#xff0c;却依然活跃在大量工业控制、设备配套和企业内部系统中。原因很简单&#xff1a;稳定、轻量、部署简单&#xff0c;尤其适合对图形性能要求不高但对兼容性和可靠性要求极高的场景。然而&…...

WarcraftHelper:魔兽争霸3现代兼容性问题的5个技术解决方案

WarcraftHelper&#xff1a;魔兽争霸3现代兼容性问题的5个技术解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一个专门为《…...

Maven项目实战:手动部署Oracle JDBC驱动的本地仓库配置指南

1. 为什么需要手动安装Oracle JDBC驱动 遇到Maven项目提示"Missing artifact com.oracle:ojdbc6:jar:11.2.0.3"时&#xff0c;很多Java开发者都会一头雾水。我刚开始接触Maven时也踩过这个坑&#xff0c;后来才明白这是因为Oracle的JDBC驱动&#xff08;ojdbc&#x…...

企业微信打卡数据拉取实战:Spring Boot + FastJSON 完整配置流程(含AccessToken获取避坑指南)

企业微信打卡数据集成实战&#xff1a;Spring Boot工程化解决方案 最近两年&#xff0c;越来越多的企业开始将考勤管理从传统硬件设备迁移到企业微信这样的数字化平台。但真正把打卡数据用起来&#xff0c;往往需要与企业内部系统深度集成。上周刚帮一家零售企业解决了这个问题…...

2026 年豆包开启付费订阅,中国 AI 大模型商业化迎来大考!

豆包更新付费订阅&#xff0c;打破行业免费格局2026 年 5 月 4 日&#xff0c;字节跳动旗下 AI 产品豆包在苹果 App Store 悄然更新付费订阅方案。标准版 68 元/月、加强版 200 元/月、专业版 500 元/月&#xff0c;这三档价格梯度划破了中国 AI 大模型行业持续两年的“免费狂欢…...

别再让扰动拖后腿!手把手教你用MATLAB/Simulink实现非线性系统的干扰观测器(附完整代码)

非线性系统扰动观测器实战&#xff1a;从理论到MATLAB代码的完整实现指南 在控制工程实践中&#xff0c;非线性系统的干扰抑制一直是工程师面临的棘手挑战。想象一下&#xff0c;你正在调试一台工业机械臂&#xff0c;理论模型完美无缺&#xff0c;但实际运行时总是出现无法解…...

LinkSwift:如何让网盘下载从龟速到光速?这款工具给出了答案

LinkSwift&#xff1a;如何让网盘下载从龟速到光速&#xff1f;这款工具给出了答案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国…...

Blender 3MF插件终极指南:如何实现3D打印工作流无缝对接

Blender 3MF插件终极指南&#xff1a;如何实现3D打印工作流无缝对接 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender 3MF插件是连接3D建模与3D打印制造的关键桥梁…...

TikTok评论采集终极指南:3步获取完整评论数据的简单方法

TikTok评论采集终极指南&#xff1a;3步获取完整评论数据的简单方法 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 还在为手动复制TikTok评论而烦恼吗&#xff1f;想要分析热门视频的用户反馈却无从下手&a…...

AI写教材工具推荐:低查重保障,高效生成专业教材不是梦!

教材编写与AI工具助力 教材的初稿终于完成&#xff0c;但修改与优化的阶段真是令人感到“折磨”。在仔细阅读整篇内容时&#xff0c;发现逻辑上的漏洞和知识点的错误&#xff0c;需要投入大量的时间去修复。更何况调整一个章节的结构时&#xff0c;可能会涉及到后续多个部分&a…...