2015-09-07 104 views
3

在HTML5規範,它建議你把備用材料在<video>標記爲不支持舊版本瀏覽器的HTML5視頻後備。當所有類型不支持

<video width="400" controls> 
    <source src="mov_bbb.mp4" type="video/mp4"> 
    <source src="mov_bbb.ogg" type="video/ogg"> 
    Your browser does not support HTML5 video. 
</video> 

但是,當所有源類型不受支持時,我找不到任何回退。例如,我的Chromium瀏覽器不能播放video/mp4,但它可以播放video/ogg。所以我希望這會呈現回退文本。

<video width="400" controls> 
    <source src="mov_bbb.mp4" type="video/mp4"> 
    Your browser does not support HTML5 video. 
</video> 

相反,我只是得到一個沒有任何內容的視頻播放器,因爲它無法加載mp4文件。

有沒有辦法在HTML 5視頻回退時,有沒有可用的視頻源?我意識到我嘗試的回退只適用於舊版瀏覽器,但我仍然需要一個回退功能,因爲沒有可用的源代碼。

+1

回退時,纔會顯示如果_HTML5'

+0

@Xufox我意識到這一點,但如果它無法呈現任何源代碼,我仍然需要一種方法來進行回退。 – Josh

+2

如何使用['canPlayType'](http://stackoverflow.com/a/7451727)? – Xufox

回答

4

實際上,當您嘗試在<source>元素中加載不受支持的媒體類型時,會觸發error事件。
然後,您可以監聽這些事件,如果沒有的來源是公認的,觸發回退:

var sources = document.querySelectorAll('source'); 
 
var source_errors = 0; 
 
for (var i = 0; i < sources.length; i++) { 
 
    sources[i].addEventListener('error', function(e) { 
 
    if (++source_errors >= sources.length) 
 
     fallBack(); 
 
    }); 
 
} 
 

 
function fallBack() { 
 
    document.body.removeChild(document.querySelector('video')); 
 
    document.body.appendChild(document.createTextNode('No video with supported media and MIME type found')); 
 
}
<video controls> 
 
    <source src="foo.bar" type="video/foo" /> 
 
    <source src="bar.foo" type="video/bar" /> 
 
</video>

0

@ Jaw.sh有兩個常用的備用選項。

  1. Fallback to Flash version of the video.
  2. Fallback to a direct download of the video.

今天的瀏覽器(歌劇我不知道,並沒有真正關心的),都能夠播放MP4 H.264。所以你不應該太擔心不兼容問題,除非你的觀衆大多住在中國。

+1

您應該閱讀第一個鏈接接受的答案下的評論:「請記住,即使Flash本身無法原生讀取視頻,也不會在Flash瀏覽器中使用Flash後備功能,並且在第二個鏈接中:」使用直接鏈接後備如果瀏覽器不支持html5(某些移動設備):「。 OP想知道是否沒有識別源類型,所以它假定瀏覽器支持'videoElement' – Kaiido

+0

Flash可以在任何非移動瀏覽器中播放,前提是他們擁有無處不在的Adobe插件。是的,移動不直接下載,同意。所以讓我重讀一下這個問題......是的,OP沒有提到移動設備。讓我戴上我的老花鏡....不過還是沒有看到它順帶提到。移動是一種完全不同的複雜性,OP擔心諸如後備這樣的基本問題。 – zer00ne

+1

不,我的意思是,如果瀏覽器確實支持'