2013-08-28 5 views
7

ビデオをページの背景として設定しようとしています。事は、私はビデオを1回ダウンロードした後、ビデオを再生し終わるとトリガを1回だけダウンロードするだけでなく、もう一度それをダウンロードすることです。HTML <video loop> - 複数回ダウンロード

これは小さなものであるかのように、5回目の反復後、ビデオの再生を停止するだけです。私はUbuntuの13.04で今


をクローム30.0.1599.14 DEVを使用してい

は、ここでは、この動作を停止する方法上の任意の提案をだとスクリーンショット

Dev tools with the video requests

+0

この問題の回答を見つけましたか?私は同じ問題を抱えています。 S3を使用する。ありがとうございました – James

+0

悲しいことに、いいえ、私は現在背景ビデオで別のサイトを開発していますが、同じ問題は続く:( – Diestrin

+0

http://stackoverflow.com/questions/13883569/chrome-re-downloads-video-every-loop – chemoish

答えて

0

この問題を回避する唯一の方法は、ファイルをローカルのStorageなどにロードすることです。例以上

+0

StackOverflowへようこそ@chemoishが投稿したリンクによれば、この問題はChromeデベロッパーツールを開いているときにのみ発生します(デフォルトではキャッシュを無効にしています)。さらに –

+0

ビデオがループしてビデオが遅くなるたびに何が起きるのですか –

4
<style type="text/css"> 
body { background: url(demo.jpg) center; 
background-size: 300%; 
width:100%; 
height:150px;} 
video { display: block; } 
video#bgvid { 
position: fixed; 
top: 50%; 
left: 50%; 
min-width: 100%; 
min-height: 100%; 
width: auto; 
height: auto; 
z-index: -100000; 
-webkit-transform: translateX(-50%) translateY(-50%); 
transform: translateX(-50%) translateY(-50%); 

} 
@media screen and (max-device-width: 800px) { 
body { background: url(demo.jpg) #000 no-repeat center center fixed; } 
#bgvid { display: none; } 
} 
</style> 
<script type="text/javascript"> 
//if it is not already in local storage 
if (localStorage.getItem("demo") === null){ 
//make request for file 
var oReq = new XMLHttpRequest(); 
oReq.open("POST", "http://LINK_TO_demo.mp4", true); 
// arraybuffer needed for binary file 
oReq.responseType = "arraybuffer"; 
// once loaded 
oReq.onload = function(oEvent) { 
// Convert to Blob Object 
var blob = new Blob([oReq.response], {type: "video/mp4"}); 
var reader = new FileReader(); 
reader.readAsDataURL(blob); 
reader.onload = function(e) { 
var dataURL = reader.result; 
localStorage.setItem("demo", dataURL); 
// reload or add document ready function. 
location.reload(); 
} 
oReq.send();}} 
var videlem = document.createElement("video"); 
videlem.autoplay = true; 
videlem.loop = true; 
videlem.poster = "demo.jpg"; 
videlem.id = "bgvid"; 
var sourceMP4 = document.createElement("source"); 
sourceMP4.type = "video/mp4"; 
sourceMP4.src = localStorage.getItem("demo"); 
sourceMP4.autoPlay = true; 
videlem.appendChild(sourceMP4); 
document.body.appendChild(videlem);  
</script> 

これにより、再生時間が短縮され、ローカルストレージにビデオが保存されるため、サーバーへの要求はなくなります。

+1

localStorageで保存するのはあまり良い解決策ではありません:localstorageのサイズは非常に限られています – Petroff

+0

私はいくつかのバグを修正した後、 "POST"を "GET"に変更する必要があります。 "oReq.send()"は、次の閉じ括弧の後に置かなければなりません。 i番目のセッション記憶域。しかし、まだ約5MBの制限。 – Hugues

1

私は同じ問題を抱えており、インターネットで解決策を探しました。 これは3歳の記事ですが、この問題に遭遇した人に役立つ可能性があります。 私の場合、ループ内に+ 24MBの.mp4ファイルがあり、クロムはすべてのループでビデオを再ダウンロードしました。ビデオを少し圧縮し、ビデオを.webmに変換しました。ファイルサイズは4.5MBに縮小され、問題は消えました。

編集:ファイルサイズと関係があるようです。この問題は、4.5 MBの.mp4では発生しません。