video.js 自定义使用

video全屏操作栏自定义样式&&js 指定元素全屏&&视频截图下载 最近遇到的需求就是重新video标签的控制栏的样式,包括进度条、音量、倍速、全屏等样式,在正常状态下,可以将原生样式隐藏掉自定义新的控制栏元素定位上去,但是全屏后样式失效,出现的还是原生的控制栏。只能曲线救国,说白了就是让video的父级全屏,进而让video也屏,控制栏的自定义组件样式定位上就可以了。具体是f12 可以看出,自定义的组件其实还在原先的位置,全屏后的video新增的伪类和样式无法修改,未全屏状态下自定义控制栏的组件样式。全屏后,发现控制栏已经变成原生的样式。 阅读详情

video.js

  • 直接使用
  • 自定义控制条和样式
  • 弹幕相关
  • plugin写法

video.js 是开源插件,据说甚至可以集合到gitbook上

note:
一个需要注意的点是下载下来的demo.html直接右键浏览器是打不开的,需要用iis或者nginx 或者beego这些服务端的玩意加载后,在前端浏览器才能看到视频页面。

参考文章:

直接使用

注意点:加载flash动画后,chrome ie firefox播放界面才能统一,否则各有各的界面

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<link href="video-js/video-js.css" rel="stylesheet" type="text/css"/>
<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
<script src="video-js/video.js" type="text/javascript" charset="utf-8"></script>
<script src="video-js/ie8/videojs-ie8.js"></script>
<!-- 加载hls视频插件 -->
<script src="video-js/videojs-contrib-hls.js"></script>
<!-- 加载flash播放器 -->
<script type="text/javascript">
videojs.options.flash.swf = "static/video-js/video-js.swf";
</script>
</head>
<body>

<div id="videocontainer">
<video id="example_video" class="video-js vjs-default-skin vjs-big-play-centered"
preload="auto" controls
width="800" height="600" align="middle" poster=""
data-setup="{ &quot;html5&quot; : { &quot;nativeTextTracks&quot; : false } }">
<source src="你的名字.mp4" type="video/mp4"/>
<!-- 加载hls视频-->
<source src="http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8"
type="application/x-mpegURL">
<!-- 加载rtmp视频-->
<source src="rtmp://live.hkstv.hk.lxdns.com/live/hks" type="rtmp/flv"/>
</video>

</div>
</div>
</body>

</html>

自定义控制条

组件结构

Player
PosterImage
TextTrackDisplay
LoadingSpinner
BigPlayButton
ControlBar
PlayToggle
FullscreenToggle
CurrentTimeDisplay
TimeDivider
DurationDisplay
RemainingTimeDisplay
ProgressControl
SeekBar
LoadProgressBar
PlayProgressBar
SeekHandle
VolumeControl
VolumeBar
VolumeLevel
VolumeHandle
MuteToggle

使用:以添加按钮为例子

var player = videojs("example_video", {
"controls": true,
"autoplay": false,
"preload": "auto",
"loop": false,
controlBar: {
captionsButton: false,
chaptersButton: false,
playbackRateMenuButton: true,
LiveDisplay: true,
subtitlesButton: false,
remainingTimeDisplay: true,

progressControl: true,

volumeMenuButton: {
inline: false,
vertical: true
},//竖着的音量条
fullscreenToggle: true
}

}, function () {
/*次处用于自定义控制条等*/
/*
做法1:直接append添加
*/
$(".vjs-control-bar").append('<button class="vjs-control " id="danmu_send_opt"><u>按钮1</u></button>');
/*
做法2:dom添加
*/
var controlBar,
newElement = document.createElement('div'),
newLink = document.createElement('a'),
newImage = document.createElement('img');
// Assign id and classes to div for icon
newElement.id = 'downloadButton';
newElement.className = 'downloadStyle vjs-control';
// Assign properties to elements and assign to parents
newImage.setAttribute('src','http://solutions.brightcove.com/bcls/brightcove-player/download-video/file-download.png');
newLink.setAttribute('href','http://www.baidu.com');
newLink.appendChild(newImage);
newElement.appendChild(newLink);
// Get control bar and insert before elements
// Remember that getElementsByClassName() returns an array
controlBar = document.getElementsByClassName('vjs-control-bar')[0];
// Change the class name here to move the icon in the controlBar
insertBeforeNode = document.getElementsByClassName('vjs-fullscreen-control')[0];
// Insert the icon div in proper location
controlBar.insertBefore(newElement,insertBeforeNode);
//controlBar.appendChild(newElement);

/*
做法3:简化2的写法
*/
var newbtn = document.createElement('btn');
newbtn.innerHTML = '<button class="vjs-control" id="downloadButton"></button>';
var controlBar = document.getElementsByClassName('vjs-control-bar')[0];
insertBeforeNode = document.getElementsByClassName('vjs-fullscreen-control')[0];
controlBar.insertBefore(newbtn,insertBeforeNode);
});

