视频播放插件 Video.js

本文详细介绍如何使用Video.js库实现网页视频播放,包括基本配置、自动播放设置、样式调整及动态加载等内容,并提供常见问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Video.js 是一个通用的在网页上嵌入视频播放器的 JS 库,Video.js 自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器。(要支持ie低版本请下载5.4.3版 )点击进入官网

下载

各个版本下载

使用

引入文件
<link href="video-js.css" rel="stylesheet" type="text/css">
<script src="video.js"></script>

:一般我使用时会把下载的包整个拷贝到项目的plugin目录下,一方面可以方便以后查看Demo的使用方法,另一方面也避免内部文件之间引用的路径问题。

设置flash路径,Video.js会在不支持html5的浏览中使用flash播放视频文件。

<script>
    videojs.options.flash.swf = "video-js.swf";
</script>
HTML
<video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="264"
      poster="http://video-js.zencoder.com/oceans-clip.png"
      data-setup="{}">
    <source src="http://视频地址格式1.mp4" type='video/mp4' />
    <source src="http://视频地址格式2.webm" type='video/webm' />
    <source src="http://视频地址格式3.ogv" type='video/ogg' />
    <track kind="captions" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
    <track kind="subtitles" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
</video>

设置自动播放将下面代码加到html中代码后面

<script type="text/javascript">
    var myPlayer = videojs('example_video_1'); // video 标签中的ID
    myPlayer.ready(function(){
        myPlayer.play();    // 调用播放函数
    });
</script>

默认情况下,大的播放按钮是被定为在左上角的,这样就不会覆盖视频内容。如果你想让这个播放按钮居中,你可以给你的 video 标签添加额外的 vjs-big-play-centered样式,比如:

<video id="example_video_1" class="video-js vjs-default-skin vjs-big-play-centered"
  controls preload="auto" width="640" height="264"
  poster="http://video-js.zencoder.com/oceans-clip.png"
  data-setup='{"example_option":true}'>
  ...
</video>

如果你还对播放按钮样式不满意可重新定义video-js .vjs-big-play-button{/*这里的样式重写*/}

为动态加载的 HTML 元素设置 Video.js

如果你的 web 页面或者应用是动态加载 video 标签的(ajax,appendChild,等等),这样在页面加载后这个元素是不存在的,那么你会想要手动设置播放器而不是依靠 data-setup 属性,做法如下:

  1. 将 data-setup 属性从 video 标签中移除掉,避免播放器混乱。
  2. 运行下面的 javascript
videojs("example_video_1", {}, function(){
  // Player (this) is initialized and ready.
});
  • videojs 方法中的第一个参数是你的 video 标签的 ID,用你自己的代替。
  • 第二个参数是一个选项对象。它允许你像设置 data-setup 属性一样设置额外的选项。
  • 第三个参数是一个 'ready' 回调。一旦 Video.js 初始化完成后,就会触发这个回调。
注意

在动态加载HTML进行初始化player对象的时候,很容易出现播放界面混乱的情况,我做的时候就出现了比如播放条错位,缺少播放时间和全局时间的显示,有白点等问题。遇到这种情况先检查加载顺序,如果不是的话也不要慌,在浏览器里找到混乱的元素,自己进行调试,把修改的 css 样式放到 HTML 的 <style>块中,不要修改插件的 CSS 文件,因为是在 js 加载的时候更改的样式,要在自己的页面里修改,如果这时候修改还是没有起作用,css 属性后面用!important来强制提高样式加载的优先级。

比如,如果页面有多余元素(例如白点),浏览器调试找到,css 设置display:none;当页面元素错位(例如进度条、声音图标错位),用margin来调节合适位置;当页面元素缺失,比如缺少播放时间、剩余时间等,在浏览器 F12 调试找到对应元素,设置display:block

我做的项目中的使用效果

