- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发跨浏览器 HTML5 视频应用程序。我开始尝试 videojs为了技术上的可能性,我用 videojs 开发了一个页面,它在所有浏览器中都能正常工作,但在 IE9 及以上版本中它不起作用。如果它有效,它正在使用 swf 加载视频,而不是使用 HTML5 播放器。
这是我的代码
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.js"></script>
<link href="video-js/video-js-cust.css" rel="stylesheet">
<script src="video-js/video.dev.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
</head>
<style type="text/css">
.wrapper{
width: 760px;
margin: 0px auto;
}
.text-center{
text-align: center;
}
.block-video{
width: 640px;
margin: 0px auto;
}
.block{
background: #e7ecee;
padding: 10px;
display: block;
clear: both;
margin-bottom: 20px;
}
h4.video-title{
font-weight: normal;
margin-bottom: 10px;
margin-top: 10px;
}
.modal-content{
min-width: 680px;
}
/** PLAY LIST **/
.play-list-block{
height: 480px;
}
#video_3{
float: left;
}
.playlist-components{
float: left;
margin-left: 20px;
}
.playlist{
clear: both;
display: block;
}
.playlist ul{
list-style: none;
padding-left: 0px;
}
.playlist ul li{
display: block;
clear: both;
height: 50px;
cursor: pointer;
}
.playlist ul li:hover{
background: #fff;
}
.playlist ul li span{
float: left;
margin-right: 10px;
}
.playlist ul li span:last{
float: none;
}
.button-holder{
clear: both;
display: block;
}
.button-holder #prev{
float: left;
cursor: pointer;
}
.button-holder #next{
float: right;
cursor: pointer;
}
</style>
<body>
<h1 class="text-center">HTML5 Player technical possibilities</h1>
<div class="wrapper">
<div class="block">
<h4 class="text-center video-title"> Single video play back </h4>
<video id="video_1" class="video-js vjs-default-skin vjs-big-play-centered block-video"
controls preload="auto" width="640" height="405"
poster="videos/Big_Buck_Bunny_Trailer_480x270.png"
data-setup='{"video_1":true}'>
<source src="videos/Big_Buck_Bunny_Trailer.mp4" type='video/mp4'></source>
<source src="videos/Big_Buck_Bunny_Trailer.webm" type='video/webm'></source>
<source src="videos/Big_Buck_Bunny_Trailer.ogv" type='video/ogg'></source>
</video>
</div>
<div class="block">
<h4 class="text-center video-title"> Customizing UI controls </h4>
<video id="video_2" class="video-js vjs-default-skin vjs-big-play-centered block-video"
controls preload="auto" width="640" height="405"
poster="videos/Incredibles_Teaser_640x272.png"
data-setup='{"video_2":true}'>
<source src="videos/Incredibles_Teaser.mp4" type='video/mp4'></source>
<source src="videos/Incredibles_Teaser.webm" type='video/webm'></source>
<source src="videos/Incredibles_Teaser.ogv" type='video/ogg'></source>
</video>
</div>
<div class="block play-list-block">
<h4 class="text-center video-title"> Play back with multiple videos </h4>
<!--video id="video_3" class="video-js vjs-default-skin vjs-big-play-centered block-video"
controls preload="auto" width="640" height="405"
poster="videos/Finding_Nemo_Teaser_640x352.png"
data-setup='{"video_2":true}'>
<source src="videos/Finding_Nemo_Teaser.mp4" type='video/mp4'></source>
<source src="videos/Finding_Nemo_Teaser.webm" type='video/webm'></source>
<source src="videos/Finding_Nemo_Teaser.ogv" type='video/ogg'></source>
</video-->
<video id="video_3" class="video-js vjs-default-skin vjs-big-play-centered"
controls preload="auto" width="570" height="410"
data-setup=''
poster="">
</video>
<div class="playlist-components">
<div class="playlist">
<ul></ul>
</div>
<div class="button-holder">
<label id="prev" alt="Previous video"> Prev </label>
<label id="next" alt="Next video"> Next </label>
</div>
</div>
</div>
<div class="block">
<h4 class="text-center video-title"> Dynamic video loading </h4>
<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
LOAD PLAYER
</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content row">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">Player on overlay</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- video id="video_3" class="video-js vjs-default-skin vjs-big-play-centered block-video"
controls preload="auto" width="640" height="405"
poster="videos/Finding_Nemo_Teaser_640x352.png"
data-setup='{"video_2":true}'>
<source src="videos/Finding_Nemo_Teaser.mp4" type='video/mp4'></source>
<source src="videos/Finding_Nemo_Teaser.webm" type='video/webm'></source>
<source src="videos/Finding_Nemo_Teaser.ogv" type='video/ogg'></source>
</video-->
<script src="video-js/video-js-playlist.js"></script>
<script type="text/javascript">
var video_1_Player = videojs('video_1');
var video_3_player, video_4_Player, demoModule;
$(document).ready(function(){
$('#myModal').on('shown.bs.modal', function (e) {
loadModelPlayer();
});
$('#myModal').on('hidden.bs.modal', function (e) {
video_4_Player.pause();
});
});
function loadPlayList(){
var videos = [
{
"src" : [
'videos/Incredibles_Teaser.webm',
'videos/Incredibles_Teaser.mp4',
'videos/Incredibles_Teaser.ogv'
],
"poster" : 'videos/Incredibles_Teaser_640x272.png',
"title" : 'Video 2'
},
{
"src" : [
'videos/Finding_Nemo_Teaser.webm',
'videos/Finding_Nemo_Teaser.mp4',
'videos/Finding_Nemo_Teaser.ogv'
],
"poster" : 'videos/Finding_Nemo_Teaser_640x352.png',
"title" : 'Video 1'
},
{
"src" : [
'videos/Big_Buck_Bunny_Trailer.webm',
'videos/Big_Buck_Bunny_Trailer.mp4',
'videos/Big_Buck_Bunny_Trailer.ogv'
],
"poster" : 'videos/Big_Buck_Bunny_Trailer_480x270.png',
"title" : 'Video 3'
}
];
//video_3_player = videojs('video_3');
//video_3_player.playList(videos);
demoModule = {
"init" : function(){
this.els = {};
this.cacheElements();
this.initVideo();
this.createListOfVideos();
this.bindEvents();
this.overwriteConsole();
},
"overwriteConsole" : function(){
console._log = console.log;
console.log = this.log;
},
"log" : function(string){
demoModule.els.log.append('<p>' + string + '</p>');
console._log(string);
},
"cacheElements" : function(){
this.els.$playlist = $('div.playlist > ul');
this.els.$next = $('#next');
this.els.$prev = $('#prev');
this.els.log = $('div.panels > pre');
},
"initVideo" : function(){
this.player = videojs('video_3');
this.player.playList(videos);
},
"createListOfVideos" : function(){
var html = '';
for (var i = 0, len = this.player.pl.videos.length; i < len; i++){
html += '<li data-videoplaylist="'+ i +'">'+
'<span class="number">' + (i + 1) + '</span>'+
'<span class="poster"><img src="'+ videos[i].poster +'" width="30" height="30"></span>' +
'<span class="title">'+ videos[i].title +'</span>' +
'</li>';
}
this.els.$playlist.empty().html(html);
this.updateActiveVideo();
},
"updateActiveVideo" : function(){
var activeIndex = this.player.pl.current;
this.els.$playlist.find('li').removeClass('active');
this.els.$playlist.find('li[data-videoplaylist="' + activeIndex +'"]').addClass('active');
},
"bindEvents" : function(){
var self = this;
this.els.$playlist.find('li').on('click', $.proxy(this.selectVideo,this));
this.els.$next.on('click', $.proxy(this.nextOrPrev,this));
this.els.$prev.on('click', $.proxy(this.nextOrPrev,this));
this.player.on('next', function(e){
console.log('Next video');
self.updateActiveVideo.apply(self);
});
this.player.on('prev', function(e){
console.log('Previous video');
self.updateActiveVideo.apply(self);
});
this.player.on('lastVideoEnded', function(e){
console.log('Last video has finished');
});
},
"nextOrPrev" : function(e){
var clicked = $(e.target);
this.player[clicked.attr('id')]();
},
"selectVideo" : function(e){
var clicked = e.target.nodeName === 'LI' ? $(e.target) : $(e.target).closest('li');
if (!clicked.hasClass('active')){
console.log('Selecting video');
var videoIndex = clicked.data('videoplaylist');
this.player.playList(videoIndex);
this.updateActiveVideo();
}
}
};
demoModule.init();
}
try{
loadPlayList();
}catch(err){
console.log("Exception raised ");
console.log(err);
}
function loadModelPlayer(){
if(video_4_Player == undefined){
var videoTag = $("<video>",
{"id":'video_4',
"class":'video-js vjs-default-skin vjs-big-play-centered block-video',
"controls":'true',
"preload": 'auto',
"width":'640px',
"height":'405px'
}
);
var src1 = $("<source>",{"src":'videos/Finding_Nemo_Teaser.mp4',"type":'video/mp4'});
var src2 = $("<source>",{"src":'videos/Finding_Nemo_Teaser.webm',"type":'video/webm'});
var src3 = $("<source>",{"src":'videos/Finding_Nemo_Teaser.ogg',"type":'video/ogg'});
$(videoTag).append(src1);
$(videoTag).append(src2);
$(videoTag).append(src3);
$(videoTag).appendTo(".modal-body");
videojs('video_4',{"width":'640',"height":'405'},function(ev){
video_4_Player = this;
console.log("player loaded");
});
}
}
</script>
<style type="text/css">
/***
* CUSTOM SKIN
****/
#video_2 .vjs-big-play-button{
background: none;
border: 0px;
opacity: 1;
box-shadow: none;
top: 40%;
}
#video_2 .vjs-big-play-button:before{
text-shadow: none;
font-size: 2em;
color: #fff;
}
#video_2 .vjs-slider-handle:before {
font-size: 1.3em;
text-shadow: none;
top: -2;
-webkit-transform: none;
-moz-transform: none;
-ms-transform: none;
-o-transform: none;
transform: none;
}
#video_2 .vjs-slider-handle:before {
text-shadow: none;
-webkit-transform: none;
-moz-transform: none;
-ms-transform: none;
-o-transform: none;
transform: none;
}
#video_2 .vjs-play-progress{
background:#b40c1e;
}
#video_2 .vjs-volume-handle:before {
font-size: .9em;
}
.vjs-default-skin .vjs-volume-level{
background: #b40c1e;
}
#video_2 .vjs-progress-control {
font-size: .9em;
}
#video_2:hover .vjs-progress-control {
font-size: .9em;
-webkit-transition: none;
-moz-transition: none;
-o-transition: none;
transition: none;
}
#video_2 .vjs-control-bar{
background-color: #07141e;
}
</style>
</body>
</html>
所有资源均已正确加载,并且可以在除 IE9 及更高版本之外的所有浏览器中运行。
请帮我看看我哪里出错了。
最佳答案
您获得了 HTML5 Shiv 吗?听起来这就是你所缺少的。
关于javascript - Videojs 无法在 IE 9 及更高版本中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067687/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!