自定义控制条完整例子:
添加滑条音频控制和弹幕样式开关

自定义样式:

video.js 采用flex布局,所以float这种不起作用

如果想要使用float,需要修改默认的video.js.css

并且后面的按钮都要进行样式调整

.vjs-has-started .vjs-control-bar {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
/*原为flex*/
display: block;
visibility: visible;
opacity: 1;
-webkit-transition: visibility 0.1s, opacity 0.1s;
-moz-transition: visibility 0.1s, opacity 0.1s;
-o-transition: visibility 0.1s, opacity 0.1s;
transition: visibility 0.1s, opacity 0.1s;
}

……省略无关部分
.video-js .vjs-play-control {
/*增加float*/
float:left;
cursor: pointer;
-webkit-box-flex: none;
-moz-box-flex: none;
-webkit-flex: none;
-ms-flex: none;
flex: none;
}

.video-js .vjs-fullscreen-control {
cursor: pointer;
-webkit-box-flex: none;
-moz-box-flex: none;
-webkit-flex: none;
-ms-flex: none;
flex: none;
/*增加float*/
float: right;
}

弹幕

使用开源jquery.danmu.js

jquery弹幕插件使用

jquery弹幕插件 github

video.js集成例子

<!doctype html>

<html lang="en">
<head>
<meta charset="UTF-8">
<link href="video-js/video-js.css" rel="stylesheet" type="text/css">
<script src="video-js/video.js" type="text/javascript" charset="utf-8"></script>
<script src="video-js/ie8/videojs-ie8.js"></script>
<script src="video-js/videojs-contrib-hls.js"></script>
<script src="danmu/jquery-1.11.1.min.js"></script>
<script src="../../../../../桌面/tanmu/DanmuPlayer/src/js/jquery.danmu.js"></script>
<script type="text/javascript">
videojs.options.flash.swf = "video-js/video-js.swf";
</script>
<title>RtmpPlayerTest</title>
</head>
<body>
<video id="example_video" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto" width="1024" height="768"
poster=""
data-setup='{ "html5" : { "nativeTextTracks" : false } }'>>
<source src="rtmp://live.hkstv.hk.lxdns.com/live/hks" type="rtmp/flv" />
<!-- <source src="http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8" type="application/x-mpegURL" /> -->
<div id="danmu">
</div>
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser
that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
</p>

</video>
<div id="danmu" >
</div>
<div class="text-center ctr">
<br>

<button type="button" onclick="resumer() ">弹幕开始/继续</button>
&nbsp;&nbsp;&nbsp;&nbsp;
<button type="button" onclick="pauser()">弹幕暂停</button>
&nbsp;&nbsp;&nbsp;&nbsp;
显示弹幕:<input type='checkbox' checked='checked' id='ishide' value='is' onchange='changehide()'> &nbsp;&nbsp;&nbsp;&nbsp;
弹幕透明度:
<input type="range" name="op" id="op" onchange="op()" value="100"> <br>
当前弹幕运行时间(分秒):<span id="time"></span>&nbsp;&nbsp;
设置当前弹幕时间(分秒): <input type="text" id="set_time" max=20/>
<button type="button" onclick="settime()">设置</button>

<br>

发弹幕:
<select name="color" id="color">
<option value="white">白色</option>
<option value="red">红色</option>
<option value="green">绿色</option>
<option value="blue">蓝色</option>
<option value="yellow">黄色</option>
</select>
<select name="size" id="text_size">
<option value="1">大文字</option>
<option value="0">小文字</option>
</select>
<select name="position" id="position">
<option value="0">滚动</option>
<option value="1">顶端</option>
<option value="2">底端</option>
</select>
<input type="textarea" id="text" max=300/>
<button type="button" onclick="send()">发送</button>
</div>

