HTML5 video error handling

前端 未结 6 1130
一整个雨季
一整个雨季 2020-12-09 02:50

I need to tell, whether video cannot be played (\"x\" sign is shown in browser).

This code does\'t works. \"onerror\" event will never be fired under Firefox

6条回答
  •  臣服心动
    2020-12-09 03:31

    It's good to know that Chrome and Firefox have different onerror callbacks. The error must therefore be mapped. Mozilla uses error.originalTarget.

    Here is a sample on how to do it with pure JavaScript:

    const file = 'https://samples.ffmpeg.org/MPEG-4/MPEGSolution_jurassic.mp4';
    
    window.fetch(file, {mode: 'no-cors'})
    .then((response) => response.blob())
    .then((blob) => {
      const url = window.URL.createObjectURL(blob);
      const video = document.createElement('video');      
    
      video.addEventListener('error', (event) => {
        let error = event;
    
        // Chrome v60
        if (event.path && event.path[0]) {
          error = event.path[0].error;
        }
    
        // Firefox v55
        if (event.originalTarget) {
          error = error.originalTarget.error;
        }
    
        // Here comes the error message
        alert(`Video error: ${error.message}`);
    
        window.URL.revokeObjectURL(url);
      }, true);
    
      video.src = url;
      document.body.appendChild(video);
    });

    The above example maps an incoming error event into a MediaError which can be used to display an error playback message.

提交回复
热议问题