Niestety Chrome - podobnie jak innych przeglądarek HTML5 - stara się być mądry o tym, co to pobieranie i pozwala uniknąć niepotrzebnego zużycia pasma ... oznacza to, że czasami jesteśmy w lewo z doświadczeniem nieoptymalne (ironicznie YouTube cierpi z tego powodu, że istnieją rozszerzenia, które wymuszają więcej wstępnego buforowania!)
To powiedziawszy, nie uważam, aby wymagało to zbyt często z dobrym serwerem i dobrym połączeniem - ale jeśli potrzebujesz czegoś Jedyne rozwiązanie, które znalazłem to trochę młot ... użyj Ajax, aby pobrać plik, który chcesz odtworzyć, a następnie załaduj go do źródła dla elementu wideo.
Poniższy przykład zakłada, że przeglądarka obsługuje m4v/mp4 - prawdopodobnie będziesz chciał użyć testu canPlayType, aby wybrać najbardziej odpowiedni format wideo dla użytkowników, jeśli nie możesz zagwarantować (np.) Chrome. Będziesz także chciał przetestować, aby zobaczyć, jak dobrze radzi sobie z filmami o takiej wielkości, jaką chcesz (wypróbowałem dość duże, ale nie jestem pewny, który górny limit to będzie niezawodnie obsługiwać)
Próbka jest również bardzo prosta. .. wywołuje żądanie i nie komunikuje niczego użytkownikowi podczas jego ładowania - przy rozmiarze wideo prawdopodobnie chcesz pokazać pasek postępu tylko po to, aby ich zainteresować ...
z drugiej strony wadą tego procesu jest to, że nie zacznie się grać, dopóki nie pobierzesz pełnego pliku - jeśli chcesz głębiej wyświetlać wideo dynamicznie z bufora, musisz zacząć zagłębiać się w krwawiącą krawędź (przy moment) świata MediaSource
zgodnie z opisem w wpisach takich jak http://francisshanahan.com/index.php/2013/build-an-mpeg-dash-player-from-scratch/
<!DOCTYPE html>
<html>
<head>
<title>Preload video via AJAX</title>
</head>
<body>
<script>
console.log("Downloading video...hellip;Please wait...")
var xhr = new XMLHttpRequest();
xhr.open('GET', '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 || window.URL).createObjectURL(myBlob);
// myBlob is now the blob that the object URL pointed to.
var video = document.getElementById("video");
console.log("Loading video into element");
video.src = vid;
// not needed if autoplay is set for the video element
// video.play()
}
}
xhr.send();
</script>
<video id="video" controls autoplay></video>
</body>
</html>