</body>
<script type="text/javascript">
var player = videojs('example_video');
</script>


<script>
(function () {
$("#danmu").danmu({
// left:$("#danmuarea").offset().left,
// top:$("#danmuarea").offset().top,
// height: 445,
// width: 800,
left: 0,
top: 0,
height: "100%",
width: "100%",
zindex: 100,
speed: 30000,
opacity: 1,
font_size_small: 16,
font_size_big: 24,
top_botton_danmu_time: 6000
}
);
})(jQuery);


query();
timedCount();


var first = true;

function timedCount() {
$("#time").text($('#danmu').data("nowtime"));

t = setTimeout("timedCount()", 50)

}


function starter() {

$('#danmu').danmu('danmu_start');

}
function pauser() {

$('#danmu').danmu('danmu_pause');
}
function resumer() {

$('#danmu').danmu('danmu_resume');
}
function stoper() {
$('#danmu').danmu('danmu_stop');
}

function getime() {
alert($('#danmu').data("nowtime"));
}

function getpaused() {
alert($('#danmu').data("paused"));
}

function add() {
var newd =
{"text": "new2", "color": "green", "size": "1", "position": "0", "time": 60};

$('#danmu').danmu("add_danmu", newd);
}
function insert() {
var newd = {"text": "new2", "color": "green", "size": "1", "position": "0", "time": 50};
str_newd = JSON.stringify(newd);
$.post("stone.php", {danmu: str_newd}, function (data, status) {
alert(data)
});
}
function query() {
$.get("query.php", function (data, status) {
var danmu_from_sql = eval(data);
for (var i = 0; i < danmu_from_sql.length; i++) {
var danmu_ls = eval('(' + danmu_from_sql[i] + ')');
$('#danmu').danmu("add_danmu", danmu_ls);
}
});
}

function send() {
var text = document.getElementById('text').value;
var color = document.getElementById('color').value;
var position = document.getElementById('position').value;
var time = $('#danmu').data("nowtime") + 5;
var size = document.getElementById('text_size').value;
var text_obj = '{ "text":"' + text + '","color":"' + color + '","size":"' + size + '","position":"' + position + '","time":' + time + '}';
$.post("stone.php", {danmu: text_obj});
var text_obj = '{ "text":"' + text + '","color":"' + color + '","size":"' + size + '","position":"' + position + '","time":' + time + ',"isnew":""}';
var new_obj = eval('(' + text_obj + ')');
$('#danmu').danmu("add_danmu", new_obj);
document.getElementById('text').value = '';
}

function op() {
var op = document.getElementById('op').value;
$('#danmu').data("opacity", op);
}


function changehide() {
var op = document.getElementById('op').value;
op = op / 100;
if (document.getElementById("ishide").checked) {
jQuery('#danmu').data("opacity", op);
jQuery(".flying").css({
"opacity": op
});
} else {
jQuery('#danmu').data("opacity", 0);
jQuery(".flying").css({
"opacity": 0
});
}
}


function settime() {
var t = document.getElementById("set_time").value;
t = parseInt(t)
console.log(t)
$('#danmu').data("nowtime", t);
}
</script>
</html>

plugin

plugin sample

为videojs添加自定义组件 目录获取videojs源码源码的编译添加TitleBar组件js代码编写在player里注册自定义组件添加css样式应用自己的组件重新编译在html中调用组件实际效果结语 videojs虽然已经为我们提供了较为完善的功能.但是在实际应用中,我们仍然可能需要为这个播放器添加部分功能.下面将以添加标题栏为示例简要介绍如何给videojs添加功能或组件. 获取videojs源码 访问videojs在github上的项目即可下载到videojs的源代码 项目网址:https://github.com/videojs 阅读详情

相关推荐

JS自定义多媒体Video控制条(控制视频播放、进度、全屏案例)

案例参考 先来看一下一些视屏控件 需求 点击按钮实现视频的播放和暂停 按钮切换全屏和退出全屏功能 进度条和时间 前期准备 HTML DOM Video 对象文档 图标字体库下载和文档 案例目录 HTML代码 我们自定义实现控制条,所以video不要使用controls属性 从其他网站视频播放,一般都是要自己实现控制条来达到我们想要的效果,使用video提供的控制条相关属性就很难修改,也...

