详解vue2.0+vue-video-player实现hls播放全过程
详解vue2.0与vue-video-player实现HLS播放全过程——长沙网络推广经验分享
随着公司业务的拓展,视频点播服务的需求日益凸显。考虑到成本因素,我们决定采用开源系统来完成这项服务。尽管云视频平台提供了完整的解决方案,但在自主搭建系统的也能锻炼我们的技术实力。
在前端开发中,视频播放器是不可或缺的一部分。由于公司前端架构基于Vue全家桶,我决定寻找一款基于Vue封装的视频播放器。在社区中,我找到了vue-video-player,并进行了本地测试。
在测试过程中,我遇到了一个问题。当播放器尝试播放基于HLS协议的m3u8文件时(这些文件已在流媒体服务上成功部署),在iOS设备上能够正常播放,但在PC的Chrome浏览器上却无法播放。经过研究,我发现需要引入hls.js,并对video对象进行处理,以实现HLS的播放。尽管Dplay(vue-dplayer的封装基础)也支持HLS,但由于时间紧迫,我决定转向vue-video-player。
选择vue-video-player的原因如下:
1. 我之前使用的流媒体服务管理页面内的播放器是基于videoJs的,而vue-video-player是videoJs的封装版本,使用体验良好。
2. 在百度搜索“vue video”时,vue-video-player总是出现在搜索结果顶部,证明了其在Vue视频播放器领域的受欢迎程度。
3. vue-video-player支持的协议非常齐全,包括HLS等。
4. 尽管vue-video-player的GitHub上还存在一些未关闭的问题,但我相信凭借着VideoJs强大的库和广大的使用者群体,我们一定能够解决遇到的问题。
安装vue-video-player插件
====================
为了给我们的Vue项目添加视频播放功能,我们首先需要通过npm安装vue-video-player插件。安装命令如下:
```bash
npm install vue-video-player --save
```
接下来,我们需要引入相关的样式文件,以确保视频播放器的样式能够正确显示。由于我考虑到其他业务组件可能也会用到视频播放功能,因此将样式文件引入到main.js文件中。样式文件包括video.js的样式和vue-video-player的自定义主题样式:
```javascript
// 引入video.js的样式文件
require('video.js/dist/video-js.css')
// 引入vue-video-player的自定义主题样式
require('vue-video-player/src/custom-theme.css')
```
然后,在main.js文件中导入VueVideoPlayer组件并将其挂载到Vue上,以便在业务组件中使用:
```javascript
// 在main.js文件中导入VueVideoPlayer组件
import VideoPlayer from 'vue-video-player'
// 使用VueVideoPlayer组件
Vue.use(VideoPlayer);
```
接下来,我们编写一个名为myPlayer.vue的业务组件,用于展示视频播放功能。以下是组件的模板和脚本部分:
模板部分:
```html
```
脚本部分:
```javascript
import { videoPlayer } from 'vue-video-player';
export default {
data() {
return {
playerOptions: {
// 可选播放速度,注释掉此行即使用默认播放速度
// playbackRates: [0.7, 1.0, 1.5, 2.0],
autoplay: false, // 如果为true,浏览器准备好后开始回放
muted: false, // 默认不消除音频
loop: false, // 视频结束后不自动重新开始播放
在Vue框架中,我们有一个名为`myPlayer.vue`的组件,它涉及视频播放器的配置和定制。让我们逐步解读其中的细节。
我们设定了一个控制条的配置对象,其中包含了时间显示、全屏切换等功能的开关。这些设置确保了视频播放器的功能齐全且易于操作。
接着,在组件的`methods`部分,我们定义了播放器播放和暂停时触发的操作。当播放时,会弹出提示“play”;暂停时,则提示“pause”。这些提示有助于了解当前播放器的状态。
而在`computed`属性中,我们通过`player()`方法获取了视频播放器实例的引用。这使得我们可以在组件内部轻松访问和操作播放器。
关于样式设置,我们注意到需要为video-player标签设置特定的class,以便应用定制的样式。我们也强调了修改属性和资源路径的重要性,以确保播放器能够正确加载和显示视频内容。
为了增加HLS支持,我们需要安装并引入`videojs-contrib-hls`插件。这一步使得我们的视频播放器能够处理HLS格式的视频流。
我们还讨论了关于播放按钮样式的问题。由于默认的播放按钮样式为椭圆形,可能不符合某些设计需求。我们可以通过添加CSS样式来修改播放按钮的形状,例如将其修改为圆形。
在移动端开发中,我们遇到了一个与fastclick插件的冲突问题。为了解决这个问题,我们需要对触发元素进行特殊处理。具体来说,就是在触发元素上添加“needsclick”类名。简单的添加类名可能无法解决问题,因此可能需要深入研究fastclick的源码和工作原理,以找到最佳的解决方案。
这个组件为我们提供了一个基本的视频播放器框架,并允许我们进行定制和扩展。在开发过程中,我们需要注意资源路径、样式设置以及插件的引入和使用,以确保播放器的正常运作和良好体验。面对问题和挑战时,我们需要深入研究并寻找最佳的解决方案。深入解读与改良FastClick源码
在网页交互优化的过程中,我选择了深入研究FastClick库。FastClick旨在解决移动浏览器上的延迟点击问题,通过对触摸事件的处理,减少用户点击元素产生的延迟,提升用户体验。
我决定尝试修改FastClick的源码,以更好地理解其工作原理并验证我的猜想。我将整个fastclick.js文件拷贝出来,并采用require的方式引入到我的项目中。
打开代码后,我开始为何needsclick没有按预期工作。通过搜索关键词,我定位到了FastClick.prototype.needsClick方法中的一处验证:
return (/\bneedsclick\b/).test(target.className);
这个方法主要是判断元素是否需要保留穿透功能。我的初步猜想是,我触发的元素可能没有加上needsclick这个class。为此,我检查了target.className,发现确实没有该class。
在观察过程中,我发现需要控制的按钮都是以vjs开头的。我在原有的验证基础上增加了一个验证条件:
return ((/\bneedsclick\b/).test(target.className) || (/\bvjs/).test(target.className));
这样,即使是那些以vjs开头的按钮,也能正常触发点击事件,问题得以解决。虽然这种方式相对“暴力”,但足以解决当前的问题。
在此,我想分享一些我项目中使用的相关版本信息,包括fastclick、videojs-contrib-hls、vue、vue-router和vue-video-player等。希望这些信息能对大家的学习有所帮助。我也欢迎大家在此基础上继续补充和完善。
我想说的是,修改开源项目的源码是一种很好的学习方式,可以帮助我们深入理解项目的内部机制。也希望大家能够多多支持类似FastClick这样的优秀开源项目,共同为开源社区做出贡献。这就是本文的全部内容,希望对大家有所帮助。也请大家多多关注和支持狼蚁SEO。
在此声明,本文的内容仅作为学习和交流之用,如有任何商业用途或其他用途的需求,请另行沟通。祝大家学习进步,项目开发顺利!
长沙网站设计
- 详解vue2.0+vue-video-player实现hls播放全过程
- asp.net获取URL和IP地址的方法汇总
- jQuery插件zTree实现获取当前选中节点在同级节点中
- 几行代码轻松实现PHP文件打包下载zip
- 值得收藏的asp.net基础学习笔记
- XML和YAML的使用方法
- 【JS+CSS3】实现带预览图幻灯片效果的示例代码
- 搭建简单的nodejs http服务器详解
- JavaScript面试开发常用的知识点总结
- thinkPHP5.1框架使用SemanticUI实现分页功能示例
- mysql中blob数据处理方式
- PHP预定义接口——Iterator用法示例
- 详解nodejs爬虫程序解决gbk等中文编码问题
- 详解Vue2.0组件的继承与扩展
- PHP结合jQuery实现红蓝投票功能特效
- PHP自动加载机制实例详解