HTML 5視頻標(biāo)簽全屬性詳解
當(dāng)今,在網(wǎng)頁上嵌入視頻且所有用戶不管使用任何瀏覽器,或者操作系統(tǒng)都能看到的唯一可靠方法是使用Flash。這需要Adobe Flash插件,并且結(jié)合<object>和<embed>標(biāo)簽。但HTML 5的出現(xiàn)改變了這一事實(shí),其中視頻標(biāo)簽<Video>的出現(xiàn)無疑是HTML 5的一大亮點(diǎn)。(相關(guān)文章推薦:使用HTML 5視頻標(biāo)簽注意事項(xiàng))
51CTO推薦專:HTML 5 下一代Web開發(fā)標(biāo)準(zhǔn)
Video標(biāo)簽介紹
大多數(shù)用戶已經(jīng)安裝了Flash插件(事實(shí)上,大概95%的上網(wǎng)用戶都裝有Flash的某個版本),但HTML 5的支持者正在推動一個開放的,不需要任何插件的視頻標(biāo)準(zhǔn)。這就是HTML 5的新標(biāo)簽<video>帶來的構(gòu)想,他提供了一個嵌入視頻(以及與其交互)而不需要類似Flash的私有插件的方法。
不幸的是,視頻并非那么簡單。不僅僅是瀏覽器需要理解<video>標(biāo)簽,而且需要一個必要的編碼譯碼器來播放視頻。明顯的解決方法只能是HTML 5規(guī)范的締造者們選擇一個視頻編碼譯碼器,并且讓每一個瀏覽器制造商執(zhí)行。
總之,這就是所推薦的打算。同時,這也是引起混亂的導(dǎo)火索。對于各種各樣編碼譯碼器的爭論就已經(jīng)很煩雜了,但更悲劇的事情是,瀏覽器制造商們還不能就此達(dá)成統(tǒng)一。蘋果不愿意使用提議的Ogg Theora編碼譯碼器,但Opera和Mozilla也不愿意支付由于他們的瀏覽器裝載H.264編碼譯碼器而造成的許可費(fèi)用。Google同時支持兩者,微軟面對爭論,遠(yuǎn)遠(yuǎn)的置身事外,因?yàn)樗F(xiàn)在根本沒有計劃去支持HTML 5的視頻元素。
面對瀏覽器制造商的僵持局面,HTML 5善意的獨(dú)裁者Ian Hickson甩了甩他的手并說到去他媽的。所以HTML 5規(guī)范中沒有特別指名或規(guī)定的視頻編碼解碼器。”好吧,引用到這兒。
如今的情況是,微軟終于陷進(jìn)去了,但很悲劇的是,在IE 9中只支持H.264。同時,Googe終于在I/O大會上發(fā)布了開源的視頻封裝格式webM和視頻編碼格式VP8。Opera、Mozilla、Chrome宣布將完全支持VP8,IE宣布部分支持(需要裝一個插件,但如果我沒記錯的話,HTML 5的一個愿景就是脫離瀏覽器插件,微軟真是讓人覺得悲劇)。
蘋果決定不支持VP8,喬布斯認(rèn)為VP8在質(zhì)量或效率方面不如H.264,不能滿足其產(chǎn)品的要求。另外最新消息表明VP8還有可能牽扯到專利的問題(如果真的侵犯專利的話,Opera和Firefox估計馬上會無視VP8的)。
說了這么多,其實(shí)說到底就是,現(xiàn)在如果要在頁面中使用video標(biāo)簽,需要考慮三種情況,支持Ogg Theora或者VP8(如果這玩意兒沒出事的話)的(Opera、Mozilla、Chrome),支持H.264的(Safari、IE 9、Chrome),都不支持的(IE6、7、8)。好吧,現(xiàn)在讓我們從技術(shù)層面來認(rèn)識HTML 5的視頻,包括video標(biāo)簽的使用,視頻對象可以用到的媒介屬性和方法,以及媒介事件。
#p#
Video標(biāo)簽的使用
Video標(biāo)簽含有src、poster、preload、autoplay、loop、controls、width、height等幾個屬性,以及一個內(nèi)部使用的標(biāo)簽<source>。Video標(biāo)簽內(nèi)除了可以包含<source>標(biāo)簽外,還可以包含當(dāng)指定的視頻都不能播放時,返回的內(nèi)容。
(1) src屬性和poster屬性
你能想象src屬性是用來干啥的。跟<img>標(biāo)簽的一樣,這個屬性用于指定視頻的地址。而poster屬性用于指定一張圖片,在當(dāng)前視頻數(shù)據(jù)無效時顯示(預(yù)覽圖)。視頻數(shù)據(jù)無效可能是視頻正在加載,可能是視頻地址錯誤等等。
(2) preload屬性
這個屬性也能通過名字了解用處,此屬性用于定義視頻是否預(yù)加載。屬性有三個可選擇的值:none、metadata、auto。如果不使用此屬性,默認(rèn)為auto。
None:不進(jìn)行預(yù)加載。使用此屬性值,可能是頁面制作者認(rèn)為用戶不期望此視頻,或者減少HTTP請求。
Metadata:部分預(yù)加載。使用此屬性值,代表頁面制作者認(rèn)為用戶不期望此視頻,但為用戶提供一些元數(shù)據(jù)(包括尺寸,第一幀,曲目列表,持續(xù)時間等等)。
Auto:全部預(yù)加載。
(3) autoplay屬性
又是一個看名字知道用處的屬性。Autoplay屬性用于設(shè)置視頻是否自動播放,是一個布爾屬性。當(dāng)出現(xiàn)時,表示自動播放,去掉是表示不自動播放。
注意,HTML中布爾屬性的值不是true和false。正確的用法是,在標(biāo)簽中使用此屬性表示true,此時屬性要么沒有值,要么其值恒等于他的名字(此處,自動播放為<video autoplay />或者<video autoplay=”autoplay” />);而在標(biāo)簽中不使用此屬性表示false(此處不進(jìn)行自動播放為<video />)。
#p#
(4) loop屬性
一目了然,loop屬性用于指定視頻是否循環(huán)播放,同樣是一個布爾屬性。
(5) controls屬性
Controls屬性用于向?yàn)g覽器指明頁面制作者沒有使用腳本生成播放控制器,需要瀏覽器啟用本身的播放控制欄。
控制欄須包括播放暫??刂疲シ胚M(jìn)度控制,音量控制等等。
每個瀏覽器默認(rèn)的播放控制欄在界面上不一樣。由于我瀏覽器的詭異問題,F(xiàn)irefox和Safari的Video標(biāo)簽不正常,所以這兩個只能在網(wǎng)上找截圖了。
(6) width屬性和height屬性
屬于標(biāo)簽的通用屬性了,這個不用多說。
(7) source標(biāo)簽
Source標(biāo)簽用于給媒體(因?yàn)閍udio標(biāo)簽同樣可以包含此標(biāo)簽,所以這兒用媒體,而不是視頻)指定多個可選擇的(瀏覽器最終只能選一個)文件地址,且只能在媒體標(biāo)簽沒有使用src屬性時使用。
瀏覽器按source標(biāo)簽的順序檢測標(biāo)簽指定的視頻是否能夠播放(可能是視頻格式不支持,視頻不存在等等),如果不能播放,換下一個。此方法多用于兼容不同的瀏覽器。Source標(biāo)簽本身不代表任何含義,不能單獨(dú)出現(xiàn)。
此標(biāo)簽包含src、type、media三個屬性。
src屬性:用于指定媒體的地址,和video標(biāo)簽的一樣。
Type屬性:用于說明src屬性指定媒體的類型,幫助瀏覽器在獲取媒體前判斷是否支持此類別的媒體格式。
Media屬性:用于說明媒體在何種媒介中使用,不設(shè)置時默認(rèn)值為all,表示支持所有媒介。你想到<style>標(biāo)簽的media屬性了么?一樣一樣一樣的。
(8) 一個完整的例子
這段代碼在頁面中定義了一個視頻,此視頻的預(yù)覽圖為poster的屬性值,顯示瀏覽器的默認(rèn)媒體控制欄,預(yù)加載視頻的元數(shù)據(jù),循環(huán)播放,寬度為900像素,高度為240像素。
第一選擇視頻地址為第一個source標(biāo)簽的src屬性值,視頻類別為Ogg視頻,視頻編碼譯碼器為Theora,音頻編碼譯碼器為Vorbis,播放媒介為顯示器;第二選擇視頻地址不再累述。如果你還要兼容IE的話,可以在最后一個source標(biāo)簽后再加上Flash播放器的標(biāo)簽集,或者使用一點(diǎn)JavaScript代碼。
【編輯推薦】