首页/文章/javascript

全面横评 6 大前端视频播放器

2024-10-15
319611 分钟
...

前言

最近,我在负责公司的音视频开发,使用的技术栈是 Vue3,技术方案采用的是基于第三方库二次封装播放器组件,来实现公司的业务定制需求。

市面上有很多第三方视频库,在最开始进行技术选型的时候,我也花了很多时间。

现在初步把我们公司的音视频组件开发完成了,我对视频第三方库的技术选型进行一个总结分享,希望能帮助到正在进行音视频开发的你。

这次技术选型一共会对比 6 个第三方库:xgplayervideo.jsckplayer x3aliplayertcplayerflv.js

在对比每个第三库时,我都会给出文档地址、示例、Git 地址,便于大家自行对比。

我会给出收集到的每个第三方库的优缺点分析。对于部分重要的第三方库,将进行详细的优缺点分析;而对于涉及闭源等不可接受情况的库,优缺点分析将较为简略,不再深入对比。

因为我们技术团队的英文水平还达不到无障碍阅读英文文档的地步,所以第三库的文档是否支持中文,也是我们考虑的一个因素。

我们技术团队详细对比这些第三方库之后,最后选择的是 xgplayer

好了,接下来开始分析以上提到的 6 个音视频第三方库~

1. xgplayer(推荐)

这个库也是我们现在所采用的库,整体使用下来感觉很不错,文档很详细,支持自定义插件,社区活跃~
文档地址: h5player.bytedance.com/
示例地址: h5player.bytedance.com/examples/
Git 地址: github.com/bytedance/x…

优点

  1. 基本满足现有功能,自带截图 等功能
  2. 中文文档,有清晰详细的功能释义
  3. 可通过在线配置和生成对应功能代码参考,预览配置后的视频效果,开发体验好
  4. 项目积极维护
  5. 近期从 v2 版本升级到了 v3版本,优化了很多功能,开发体验更好
  6. 支持自定义插件,对开发业务定制需求很有用

缺点

  1. 直播需要浏览器支持Media Source Extensions
  2. PC Web端支持直接播放mp4视频,播放HLS、FLV、MPEG-DASH需要浏览器支持Media Source Extensions
  3. iOS Web端支持直接播放mp4和HLS,不支持播放FLV、MPEG-DASH(iOS webkitwebview 均不支持MediaSource,因此无法支持flv文件转封装播放)
  4. Android Web端支持直接播放mp4和HLS,播放FLV、MPEG-DASH需要浏览器支持Media Source Extensions
  5. 进度条拖动:拖动时,视频会一直播放当前拖动视频帧的声音,导致挺起来声音一卡一卡的,而且拖动一停止就立马开始播放视频
  6. 自动播放限制:对于大多数移动 webview 和浏览器,默认情况下会阻止有声自动播放。可以设置静音起播,达到自动播放的目的,不能保证一定能够自动播放,不同的app和浏览器配置不一样,表现不一样
  7. 打点功能没有提供图片的配置,可能需要二次开发或者用预览功能
  8. hls和flv不能同时添加,但是可以自己通过逻辑判断,去允许 hls 和 flv 同时播放
  9. Android 在网页端打开后截图很模糊

2. video.js(候选)

文档地址: videojs.com/
示例地址: videojs.com/advanced/?v…
Git 地址: github.com/videojs/vid…

优点

  1. 功能全面:提供暂停、播放等功能,基本满足项目所有功能需求
  2. 社区情况:社区活跃,项目持续维护
  3. 插件和主题丰富:可以根据需求进行定制和扩展
  4. 跨平台和浏览器兼容性:支持跨平台播放,适用于各种设备和操作系统
  5. 进度条拖动时,视频暂停,且能预览当前拖动所处位置,在放开拖动时,才开始播放视频,体验比较好

缺点

  1. 英文文档:上手学习播放器难度大,且后期维护成本高(搭建 demo 时,发现英文文档对开发有影响)
  2. 学习曲线:提供广泛功能,可能需要一定时间来理解其概念、API 等
  3. 不支持 flv 格式,但是可以通过安装 videojs-flvjs-es6 插件,同时安装 flv.js 库,来提供 flv 格式支持(但是 videojs-flvjs-es6 库的 star 太少,可能会出现其他问题)
  4. 没有自带截图功能,需要自己开发