weixin_41105030的博客 3万+

video.js自定义预览组件-旋转、下载、画中画、放大缩小功能

提醒自己:这是有段时间之前的代码逻辑了,或许明天的你就有不一样的想法呢!后面如果接触到新需求有优化会持续更新哒。

weixin_42418774的博客 2856

使用Vue.js和Video.js创建自定义视频播放器

Vue.js是一个流行的JavaScript框架,而Video.js是一个强大且可定制的HTML5视频播放器。本文将指导您如何在Vue.js中使用Video.js,并提供相应的源代码示例。在本文中,我们学习了如何在Vue.js中使用Video.js创建自定义视频播放器。在您的HTML文件中引入Vue.js的CDN链接,或者使用import语句在您的JavaScript文件中引入Vue.js。这样,我们就完成了在Vue.js中使用Video.js创建自定义视频播放器的过程。在您的Vue组件中,您可以使用。

ByteZenith的博客 417

移动端H5 - videojs自己设置constro样式,css全屏旋转,不唤起移动端自带的播放器

【代码】移动端H5 - videojs自己设置constro样式,css全屏旋转,不唤起移动端自带的播放器。

Crazy_ds的博客 1653

NCCL使用指南-进阶篇

前文介绍了NCCL的常用环境变量,本文介绍了NCCL-test性能基准测试,以及一些大规模集群测试的经验数据。

father_yingying的博客 1406

手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南

本文提供了手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南。针对国内用户网络不稳定导致自动下载失败的问题,文章核心介绍了如何从错误信息中获取下载链接,使用浏览器或下载工具完成手动下载,并通过指定本地文件路径和参数在R中成功安装。该方法同样适用于SeuratData包中的其他数据集,是单细胞分析入门的必备生存技能。

weixin_29054399的博客 183

video-js 库使用 自定义组件

video-js 库使用 自定义组件 video-js 库 原始版的库:github/videojs vue 封装过的组件:npm/vue-video-player 这是一个非常棒的播放器,还兼容 hls 的直播流(m3u8)格式的等,还支持自定义组件,基本上满足播放器的很多功能了。 如果想了解直播的可以看下以前的文章 vue 项目进行直播视频 vue-video-player 后面更多会说自定义组件 说一说我的遇到的坑: 本来用播放器播放直播流 OK 了,可是 UI 和我说,播放器在回放的时候,希望像普

Jioho的博客 4214

手把手教你用CANape调试XCP安全会话:DLL权限管理+四种加密模式实战演示

本文详细介绍了如何使用CANape调试XCP安全会话,重点解析了DLL权限管理的实现与配置方法,并通过实战演示了标定页切换、DAQ测量、STIM旁路和PGM刷写四种典型加密模式的操作流程与调试技巧,帮助工程师深入理解并掌握XCP安全访问机制。

smartcontract5的博客 562

Video.js自定义使用

原文地址:http://blog.csdn.net/software1/article/details/53906992 video.js 直接使用自定义控制条和样式弹幕相关plugin写法 video.js 是开源插件,据说甚至可以集合到gitbook上 note:  一个需要注意的点是下载下来的demo.html直接右键浏览器是打不开的,需要用iis或者n

杨春建的博客 4811

技术美术个人笔记(十三)——Houdini金属弯曲模拟

最近接收到使用Houdini自动解算破损/砸坏/扭曲汽车的需求,以此文记录制作金属弯曲自动解算工具时使用的部分节点解析;

小谁的博客 2148

Matlab 2023b 科研党必备:MOSEK 10.1.25 安装与配置全记录(附License过期解决方案)

本文详细介绍了在Matlab 2023b中安装与配置MOSEK 10.1.25的全过程,特别针对科研用户提供学术许可申请、证书文件部署及环境集成的实用指南。文章还包含常见问题解决方案和性能调优建议,帮助用户高效完成优化计算任务。

weixin_30598225的博客 171

video.js的使用,打造自定义视频播放器(综合详解,可收藏)

video.js的使用,打造自定义视频播放器(综合详解,可收藏)一、视频初始化:1、直接在viedo的HTML标签中 `` 初始化,标签里面加上 `class="video-js"` 和 `data-setup='{}'` 属性,例如;2、使用js初始化(推荐使用),例如:二、关于js初始化后,ControlBar组件的相关说明:三、video.js样式修改1、暂停时显示播放按钮2、播放按钮变圆形...

