2015-08-24 5 views
0

Как я могу запустить событие, когда видео полностью загружено?событие пожара, когда <video> полностью загружен

Я попробовал следующий метод, чтобы получить .loaded и .total для сравнения и огня, но выглядит как в следующих scenerio консольных беспосадочных журналов

непредсказуемых,
video.addEventListener("progress", function(p){ 
     console.log(p.loaded) 
    }); 

пса. «видео» - это мой элемент видео, как вы можете догадаться, ps2. не дубликат HTML5 Video - Percentage Loaded? - Я не хочу «воспроизводить» видео, загружаю их только. Решение этой ссылки требует, чтобы видео было либо в режиме автовоспроизведения, либо для воспроизведения (для их загрузки).

+0

@JonKoops просто отредактировал вопрос - вкратце: я наткнулся на этот метод, однако прогресс не срабатывает, когда видео не воспроизводятся. Это одна из главных проблем. – Mia

+0

Если вы не намерены воспроизводить видео, возможно, вам не следует использовать элемент 'video'. Что вы хотите сделать с видео после его загрузки? Измените свой вопрос соответствующим образом. –

+0

Вы поняли это? –

ответ

-2

Пожалуйста, взгляните на это: http://www.w3schools.com/tags/av_event_canplay.asp

+0

Спасибо, но я не ищу «если я могу воспроизвести видео или нет» - я ищу «видео полностью загружено» – Mia

+0

Это неправильный ответ. Поскольку MDN указывает на это событие: «Отправляется, когда доступно достаточно данных, которые могут воспроизводиться носители, по крайней мере, для нескольких кадров. Это соответствует HAVE_ENOUGH_DATA readyState.'. Это не эквивалентно его загрузке в полном объеме. –

+0

Вы правы, жаль, что я неправильно понял ваше требование, а затем http://www.w3schools.com/tags/av_event_canplaythrough.asp, похоже, срабатывает, когда видео полностью загружено. – Azukaar

-1

Вы можете увидеть решение здесь HTML5 Video - Percentage Loaded?

чек процентов = 100% загрузки или полной загрузки видео.

+0

Если вы подозреваете, что этот вопрос является дубликатом, отметьте его так. –

+0

По какой-то причине это не работает для меня, если видео не настроено на автовоспроизведение. – Mia

+0

Определенно не дублируется. – Mia

0

Нет событий, которые будут сообщать вам обо всех загрузках. Это связано с тем, что браузеры хотят быть умными в отношении того, сколько данных потребляется, и попытается загрузить минимальный объем данных, необходимых для воспроизведения видео.

Другим возможным решением является загрузка видео файл как двоичный объект, используя обычный старый запрос HTTP и установить его в качестве источника вашего видеоэлемент, как так:

/** 
 
    * Fetches a video file from a URL and returns a Promise that resolves with the file a Blob. 
 
    * @param {String} url - The URL where the video file should be fetched from. 
 
    * @returns {Promise} A Promise that resolves with the fetched video file as a Blob. 
 
    */ 
 
    function fetchVideo(url) { 
 
     return new Promise(function(resolve, reject) { 
 
     // Usual XMLHttpRequest setup. 
 
     var request = new XMLHttpRequest(); 
 
     request.open('GET', url); 
 
     request.responseType = 'blob'; 
 
     
 
     request.onload = function() { 
 
      // Check if request status code was successfull. 
 
      if (request.status === 200) { 
 
      // Resolve with request response. 
 
      resolve(request.response); 
 
      } else { 
 
      // Otherwise reject with a meaningfull message. 
 
      reject(new Error(req.statusText)); 
 
      }  
 
     }; 
 
     
 
     // Handle any network errors. 
 
     request.onerror = function() { 
 
      reject(new Error('Network error')); 
 
     }; 
 
     
 
     // Send request. 
 
     request.send(); 
 
     }); 
 
    } 
 
    
 
    // Get the video element from the DOM. 
 
    var video = document.getElementById('video'); 
 
    
 
    // Fetch video from remote server. 
 
    fetchVideo('https://d8d913s460fub.cloudfront.net/videoserver/cat-test-video-320x240.mp4') 
 
     .then(function(blob) { 
 
     // Create a source for the video element from the blob. 
 
     video.src = URL.createObjectURL(blob); 
 
     }) 
 
     // Catch any error that occurs while fetching. 
 
     .catch(function(err) { 
 
     console.error('Unable to fetch video: ' + err.message); 
 
     });
<video id="video" controls autoplay></video>

Смежные вопросы