常用方法
  • 播放:myPlayer.play();
  • 暂停:myPlayer.pause();
  • 获取播放进度:var whereYouAt = myPlayer.currentTime();
  • 设置播放进度:myPlayer.currentTime(120);
  • 视频持续时间,加载完成视频才可以知道视频时长,且在flash情况下无效: var howLongIsThis = myPlayer.duration();
  • 缓冲,就是返回下载了多少: `var whatHasBeenBuffered = myPlayer.buffered();
  • 百分比的缓冲: var howMuchIsDownloaded = myPlayer.bufferedPercent();
  • 声音大小(0-1之间): var howLoudIsIt = myPlayer.volume();
  • 设置声音大小: myPlayer.volume(0.5);
  • 取得视频的宽度: var howWideIsIt = myPlayer.width();
  • 设置宽度:myPlayer.width(640);
  • 获取高度: var howTallIsIt = myPlayer.height();
  • 设置高度:: myPlayer.height(480);
  • 一步到位的设置大小:myPlayer.size(640,480);
  • 全屏: myPlayer.enterFullScreen();
  • 离开全屏 : myPlayer.enterFullScreen();
添加事件
durationchange
ended //播放结束
firstplay
fullscreenchange
loadedalldata
loadeddata
loadedmetadata
loadstart
pause //暂停
play  //播放
progress
seeked
seeking
timeupdate
volumechange
waiting
resize inherited
  var myFunc = function(){
    // Do something when the event is fired
};
事件绑定
myPlayer.on("ended", function(){
    console.log("end", this.currentTime());
});
myPlayer.on("pause", function(){
    console.log("pause")
});
删除事件
myPlayer.removeEvent(“eventName”, myFunc);
页面中有多个视频

一个页面中有多个视频,需要点击后触发bootstrap 的模态窗,再弹出视频

HTML
<a videohref="http://xxx.mp4" class="video_link">![](../images/xxx.jpg)</a>
js
$(".video_link").click(function() {
    var myPlayer = videojs('my-video');
    var videoUrl = $(this).attr("videohref");
    videojs("my-video", {}, function() {
        window.myPlayer = this;
        $("#mymoda .video-con #my-video source").attr("src", videoUrl);
        myPlayer.src(videoUrl);
        myPlayer.load(videoUrl);
        myPlayer.play();
    });
    $(".click-modal").click();
});
// 模态窗消失时,关闭视频    
$('#mymoda').on('hidden.bs.modal', function() {
    myPlayer.pause();
});

场景使用补充

场景1:实时监控

在当需要实时监听视频进度的时候,比如我遇到的场景是课程视频有试听课,只能试听这个视频的前多少分钟。这个时候,不管是普通播放还是拖动进度条都需要实时监听播放的时间进度,判断是否大于试听时间,进行对应操作。

代码片段如下:

// 判断试听时间
if(b){
    window.loopMarquee = setInterval(function(){
        if(player.currentTime() >= listenTime){
            player.pause();
            $(".gobuy").fadeIn(200);
        }
    },500) // 设置每500秒查询一次
}
场景2: 记录观看历史,下次从上次位置打开

思路:在离开页面时触发得到当前播放时间,存到数据库,下一次加载时从数据库取,如果有history_time则用player.currentTime(historyTime),没有的话,正常从头播放。

$( window ).unload(function() {
    getVideoTime(); 
});


作者:丹青笔
链接:https://www.jianshu.com/p/9414886a8963
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
### Vue2 中使用 Video.js 的集成方法 #### 安装依赖包 为了在项目中使用 `video.js`,需要通过 npm 来安装该库以及其 CSS 文件。如果计划支持 RTMP 流媒体,则还需要额外安装 `videojs-flash` 插件。 ```bash npm install video.js -S npm install videojs-flash -S ``` 对于 Flash 支持不是必需的情况下可以省略第二个命令[^1]。 #### 引入必要的资源文件 确保在项目的入口文件(通常是 `main.js` 或类似的全局脚本位置),正确加载 `video.js` 提供的样式表: ```javascript import 'video.js/dist/video-js.css'; ``` 此操作保证了整个应用范围内都能访问到所需的样式定义[^3]。 #### 组件内部结构设计 下面是一个简单的 Vue 单文件组件模板例子,展示了如何构建一个基于 `video.js` 的播放器实例: ```html <template> <div data-vjs-player> <!-- 使用 ref 属性方便后续获取 DOM 节点 --> <video ref="myPlayer" class="video-js vjs-default-skin"> 对不起,您的浏览器似乎不兼容 HTML5 视频。 </video> </div> </template> <script> // 导入核心模块和其他可能需要用到的功能扩展 import videojs from 'video.js'; export default { name: 'VideoPlayer', props: ['sourceUrl'], mounted() { // 初始化播放器并传入选项对象 this.player = videojs(this.$refs.myPlayer, {}, function onPlayerReady() { console.log('Your player is ready!'); // 设置视频源地址 this.src({ type: "video/mp4", src: this.sourceUrl }); // 可选:监听事件如结束回调等 this.on('ended', () => { console.log('Awww... Over so soon?!'); }); }); }, beforeDestroy() { if (this.player) { this.player.dispose(); } } } </script> ``` 上述代码片段创建了一个名为 `VideoPlayer` 的自定义组件,它接收一个 prop 参数 `sourceUrl` 表示待播放的内容链接,并在其挂载周期内完成了播放器实例化的工作。同时,在销毁前清理掉了不再使用的播放器实例以防止内存泄漏等问题的发生[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值