3. ckplayer x3(候选)

文档地址: www.ckplayer.com/
示例地址: www.ckplayer.com/demo.html
Git 地址: gitee.com/niandeng/ck…

优点

  1. 功能丰富,且提供良好的示例
  2. 中文文档,文档相对比较丰富和专业
  3. 格式支持度较高,通过插件还可以播放 ts、mpd 等视频

缺点

  1. 社区支持不够丰富,如果以后有扩展功能需求,不便开发
  2. git 仓库 issue 响应慢,后续出问题,可能不便解决
  3. 文档的左侧菜单的交互不太友好,功能模块分级不够清晰,导致查找 API 不方便
  4. 没有直接提供视频列表(通道切换)的功能或插件
  5. 进度条拖动:拖动时,视频一直在播放,且没有显示当前所处拖动位置的预览画面,用户不知道当前拖动所处的具体位置,体验不佳

4. aliplayer(候选)

文档地址: player.alicdn.com/aliplayer/i…
示例地址: player.alicdn.com/aliplayer/p…
Git 地址: github.com/aliyunvideo…

优点

  1. 基本满足现有功能需求,自带截图、视频列表等功能
  2. 提供部分功能演示和在线配置
  3. 中文文档
  4. 支持4K视频播放,并且具备高分辨率和高比特率视频的优化能力
  5. 刷新和切换页面的 loading 时间比 xgplayer 短
  6. 播放器内部集成 flv 和 hls 格式,可以直接播放

缺点

  1. Web播放器H5模式在移动端不支持播放FLV视频,但可播 HLS(m3u8)
  2. Web播放器提供的音量调节方法iOS系统和部分Android系统会失效
  3. 自动播放限制:由于浏览器自身的限制,在Web播放器SDK中无法通过设置autoplay属性或者调用play()方法实现自动播放。只有视频静音才可以实现自动播放或者通过用户行为手动触发播放
  4. 截图功能限制:fiv 视频在Safari浏览器下不支持截图功能。即使启用截图按钮也不会出现
  5. 回放时,必须点击播放按钮那个图标才能播放,体验不佳。且鼠标悬停时,会显示视频控制栏,但点击控制栏,视频无对应功能响应,体验不佳
  6. 回放播放效果不统一:同样的设置,刷新页面时视频不会自动播放,切换页面再回来,视频会自动播放
  7. 有些高级功能需要商业授权:Web播放器SDK从2.14.0版本开始支持播放H.265编码协议的视频流,如需使用此功能,您需要先填写表单申请License授权
  8. 文档:文档目录混乱且杂糅其他播放器不需要的文档
  9. 进度条拖动:拖动时,视频会一直播放当前拖动视频帧的声音,导致听起来声音一卡一卡的,而且拖动一停止就立马开始播放视频

5. tcplayer(不推荐)

文档地址: cloud.tencent.com/document/pr…
示例地址: tcplayer.vcube.tencent.com/
Git 地址: 闭源,无 git 仓库

优点

  1. 断点续播:播放失败时自动重试,支持直播的自动重连功能

缺点

  1. 文档不丰富,示例功能不多
  2. 闭源项目,出现问题不好解决
  3. 内置的功能和插件相对阿里云和 CK 较少
  4. web 端截图功能不支持

6. flv.js(不推荐)

文档地址: github.com/bilibili/fl…
示例地址: bilibili.github.io/flv.js/demo…
Git 地址: github.com/bilibili/fl…

优点

  1. 由于浏览器对原生Video标签采用了硬件加速,性能很好,支持高清

缺点

  1. 文档:缺乏详细功能说明文档,只有 md 英文文档,文档阅读不方便
  2. 项目很久未更新,原作已离开哔站,虽已开源,但后期应该不会有啥版本升级和优化
  3. 播放 flv 格式需要依赖 Media Source Extensions,但目前所有 iOS 和 Android4.4.4 以下的浏览器都不支持

结语

