Jquery 设置HTML5视频在FF或Safari中不起作用
在www.graysonearle.com/bluemen/index2.html上做这个有趣的网络项目,我遇到了各种各样的问题。SO上的某个人帮助我确保在播放之前加载视频,但这个解决方案只在Chrome上对我有效。 代码如下:Jquery 设置HTML5视频在FF或Safari中不起作用,jquery,html,video,html5-video,Jquery,Html,Video,Html5 Video,在www.graysonearle.com/bluemen/index2.html上做这个有趣的网络项目,我遇到了各种各样的问题。SO上的某个人帮助我确保在播放之前加载视频,但这个解决方案只在Chrome上对我有效。 代码如下: for (var i=0;i<16;i++) { document.write('<div class="vidBox" id="box'+i+'">'); document.write(' <vid
for (var i=0;i<16;i++) {
document.write('<div class="vidBox" id="box'+i+'">');
document.write(' <video class="vid" loop="loop" preload="metadata" id="vid'+i+'">');
document.write(' <\/video>');
document.write('<\/div>');
}
var xhr = new XMLHttpRequest();
xhr.open('GET', 'videos/fullvid' + ext, true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
console.log("got it");
var myBlob = this.response;
var vid = (window.webkitURL ? webkitURL : URL).createObjectURL(myBlob);
// myBlob is now the blob that the object URL pointed to.
for (var i=0;i<16;i++) {
display(i,vid)
}
}
};
xhr.send();
function display(i,vid){
var video = document.getElementById("vid"+i);
console.log(video);
video.src = vid;
}
for(var i=0;i我不确定为什么要使用document.write添加这些,但无论如何,请尝试将自动播放属性添加到视频中,例如
<video controls="controls" autoplay="autoplay">
Your browser does not support the video tag.
</video>
您的浏览器不支持视频标记。
我可以查看您的doctype吗?请注意,html5的doctype与早期版本的html不同。请检查您的doctype。它应该是
编辑
html5视频的正确标签。我想你可能需要修改你的语法
<video width="320" height="240" controls>
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>
除了将视频添加到HTML中的“有趣”方式之外,您还应该依赖于
首先,如果希望视频实际自动加载,请不要使用preload=“metadata”
,因为这只会加载视频元数据。将preload设置为“auto”
会有所帮助。或者,您可以完全不使用它,因为auto
是默认值。(尽管似乎每当Opera添加对此属性的支持时,他们都会将其默认设置为“metadata”
,因此您最好还是将其显式设置为“auto”
)
之后,处理掉整个XHR混乱。然后,您可以执行以下操作:
var videos = document.getElementsByTagName('video');
for(var i = 0, ii = videos.length; i < ii; i++) {
videos[i].addEventListener('canplaythrough',enablePlayback,false);
}
var videosLoaded = 0;
function enablePlayback(e) {
videosLoaded++;
if(videosLoaded === 16) {
// enable a play button or do whatever you want
// in this case: start playing all the videos at once
for(var i = 0, ii = videos.length; i < ii; i++) {
videos[i].play();
}
}
}
var videos=document.getElementsByTagName('video');
对于(变量i=0,ii=videos.length;i
此代码基本上为所有视频添加了一个canplaythrough
事件的侦听器,然后在每个视频启动时,它们将videosLoaded
变量增加一个,当最后一个视频调用它时,videosLoaded
达到16(4x4网格中的视频数量),它将调用play()
在所有视频对象上
您可能需要对此进行大量的实验才能将其正确(我自己手头没有16个小视频和短视频来充分测试这一点),但这应该会将您带向正确的方向。如果video.load()
没有下载所有视频,您可能还需要查看preload=“auto”
(可能会发生,因为它们太多了)
如果video.load()
和preload=“auto”
似乎都不起作用,您可以将所有视频设置为自动播放,然后收听play
事件并立即暂停(然后删除play
事件侦听器)。之后,请使用与之前相同的canplaythrough
代码。Uh-oh,设置为“我会更改它…”不变。不过,谢谢!您的语法或浏览器版本应该是罪魁祸首。您是否尝试过用纯html测试代码(没有ajax和javascript)。请尝试使用html5在您的网页上播放视频,以查看浏览器的响应。我成功地在我的网页上播放了html5视频,但这些视频都更新到了最新版本。在chrome上,它的工作原理是一样的。它一定与浏览器有关,而不是与您的代码有关。这是一种非常精细的处理浏览器不可用的事实的方法当我有16个视频等待同时播放时,这很好。这会返回什么?console.log(video);在此处运行浏览器测试:尝试以下操作:videoTag.src=“vid”
videoTag.load();
videoTag.play()
相反,非常感谢您抽出时间。我已经遇到的一个问题是,浏览器在加载8~个视频后就会放弃。这是XHR内容的最初原因,但可能有更好的解决方法。请检查ChromeOh,等等。在重新加载页面几次后,它会工作。也许这个连接很糟糕……让我知道如果对你有用的话。再次感谢。
var videos = document.getElementsByTagName('video');
for(var i = 0, ii = videos.length; i < ii; i++) {
videos[i].addEventListener('canplaythrough',enablePlayback,false);
}
var videosLoaded = 0;
function enablePlayback(e) {
videosLoaded++;
if(videosLoaded === 16) {
// enable a play button or do whatever you want
// in this case: start playing all the videos at once
for(var i = 0, ii = videos.length; i < ii; i++) {
videos[i].play();
}
}
}