UWP视频应用都是HTML5uwp音乐播放器器吗

什么是hivideo?
&&& 最近一段时间在使用PhoneGap开发一个App应用,App需要播放视频,本想直接使用html5的video,但使用它在全屏播放时不支持横屏播放,只能放弃。最终决定还是自己封装一个播放器算了,免得以后要扩展功能麻烦。
&&& 最近迷上hi这个单词,所以我给这个播放器取名叫做:hivideo。
&&& hivideo是一款基于html5的视频播放器,摒弃video原有的播放控制条样式,自己重写了一次。支持暂停、播放进度控制、声音控制、全屏播放。如果是要在手机端使用hivideo,全屏播放时还支持横屏播放。
&&& hivideo最终实现的效果如下:
如何使用hivideo?
&&& hivideo目录结构:
----images
----hivideo.css
hivideo.js
&&& 要想使用hivideo,首先得在主界面引入样式hivideo.css文件。
&link rel="stylesheet" href="assets/hivideo.css" /&
&&& hivideo.js文件可在主页面直接引用,同时也支持CommonJs、AMD规范。
&&& 在需要转换为hivideo播放器的video标签上添加属性:
&video ishivideo="true"&&/video&
&&& hivideo会自动把上面的video元素转换为hivideo播放器。我们还可以在video标签上设置播放属性:
&&& 1.autoplay: 自动播放。
&&& 2.isrotate:全屏是否横屏播放,如果在手机端使用hivideo,我们可以设置该属性为true,表示全屏播放时横屏显示。
&&& 3.autoHide:播放视频时自动隐藏控制条。
&&& 使用方式:
&video ishivideo="true" autoplay="true" isrotate="false" autoHide="true"&
&source src="http://www.html5videoplayer.net/videos/madagascar3.mp4" type="video/mp4"&
&&& 如果是后期动态添加的video元素,也可以通过hivideo动态加载。例如页面动态添加了一个id为&player&的video元素,可通过如下方式把video转换为hivideo播放器:
hivideo(document.getElementById("player"));
&&& 在线演示Demo:
&&& 开源地址:
如何隐藏浏览器的播放器样式
&&& 目前大多数浏览器都支持video元素,并且不同浏览器实现的video样式也不尽相同。
&&& chrome实现的播放器样式:
&&& Firefox实现的播放器样式:
&&& IE实现的播放器样式:
&&& 为了让播放器在各个浏览器下样式统一,首先要隐藏各个浏览器实现的样式。但一般我们通过浏览器开发工具查看不到播放器下的元素,因为这些元素都是阴影元素,它们是通过文档片段附加到video上,对于文档流是不可见的。&&& 如何查看浏览器下的阴影元素?Chrome为开发人员提供了可选项,打开开发者工具-&Settings-&General页签,我们能看到Elments有一个叫做&Show user agent shadow DOM&的选项:
&&& 勾选上该选项,现在我们通过开发工具可以查看到video下的播放元素:
&&& 上图中&div pseudo=&-webkit-media-controls&&元素就是控制条的容器,我们只要设置它的display为none就可以隐藏掉控制条,但也需要兼容各个浏览器:
video[ishivideo="true"]::-webkit-media-controls{
display:none !important;
video[ishivideo="true"]::-moz-media-controls{
display:none !important;
video[ishivideo="true"]::-o-media-controls{
display:none !important;
video[ishivideo="true"]::media-controls{
display:none !important;
&&& 这里我遇到一个费解的问题,把上面的样式通过合并的方式写是无效的,下面的写法不能隐藏掉阴影元素:
video[ishivideo="true"]::-webkit-media-controls,
video[ishivideo="true"]::-moz-media-controls,
video[ishivideo="true"]::-o-media-controls,
video[ishivideo="true"]::media-controls{
display:none !important;
&&& 隐藏浏览器阴影元素后就可以开始动手实现自己的控制条了。实现之前,我们得了解video提供的API。
播放器常用API
&&& 各个浏览器操作播放器提供的API名称一般都带有厂商前缀,所有基本上每一个API函数都对应多个版本,需要考虑兼容性。
&&& 1.全屏事件
["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange"].forEach(function(eventType){
document.addEventListener(eventType, function(event){
&&& 如果播放器全屏状态放生变化上面的事件就会触发。上面的事件我们只知道全屏状态发生变化,但不知道当前是进入全屏还是退出全屏。还需要结合全屏状态API。
&&& 2.当前是否全屏状态
hivideo.prototype.isFullScreen = function(){
return document.fullscreenElement ||
document.webkitFullscreenElement ||
document.mozFullScreenElement ||
document.msFullscreenE
&&& 上面是hivideo封装的判断是否全屏的函数。
&&& 3.进入全屏模式
if (video.requestFullscreen) {
video.requestFullscreen();
} else if (video.webkitRequestFullscreen) {
video.webkitRequestFullscreen();
} else if (video.mozRequestFullScreen) {
video.mozRequestFullScreen();
} else if (video.msRequestFullscreen) {
video.msRequestFullscreen();
&&& 4.退出全屏模式
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
&&& 5.播放状态
&&& video.paused:true表示未播放, false表示正在播放。
&&& 6.播放视频
&&& video.play()
&&& 7.暂停播放&&& video.pause()
&&& 8.是否静音&&& video.muted = true, 静音&&& Video.muted = false,不静音
&&& 9.声音控制
&&& 设置video.volume控制声音,值的范围0到100。
&&& 10.当前播放时间&&& video.currentTime,可读可写,单位为妙。可通过&input type=&range&&的值显示播放进度。&&&
&&& 11.视频总周期&&& video.duration,单位为妙。
&&& 12.播放时间更新事件
video.addEventListener("timeupdate", function(){
&&& 13.视频元数据加载完成事件
&&& 一般播放视频时都会显示视频总时长,触发loadedmetadata事件时元数据已经加载完成,所以可以在该事件中设置总时长的显示。
video.addEventListener("loadedmetadata", function(){
&&& 14.视频播放结束事件
video.addEventListener("ended", function(){
&&& 有了上面列出的API,要实现自定义播放器就比较容易了,在自己实现播放器的过程中对应位置调用对应API即可。
如何实现横屏播放
&&& 原理很简单,在全屏时播放器容器沾满了整个屏幕,我们可以给容器附加一个自定义样式,让容器旋转90度。
.rotate90{
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-ms-transform: rotate(90deg);
-o-transform: rotate(90deg);
transform: rotate(90deg);
&&& 旋转后的容器宽度和高度也要调整,需要把屏幕的高度screen.height赋给容器的宽度,而容器的高度设置为屏幕的宽度。这样就实现了全屏播放效果。下面是全屏播放控制的完整代码:
hivideo.prototype.bindFullEvent = function(){
var self = this;
var origWidth = origHeight = 0;
["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange"].forEach(function(eventType){
var curFullhivideoId = null;
document.addEventListener(eventType, function(event){
if((curFullhivideoId = document.body.getAttribute("curfullHivideo")) && curFullhivideoId !== self.videoId_ ){
var isRotate = self.options.
if(self.isFullScreen()){
var cltHeight = isRotate ? window.screen.width : window.screen.
var cltWidth = isRotate ? window.screen.height : window.screen.
if(isRotate && !hivideo.hasClass(self.videoParent, "rotate90")){
hivideo.addClass(self.videoParent, "rotate90");
self.videoParent.style.height = cltHeight + "px";
self.videoParent.style.width = cltWidth + "px";
if(isRotate) self.videoParent.className = self.videoParent.className.replace("rotate90", "").trim();
self.videoParent.style.height = origHeight + "px";
self.videoParent.style.width = origWidth + "px";
self.fullBtn && self.fullBtn.addEventListener("click", function(){
if(!self.isFullScreen()){
document.body.setAttribute("curfullHivideo", self.videoId_);
origWidth = self.videoParent.offsetW
origHeight = self.videoParent.offsetH
// go full-screen
if (self.videoParent.requestFullscreen) {
self.videoParent.requestFullscreen();
} else if (self.videoParent.webkitRequestFullscreen) {
self.videoParent.webkitRequestFullscreen();
} else if (self.videoParent.mozRequestFullScreen) {
self.videoParent.mozRequestFullScreen();
} else if (self.videoParent.msRequestFullscreen) {
self.videoParent.msRequestFullscreen();
self.exchangeBtnStatus(this, false);
// exit full-screen
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
self.exchangeBtnStatus(this, true);
支持CommonJS、AMD规范
&&& 1.CommonJS支持
(function(global, factory){
"use strict";
//支持commonJs规范
if(typeof module === "object" && typeof module.exports === "object"){
module.exports = factory(global);
factory(global);
}(typeof window !== "undefined" ? window : this, function(window)
&&& 2.AMD支持
//支持AMD规范
if (typeof define === "function" && define.amd){
define("hivideo", [], function(){
&&& 如果本篇内容对大家有帮助,请点击页面右下角的关注。如果觉得不好,也欢迎拍砖。你们的评价就是博主的动力!下篇内容,敬请期待!
阅读(...) 评论()HTML5视频播放器&video&和音频播放器&audio&用法
HTML5里引入的新标记 &audio& 和 &video& 实现了HTML对视频播放和音频播放的原生支持,有了这种原生的HTML5视频播放器/音频播放器,我们,而直接能将视频/音频嵌入到了网页中。
如何嵌入视频和音频
在网页里嵌入HTML5音频播放器和视频播放器的方法非常简单:
&video src="/~j/theora_testsuite/320x240.ogg" controls autoplay loop&
Your browser does not support the &code&video&/code& element.
上面这个例子显示了如何播放一个视频文件,并露出视频播放控制按钮。
下面这个例子是在HTML网页里嵌入音频 audio 的方法:
&audio controls autoplay loop src="/test/audio.ogg"&
&p&Your browser does not support the &code&audio&/code& element.&/p&
这里的 src 属性里可以填入一个音频/视频的URL,也可以是一个本地的文件。
&audio src="audio.ogg" controls autoplay loop&
&p&Your browser does not support the &code&audio&/code& element &/p&
下面是&audio& 和 &video& 两个标记上控制属性的含义:
controls : 显示标准的 HTML5 视频/音频播放器控制条、控制按钮。
autoplay : 让文件自动播放。
loop : 让文件循环播放。
&audio src="audio.mp3" preload="auto" controls&&/audio&
这里的 preload 属性是用来缓存大体积文件的。它有三个可选值:
"none" 不缓存
"auto" 缓存
"metadata" 只缓存文件元信息
为了能够兼容各种浏览器对不同媒体类型的支持,我们可以用多个 &source& 元素来提供多个不同的媒体类型。例如:
&video controls&
&source src="foo.ogg" type="video/ogg"&
&source src="foo.mp4" type="video/mp4"&
Your browser does not support the &code&video&/code& element.
支持Ogg格式视频流的浏览器可以播放 Ogg 文件。如果不支持,可以播放 MPEG-4 文件。查看各种浏览器对各种媒体类型的支持情况,请。
我们还可以指定播放使用的解码器(codecs); 这样就可以更精确的让浏览器如何播放提供的视频:
&video controls&
&source src="foo.ogg" type="video/ codecs=dirac, speex"&
Your browser does not support the &code&video&/code& element.
上面,我们指定了这个视频需要使用 Dirac 和 Speex 解码器。如果浏览器支持 Ogg 格式,但没有指定的解码器,那么,视频将不会被加载。
如果没有提供 type 属性,则浏览器会向服务器询问媒体类型,看看是否支持;如果不支持,浏览器将会去检查下一个 source 属性。
用JavaScript控制视频/音频播放
一旦视频文件正确的嵌入到了HTML网页里,我们就可以使用JavaScript里控制它的部分,获取它的播放信息。比如,用JavaScript启动视频播放:
var v = document.getElementsByTagName("video")[0];
用JavaScript可控制HTML5视频播放器实现播放、暂停、快进,快退、音量等。
&audio id="demo" src="audio.mp3"&&/audio&
&button onclick="document.getElementById('demo').play()"&播放&/button&
&button onclick="document.getElementById('demo').pause()"&暂停&/button&
&button onclick="document.getElementById('demo').volume+=0.1"&降低音量&/button&
&button onclick="document.getElementById('demo').volume-=0.1"&提高音量&/button&
停止下载视频文件
虽然我们可以使用pause()方法里让视频文件停止播放,但浏览器并未停止下载媒体文件,除非它达到了一定的缓存量。
下面是让浏览器如何停止下载视频文件的方法:
var mediaElement = document.getElementById("myMediaElementID");
mediaElement.pause();
mediaElement.src='';
mediaElement.removeAttribute("src");
通过删除 src 属性(或者设置为空值),这样就能停止文件的网络下载。
设定播放的时间点定位
我们可以指定视频从某时某分某秒开始播放,这是通过设置 currentTime 属性来实现。
我们可以通过 seekable 属性来获得视频有效的播放时间范围。它会返回一个 TimeRanges 对象,能够告诉你有效的开始时间和结束时间。
var mediaElement = document.getElementById('mediaElementID');
mediaElement.seekable.start(0);
// 返回开始时间 (秒)
mediaElement.seekable.end(0);
// 返回结束时间 (秒)
mediaElement.currentTime = 122; // 定位到第 122 秒播放
mediaElement.played.end(0);
// 返回已经播放的时间长度(秒)
设定播放范围
当在网页里嵌入视频/音频文件时, &audio& 或 &video& 元素允许我们提供一些额外的信息来指定播放哪一时间段。实现的方法是在媒体文件后面跟随(“#”)格式的信息。
它的具体语法是这样的:
#t=[开始时间][,结束时间]
时间的表示方法可以使用秒数,也可以提供一个 ”时:分:秒“ 格式的时间(例如 2:05:01 )。/p&
/video.ogg#t=10,20
指定视频从10秒开始播放,到20秒处结束。
/video.ogg#t=,10.5
指定视频从头开始播放到 10.5 秒处。
/video.ogg#t=,02:00:00
指定视频播放2小时。
/video.ogg#t=60
指定视频从第60秒开始播放,播放到结束。
设置视频封面(poster参数)
当视频不是自动播放时,在有些浏览器里,视频在未播放前的缺省界面是空白,这样很没有意义,我们可以给视频设定一个封面,用视频里的某个比较具有代表意义的画面截图作为视频的封面,设定视频封面的参数是 poster:
&video poster='cover.jpg' src="/~j/theora_testsuite/320x240.ogg" controls autoplay loop&
Your browser does not support the &code&video&/code& element.
当视频加载遇到错误时的补救方法
有时候视频资源会失效,或加载失败,或者浏览器不能解码当前视频格式,当遇到这种情况,我们应该给与补救措施,替换当前视频资源地址,或用其它措施补救,比如将video对象替换成图片。我们可以使用JavaScript对视频加载中的“error”事件进行监听,比如对于下面的视频资源:
&video controls&
&source src="dynamicsearch.mp4" type="video/mp4"&&/source&
&a href="dynamicsearch.mp4"&
data-original="dynamicsearch.jpg" alt="Dynamic app search in Firefox OS"&
&p&Click image to play a video demo of dynamic app search&/p&
我们使用下面的js代码进行补救:
var v = document.querySelector('video'),
sources = v.querySelectorAll('source'),
lastsource = sources[sources.length-1];
lastsource.addEventListener('error', function(ev) {
var d = document.createElement('div');
d.innerHTML = v.innerHTML;
v.parentNode.replaceChild(d, v);
}, false);
相关文章:
扫一扫二维码分享:

我要回帖

更多关于 win10uwp应用安装路径 的文章

 

随机推荐