weixin_43847799的博客 8417

【Python爬虫】股票信息定向爬取

【Python爬虫】股票信息定向爬取:通过requests-bs4-re技术路线爬虫获取上交所和深交所所有股票的名称和交易信息

qq_39321802的博客 1503

视频播放插件Video.js

在网页开发过程中,难免会用到video标签,然鹅video标签的默认样式实在不敢恭维,那如何实现视频播放的样式呢?首先引入:&lt;link href="css/video-js.min.css" rel="stylesheet"&gt;&lt;script src="js/video.min.js"&gt;&lt;/script&gt;HTML代码:&lt;video id="my

qq_36926807的博客 1599

Python爬虫实战:基于Scrapy和Playwright的深交所数据采集

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化)爬取深圳证券交易所(www.szse.cn)的公开数据。文章包含完整项目搭建、反爬策略应对、数据解析存储等全流程实现,并附详细代码示例和性能优化建议。python复制下载# 上市公司基本信息# 财务数据revenue = scrapy.Field() # 营业收入net_profit = scrapy.Field() # 净利润eps = scrapy.Field() # 每股收益。

2201_76125261的博客 950

ESP32设备驱动-直流电机与L298N电机驱动器

在本文中,我们将介绍如何使用ESP32通过L298N电机驱动器驱动直流电机。

视觉与物联智能 3593

React-Video-Renderer 项目常见问题解决方案

React-Video-Renderer 项目常见问题解决方案 React-Video-Renderer 是一个用于构建自定义视频播放器的开源项目。该项目主要使用 JavaScript 和 React 编程语言。 常见问题及解决方案 问题一:如何安装和使用 React-Video-Renderer? 解决步骤: 确保你的开发环境中已经安装了 Node.js 和 npm。 使用 npm 命令安装 ...

gitblog_00986的博客 416

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HTML5实现video标签的自定义播放进度条

HTML5实现video标签的自定义播放进度条 现在随着html5的渐热,越来越多的web开发者都开始选择使用html5写出一些比较好的web应用。 html代码: &amp;lt;!DOCTYPE html&amp;gt; &amp;lt;html lang=&quot;en&quot;&amp;gt; &amp;lt;head&amp;gt; &amp;lt;meta chars

qq_35856855的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

video.js-7.18.1 代码及demo

video.js-7.18.1 代码及demo 【下载地址】video.js-7.18.1代码及demo video.js 是一个功能强大且灵活的开源 JavaScript 视频播放器,专为网页开发者设计。它支持广泛的视频格式,并提供丰富的自定义选项,帮助您轻松在网页中嵌入高质量的视频播放功能。本仓库包含了 video....

gitblog_06780的博客 516

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

js修改video的source_video.js使用改变ui过程

Video.js 是一个通用的在网页上嵌入视频播放器的 JS 库,Video.js 自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器。(要支持ie低版本请下载5.4.3版 )废话不多说了,直接给大家贴代码了,具体代码如下所示:poster属性用于设置预览图source用于设置视频地址获取video中各种默认UIvar myPlayer = video...

weixin_39587246的博客 778

开源视频流服务_使用开源Video.js进行实时视频流

开源视频流服务 去年,我写过有关使用Linux创建视频流服务器的文章 。 该项目使用实时消息协议(RTMP),Nginx Web服务器,Open Broadcast Studio(OBS)和VLC媒体播放器。 我使用VLC播放我们的视频流,这对于小型本地部署来说可能很好,但在大规模情况下并不实用。 首先,您的观众必须使用VLC,而RTMP流会提供不一致的播放。 这就是Video.js发挥作用...

cumj63710的博客 2127

视频标记插件 Video.js Markers 推荐

--- 随着视频内容在互联网上的爆炸性增长,为视频添加互动元素变得日益重要。今天,我们来探讨一个极具潜力的开源工具——**Video.js Markers**,尽管该项目当前不再积极维护,但其强大的功能依然值得推荐给开发者和内容创作者。 ## 项目介绍 Video.js Markers是一款基于流行的HTML5视频播放器框架Video.js开发的插件。它允许你在视频的进度条上放置自定义标记点...

gitblog_00104的博客 779
上一篇: 文章标题
software1
博客等级 码龄18年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值