以上是我对音视频第三方库进行技术选型对比的一个总结。如果有更好的见解或者其他补充,欢迎在评论区留言或者私聊我进行沟通。

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
javascript2026-02-24
navigator.sendBeacon全指南
在前端开发中,埋点系统是必不可少的一环。我们经常需要在用户 关闭页面 、 刷新 或 跳转路由 时,向服务器发送最后一条统计数据(比如用户停留时长、页面跳出率)。 但这看似简单的需求,在实现时却危机四伏:请求发不出去?页面跳转卡顿?今天我们就来聊聊这个问题的终极解决方案 —— 。 一、 痛点与传统方案的挣扎 场景还原 当用户点击关闭按钮时,浏览器会触发生命周期事件( 或 )。如果我们直接使用普通的异步 AJAX ( 或 ) 发送请求,浏览...
学习
javascript2025-11-02
理解浏览器事件系统,从用户点击到事件对象的完整旅程
深入理解浏览器事件系统:从用户点击到事件对象的完整旅程 “当我点击页面按钮时,背后发生了什么?为什么回调函数能收到一个包含丰富信息的event对象?今天,让我们一起揭开浏览器事件系统的神秘面纱。” 一个令人困惑的现象 作为前端开发者,我们每天都在写这样的代码: 这段代码如此熟悉,以至于我们很少停下来思考:​ ​这个 对象到底从哪里来?它为什么能知道点击的精确坐标?为什么能识别是哪个元素被点击了?​ ​ 更神奇的是,当我们手动创建事件时:...
学习
javascript2025-10-01
实现大文件上传全流程详解
在日常开发中,大文件上传是个绕不开的坎——动辄几百 MB 甚至 GB 级的文件,直接上传不仅容易超时,还会让用户体验大打折扣。最近我用 Vue+Express 实现了一套完整的大文件上传方案,支持分片上传、断点续传、秒传和手动中。 一、先看效果:我们要实现什么? 先上核心功能清单,确保大家明确目标,知道我们要解决哪些实际问题: 大文件分片上传 :将文件切成固定大小的小片段分批上传,避免单次请求超时 秒传 :服务器已存在完整文件时,直接返...
学习
javascript2025-09-18
JavaScript 的多线程能力:Worker
如果你写过一些计算量稍大的 JavaScript 代码,比如图像处理、大量数据排序或者复杂的算法,你几乎肯定遇到过浏览器“卡死”的现象。点击页面没反应,动画也停了,就像整个世界都静止了。 这就是主线程被阻塞的典型后果。因为主线程既要负责执行 JavaScript,又要负责渲染页面、响应用户操作,一旦它被繁重的计算任务占满,就无暇顾及其他,用户体验便直线下降。 这个问题的根源,正是“主线程是单线程的”。那么,如何解决呢? 答案很简单:把这...
学习面试
javascript2025-09-15
一张 8K 海报差点把首屏拖垮
你给后台管理系统加了一个「企业风采」模块,运营同学一口气上传了 200 张 8K 宣传海报。首屏直接飙到 8.3 s,LCP 红得发紫。 老板一句「能不能像朋友圈那样滑到哪看到哪?」——于是你把懒加载重新翻出来折腾了一轮。 解决方案:三条技术路线,你全踩了一遍 1\. 最偷懒:原生 一行代码就能跑,浏览器帮你搞定。 🔍 关键决策点 2020 年后现代浏览器全覆盖,IE 全军覆没。 必须写死 ,否则 CLS 会抖成 PPT。 适用场景...
学习
javascript2025-09-10
🚀 Web Worker让你的应用丝滑
🌟 引言 在日常的前端开发中,你是否遇到过这样的困扰: 大数据处理时页面卡死 :处理几万条数据时,页面直接卡成PPT,用户点击毫无反应 复杂计算阻塞UI :图片处理、数据分析等计算密集型任务让整个应用假死 文件上传/下载卡顿 :大文件操作时,其他功能完全无法使用 实时数据处理性能差 :WebSocket接收大量数据时,页面渲染严重滞后 今天分享6个Web Worker的核心技巧,让你的应用告别卡顿,用户体验丝滑如德芙! 💡 核心技巧...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录