http://graysonearle.com/bluemen/ 使用 webkit 浏览器单击它。加载时应该会出现一个 4x4 的视频网格,但只有 1-3 个视频倾向于加载到 Chrome 上。在 Safari 上工作得很好,什么给了?它们是同一个视频。当我使用较小的视频进行此操作时,它运行良好,我想这可能与它有关。有什么方法可以强制加载页面上的多个视频?
问问题
1174 次
1 回答
1
如果您为每个视频添加缓存破坏器后缀,它似乎可以正常工作。在 Chrome 上,它会做正确的事情并很快将第一帧加载为海报,但在 Safari 上,您需要明确选择海报
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://graysonearle.com/bluemen/css/reset.css">
<link rel="stylesheet" type="text/css" href="http://graysonearle.com/bluemen/css/style.css">
</head>
<body>
<script>
for (var i=0;i<10;i++) {
document.write('<div class="vidBox" id="box'+i+'">');
document.write(' <video class="vid" preload="metadata" controls="true" id="vid'+i+'">');
document.write(' <source src="http://graysonearle.com/bluemen/videos/fullvid.mp4?a='+i+'" type="video/mp4">');
document.write(' <source src="http://graysonearle.com/bluemen/videos/red.webm" type="video/ogg">');
document.write(' </video>');
document.write('</div>');
}
</script>
</body>
</html>
如果这不起作用(并且看起来浏览器缓冲区有时仍然会阻塞),那么您需要做的是一个一个加载视频源,触发 canplaythrough 事件的加载。
总而言之,它似乎不是很健壮,祝你好运
编辑
好的,这个版本更强大,但需要稍微整理一下......它通过异步 ajax 调用将视频作为 blob 抓取一次,然后将其作为源传递给每个视频元素......你会可能想要将海报加载到视频中并显示某种进度条,直到视频加载完毕。我不得不对我的测试视频做这个样本,因为我没有跨域权限,所以无法轻松地用你的大小视频进行测试......但试一试
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://graysonearle.com/bluemen/css/reset.css">
<link rel="stylesheet" type="text/css" href="http://graysonearle.com/bluemen/css/style.css">
<title></title>
</head>
<body>
<script type="text/javascript">
for (var i=0;i<10;i++) {
document.write('<div class="vidBox" id="box'+i+'">');
document.write(' <video class="vid" preload="metadata" controls="true" id="vid'+i+'">');
document.write(' <\/video>');
document.write('<\/div>');
}
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://jcath-drg.s3.amazonaws.com/BigBuck.m4v', 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<10;i++) {
display(i,vid)
}
}
};
xhr.send();
function display(i,vid){
var video = document.getElementById("vid"+i);
console.log(video);
video.src = vid;
}
</script>
</body>
</html>
于 2013-01-15T23:53:19.460 回答