者 | 潘文捷
編輯 | 黃月
電視劇《開端》2022開年即吸引了不少觀眾的目光,劇中主人公一次次從公交車上驚醒,一次次地嘗試制止公交車爆炸,拯救無(wú)辜生命,又一次次失敗,他們一次次地向警察解釋,一次次被質(zhì)疑,再一次次陷入循環(huán)中。
這種多次回到過(guò)去、重復(fù)某一時(shí)間段人生的影視劇設(shè)定并不少見,從上世紀(jì)90年代的電影《土撥鼠之日》到2011年杰克·吉倫哈爾主演的《源代碼》,主人公都因?yàn)榉N種原因陷入類似的循環(huán)往復(fù)之中,既包含著某種逃不出去的折磨,又有著可以重回過(guò)去、做出改變的機(jī)會(huì)。
《開端》的主角用“循環(huán)”一詞解釋自己的經(jīng)歷,故事發(fā)生的主要空間又是公交車,日復(fù)一日重復(fù)同樣的路線,本身就是一個(gè)常見的循環(huán)意象。《開端》劇中人物也提到了《夏日大作戰(zhàn)》《穿越時(shí)空的少女》《你的名字》等日本動(dòng)漫,其中《穿越時(shí)空的少女》是日本小說(shuō)家筒井康隆1967年的一部小說(shuō),故事包含了自愿進(jìn)入時(shí)間循環(huán)的情節(jié),曾被多次改編,在2006年動(dòng)畫電影上映之前基本不為西方世界知曉。
時(shí)間循環(huán)的設(shè)定其實(shí)挺常見。《開端》屬于時(shí)間循環(huán)的一個(gè)明確類型,即“土撥鼠日環(huán)”。這一名稱來(lái)源于1993年的美國(guó)電影《土撥鼠之日》(Groundhog Day),雖然該影片并非使用此種設(shè)定的第一部作品,卻在流行文化中確立起了一種時(shí)間循環(huán)的套路。
在《土撥鼠之日》中,氣象播報(bào)員菲爾來(lái)到賓夕法尼亞一個(gè)小鎮(zhèn)上報(bào)道當(dāng)?shù)氐耐翐苁笕諔c典,卻被永遠(yuǎn)地困在了2月2日,也就是土撥鼠之日這一天。“土撥鼠日環(huán)”的特征在于,角色陷入時(shí)間循環(huán)的情節(jié),注定要一遍又一遍地重復(fù)一段時(shí)間(通常是一天),直到某些事情得到糾正。在《開端》里,這個(gè)需要糾正的事情就是公交車爆炸。
“土撥鼠日環(huán)”設(shè)定的另一方面在于“抗?jié)i漪效應(yīng)記憶”,這意味著通常只有一個(gè)角色或一組角色的大腦不受重置的影響,可以保留每一次循環(huán)的記憶——只有他們能夠意識(shí)到究竟發(fā)生了什么,而其他人只能記住新一輪循環(huán)中的現(xiàn)實(shí)。在電視劇《開端》里,主角等人早在車輛爆炸之前就開始報(bào)警,并說(shuō)出了相當(dāng)詳細(xì)的內(nèi)情,引發(fā)了各方面的懷疑。沒(méi)等警官自我介紹,主人公就叫出了他的名字,甚至說(shuō)出了他右手無(wú)力等特點(diǎn),更令當(dāng)事人大吃一驚。可以說(shuō),主角通過(guò)在多次循環(huán)的屢次失敗中獲取經(jīng)驗(yàn),把“后見之明”轉(zhuǎn)化為在當(dāng)下這個(gè)循環(huán)里的“先見之明”。他們一方面擁有大量的信息儲(chǔ)備,在觀眾看來(lái)有著因信息差獲得的碾壓式快感,另一方面也倍感孤獨(dú),沒(méi)有人知道他們重復(fù)了多少次這一天的生活,困在其中無(wú)法逃脫。我們?cè)凇锻翐苁笾铡防锟匆姺茽柟聠螣o(wú)助,在《開端》里見證共同進(jìn)入循環(huán)的男女主角感情迅速升溫、相依為命,都源于“抗?jié)i漪效應(yīng)記憶”的設(shè)定。
陷入時(shí)間循環(huán)之人究竟如何才能從中逃脫呢?《土撥鼠之日》里的菲爾發(fā)現(xiàn),就連他自殺都無(wú)法終止循環(huán),于是開始進(jìn)行各種人生嘗試,比如搶劫運(yùn)鈔車、偷走土撥鼠、掌握冰雕藝術(shù)、利用循環(huán)的時(shí)間學(xué)琴知道可以彈奏拉赫瑪尼諾夫的程度,并不斷耍花招向一位女士求愛卻屢被識(shí)破。直到他開始豐富自己,幫助他人,并真正地獲得了這位女士的青睞,時(shí)間循環(huán)才最終得以打破。在土撥鼠日環(huán)的設(shè)定中,角色從連續(xù)的循環(huán)中學(xué)習(xí),由此越來(lái)越深入地了解他們的環(huán)境和周圍的人物。菲爾在循環(huán)中度過(guò)了多少天?按照英國(guó)《獨(dú)立報(bào)》作者Christopher Hooton的統(tǒng)計(jì),我們?cè)陔娪爸锌梢钥吹狡渲?7天,但實(shí)際需要的時(shí)間可能在30年(本劇導(dǎo)演、編劇哈羅德·雷米斯的估計(jì))到一萬(wàn)年(根據(jù)佛教教義靈魂進(jìn)化到下一層次所需要的時(shí)間)之間。
至于主人公為什么會(huì)進(jìn)入時(shí)間循環(huán),《土撥鼠之日》并沒(méi)有給出合理的解答。想要做出令人信服的解釋,讓這一設(shè)定能夠自圓其說(shuō),那么故事常常會(huì)往科幻方向發(fā)展。電影《源代碼》給出的答案是“科學(xué)”——科學(xué)家利用特殊儀器,柯爾特可以反復(fù)“穿越”到列車爆炸案中遇害的死者身體里,每次都只能回到爆炸發(fā)生前的8分鐘。
由于“土撥鼠日環(huán)”是一個(gè)不斷探索發(fā)現(xiàn)、解決問(wèn)題的過(guò)程,敘述變得如同一個(gè)互動(dòng)謎題,使得這一設(shè)定尤為適合推理作品。西澤保彥《死了七次的男人》就是這樣的設(shè)定,因?yàn)椤拔摇笨梢匝h(huán)九次,而外公在這九次里反反復(fù)復(fù)死了七次,所以“我”必須找到讓外公活下來(lái)的方法。在國(guó)產(chǎn)推理作品中,張小貓的《逆時(shí)偵查組》也采用了類似的設(shè)定——主角擁有能夠不定期重復(fù)經(jīng)歷五次同一天的逆時(shí)能力,他依靠這種能力一次次回到案發(fā)之前進(jìn)行偵查,屢屢破獲重案,在他人眼里如有神助。這些做法也可以被納入“新本格”之中。經(jīng)典推理小說(shuō)的邏輯已經(jīng)用了超過(guò)百年,用時(shí)間循環(huán)這類來(lái)自科幻、奇幻作品的特殊邏輯,替換或更新傳統(tǒng)套路,也為推理小說(shuō)注入了新的生機(jī)。
如果說(shuō)本格派推理追求的是邏輯的極致,社會(huì)派推理的重點(diǎn)當(dāng)然是闡述社會(huì)議題。從《開端》里我們看到,隨著循環(huán)一次次發(fā)生,各個(gè)次要角色的身份也被一一解鎖,他們有著自己的經(jīng)歷背景、處于特定的社會(huì)階層、與某些社會(huì)事件掛鉤,這個(gè)科幻推理故事由此具備了更多的社會(huì)派元素。除了次要角色的身份以外,一次次進(jìn)入循環(huán)的男主角自身也在發(fā)生改變,比如開始反思自己崇尚的暴力美學(xué)是否有害于社會(huì)。
也別忘了,《開端》男主角的身份是一位游戲架構(gòu)師!“土撥鼠日環(huán)”不僅出現(xiàn)在小說(shuō)和影視劇中,和游戲的關(guān)聯(lián)也是極其密切的。從角色的角度來(lái)說(shuō),任何可存檔的游戲都能被視為玩家手動(dòng)激活的“土撥鼠日環(huán)”,畢竟他們必須一遍遍地重復(fù),在相同的劇情里學(xué)習(xí)探索,直到做了正確的事情才得以通關(guān)。無(wú)怪乎《開端》的主角總是把進(jìn)入循環(huán)的經(jīng)歷和游戲進(jìn)行比較。
“土撥鼠日環(huán)”看似是在利用時(shí)間進(jìn)行游戲,背后其實(shí)是不同的時(shí)間觀念在發(fā)揮作用。
世界上的許多文化中都有時(shí)間循環(huán)的痕跡——佛教里有輪回之說(shuō);中國(guó)傳統(tǒng)文化中也有類似的看法,一些中國(guó)思想家認(rèn)為宇宙是循環(huán)的生命體,死亡意味著重生,這也體現(xiàn)為四季的循環(huán);古代的西方人也從星星的周期運(yùn)動(dòng)里體悟到了類似的規(guī)律。
而基督徒認(rèn)為時(shí)間是線性的,歷史朝著一個(gè)確定的目標(biāo)發(fā)展,這被稱為teleos(終極目標(biāo))。到了現(xiàn)代工業(yè)社會(huì),鐘表的時(shí)間以統(tǒng)一的標(biāo)準(zhǔn)——1小時(shí)為60分鐘——作為切割,可以精準(zhǔn)計(jì)算,時(shí)間被認(rèn)為是均質(zhì)的、不可逆的。或許可以推測(cè),故宮之所以設(shè)有專門的鐘表館,也與鐘表進(jìn)入中國(guó)、公元紀(jì)年被采用,中國(guó)人傳統(tǒng)的時(shí)間觀念發(fā)生翻天覆地變化有關(guān)。
尼采最著名的思想之一是永恒輪回,對(duì)于海德格爾來(lái)說(shuō),永恒輪回的問(wèn)題是“最繁重的思想”,也許是“思想的思想”。尼采拒絕時(shí)間的線性概念,他認(rèn)為人死后不會(huì)去到另一個(gè)地方,我們實(shí)際上是在一遍又一遍地重溫生活;我們?cè)谶^(guò)去無(wú)數(shù)次地體驗(yàn)過(guò)我們現(xiàn)在所過(guò)的生活,在未來(lái)也將經(jīng)歷無(wú)數(shù)次。
這種理念聽起來(lái)好像會(huì)將我們帶入一種虛無(wú),就像當(dāng)代社會(huì)打工人日復(fù)一日、年復(fù)一年做著同樣的工作,看著套路重復(fù)的肥皂劇,聽著套路重復(fù)的網(wǎng)絡(luò)神曲,有過(guò)很多等待和希望,但是最終什么都沒(méi)有發(fā)生。在尼采這里,永恒輪回并不是這么一回事。與期待來(lái)世拯救的基督徒相反,尼采不認(rèn)為有比此世更重要的時(shí)間與世界。他提倡恢復(fù)古代的時(shí)間觀念,由于時(shí)間循環(huán)重復(fù),所以我們生命中的“每一個(gè)痛苦、每一個(gè)快樂(lè)、每一個(gè)念頭、每一個(gè)嘆息和每一個(gè)難以言喻的小事或大事”都必須以同樣的順序返回自身,那么我們必須想好自己是否渴望這件事一次又一次地發(fā)生,這意味著,即便是瞬間也無(wú)比重要,也就是說(shuō),此生的生命就是一切。
參考資料:
《思想史:從火到弗洛伊德》[英] 彼得·沃森 著 胡翠娥 譯 譯林出版社 2018
《世界哲學(xué)簡(jiǎn)史》[美] 羅伯特·C·所羅門 著 梅嵐 譯 后浪丨江西人民出版社 2017
Christopher Hooton: Groundhog Day is 25 years old but fittingly eternal
https://www.independent.co.uk/arts-entertainment/films/features/groundhog-day-2018-25-years-anniversary-date-film-bill-murray-andie-mcdowell-harold-ramis-days-time-loop-a8191111.html
Time Travel in Popular Media: Essays on Film, Television, Literature and Video Gamesby Matthew Jones(Editor),Joan Ormrod(Editor)McFarland & Company (March 13, 2015)
網(wǎng)頁(yè)中添加視頻、聲音、動(dòng)畫等,可以增強(qiáng)用戶體驗(yàn)。在HTML5之前,為網(wǎng)頁(yè)添加多媒體的唯一辦法,就是使用第三方的插件(如,Adobe Flash等)。
HTML5中,提供了對(duì)多媒體的原生支持,只需通過(guò) video 元素,就可以向網(wǎng)頁(yè)嵌入視頻、電影或音頻資源,通過(guò) audio 元素向網(wǎng)頁(yè)嵌入音頻資源,省時(shí)省力。
HTML中嵌入視頻和音頻代碼
在HTML5時(shí)代,在網(wǎng)頁(yè)中嵌入視頻非常簡(jiǎn)單,只需要一個(gè) video 元素,并設(shè)置它的 src 屬性,使其鏈接一個(gè)視頻地址就可以完全搞定了,這個(gè)太esay了
<video src="media/vedio.mp4"></video>
把這個(gè)網(wǎng)站在IE8中打開一看,網(wǎng)站上除了一片空白外,什么也沒(méi)有,這是為什么呢?
原來(lái) video 是HTML5最新引入的元素,并不是所有瀏覽器都支持它,IE8及以下版本都無(wú)法識(shí)別 video 標(biāo)簽。如果瀏覽器不識(shí)別 video標(biāo)簽,則會(huì)忽略它,當(dāng)做什么都沒(méi)有。這就是網(wǎng)站上一片空白的原因。
這個(gè)問(wèn)題好解決,只需在 video 標(biāo)簽之間放置文本信息,不支持 video 標(biāo)簽的老瀏覽器,會(huì)顯示 video 標(biāo)簽之間的文本信息,以提示用戶瀏覽器不支持 video,就這么簡(jiǎn)單!
<video src="media/vedio.mp4">
你的瀏覽器已經(jīng)老掉牙了,不支持video,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!
</video>
在IE8上打開一看,確實(shí)顯示了提示文本,這下好多了,至少用戶知道自己的瀏覽器不能播放視頻,該換瀏覽器了。
下載了Opera瀏覽器的最新版本25.0,打開一看,怎么還是一片空白外!Opera瀏覽器明明是支持video標(biāo)簽的,那又是為什么呢?
這個(gè)就得從視頻的編碼格式說(shuō)起了。video 元素支持三種視頻格式:Ogg、MP4、WebM。
Ogg是帶有Theora視頻編碼和Vorbis音頻編碼的文件,后綴名為 .ogg;MP4是帶有H.264視頻編碼和AAC音頻編碼的MP4文件,后綴名為 .mp4;WebM是VP8視頻編碼和Vorbis音頻編碼的文件,后綴名為 .webm。
這個(gè)Opera瀏覽器呢,它可以支持ogg,但不支持mp4。由于Opera支持video標(biāo)簽,故video標(biāo)簽之間的文本信息沒(méi)有顯示出來(lái),但它不支持ogg,所以就不進(jìn)行播放,最終導(dǎo)致頁(yè)面出現(xiàn)一片空白。這下可怎么辦呢?
其實(shí)辦法有的是,我們可以從網(wǎng)上下載一副圖像,放到視頻播放窗口,如果視頻無(wú)法播放,就顯示這張圖片,是不是更好呢?從網(wǎng)上下載一張美女圖片,干脆叫beauty.jpg吧。那這個(gè)圖像怎么添加到視頻窗口呢?
video標(biāo)簽有個(gè)poster 屬性,就是專門在視頻窗口放置圖片的。poster是一個(gè)video的占位符,無(wú)論什么情況下,只要視頻還沒(méi)有播放(視頻下載過(guò)程中、視頻不存在、不支持該視頻類型、用戶點(diǎn)擊播放按鈕前),就會(huì)顯示該圖像,可以看做是視頻播放之前插入的宣傳畫或海報(bào)。
<video src="media/vedio.mp4" poster="img/beauty.jpg">
你的瀏覽器已經(jīng)老掉牙了,不支持video,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!
</video>
在Opera瀏覽器上刷新一下,真的有一個(gè)美女沖著自己微笑呢。雖然視頻沒(méi)有播放出來(lái),這回心情卻是好多了。
那我可不能一天到晚只看美女呀,視頻還是還是要想辦法播放出來(lái)的。既然Opera瀏覽器不支持mp4,我們就換成需要ogg吧,這樣就肯定沒(méi)問(wèn)題了。
我想了想,這個(gè)辦法不好,萬(wàn)一某個(gè)瀏覽器只支持支持ogg,不支持mp4呢。這年頭,什么都缺,就是不缺點(diǎn)子,隨便在網(wǎng)上一搜,辦法就有了。
在 video 元素中添加 source 元素,就可以解決這個(gè)問(wèn)題。在source 元素中,通過(guò) src 屬性指定視頻的地址,通過(guò) type 屬性指定視頻的類型,以幫助瀏覽器決定是否能播放該視頻。并且,在 video 元素中可以添加任意多個(gè)source 元素,讓不同的 source 元素鏈接到不同的視頻文件。
這樣的話,當(dāng)瀏覽器發(fā)現(xiàn) video 元素時(shí),首先會(huì)查看它本身是否定義了 src 屬性。如果沒(méi)有,就會(huì)檢查 source 元素。瀏覽器會(huì)逐個(gè)查看這些視頻源,直到找到一個(gè)可以播放的視頻。一旦找到,就會(huì)播放它并忽略其他的視頻源。我們干脆添加兩個(gè)source,一個(gè)是mp4,一個(gè)是ogg,這下視頻是一定能播放出來(lái)了。
<video poster="img/beauty.jpg">
<source src="media/vedio.mp4" type="video/mp4">
<source src="media/vedio.ogg" type="video/ogg">
你的瀏覽器已經(jīng)老掉牙了,不支持video,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!
</video>
在Opera瀏覽器上又刷新一下,只有美女沖著我微笑,視頻還是沒(méi)播放出來(lái)。唉,太粗心了,忘記添加播放視頻的控件了。
在video標(biāo)簽中,通過(guò)添加controls 屬性來(lái)為視頻添加播放控件,方便用戶執(zhí)行播放、暫停操作和音量控制。
<video poster="img/beauty.jpg" controls>
(此處略去500字…)
</video>
在Opera瀏覽器上又刷新一下,效果真的不一樣,這次不僅看到美女,還看到了視頻控件。用鼠標(biāo)猛戳一下那個(gè)播放按鈕,哈哈,不錯(cuò),真的聽到美妙的旋律。我們的ogg文件,終于播放出來(lái)了,讓我們好好享受一下吧O(∩_∩)O。
聽了一會(huì),忽然一想,不對(duì)呀,我剛才點(diǎn)了播放按鈕后,等了半天才聽到聲音。能不能我一點(diǎn)播放按鈕,就立即播放呢?
原來(lái)視頻也是需要下載緩存的,點(diǎn)擊播放按鈕后,首先緩存,然后才播放的。那能不能在頁(yè)面加載的同時(shí)就緩存呢。這樣,用戶點(diǎn)擊播放后,就不必等待了。
這當(dāng)然可以,在video標(biāo)簽中,通過(guò)添加preload屬性來(lái)為視頻添加預(yù)加載功能,在頁(yè)面加載的同時(shí)加載視頻。
<video poster="img/beauty.jpg" controls preload>
(此處略去500字…)
</video>
關(guān)于 preload 屬性,稍微再啰嗦一點(diǎn),就是可以把它設(shè)置為 metadata,讓瀏覽器僅僅預(yù)加載視頻的基本信息,如尺寸、時(shí)長(zhǎng)、以及一些關(guān)鍵的幀。這樣的話,在開始播放之前,瀏覽器可以提前計(jì)算視頻的顯示尺寸。
既然一切都OK了!讓我們看看mp4是不是能正常播放。下載最新版的Google Chrome 38.0瀏覽器,打開網(wǎng)頁(yè),猛戳一下播放按鈕。
等等~,等等~,不對(duì),怎么只有聲音沒(méi)有畫面,明明是mp4格式的文件呀?使用暴風(fēng)影音試了一下,是有畫面的呀!
辛辛苦苦又在網(wǎng)上搜了一番,花了整整586秒,終于找到了答案。mp4視頻需要h.264編碼格式才會(huì)有圖像的。
找了一個(gè) h.264 編碼格式的 mp4 試了一下,不錯(cuò),確實(shí)有圖像了!看了半天,原來(lái)是一部老外的電影,嘰里咕嚕一陣,一句話也沒(méi)聽懂。那O(∩_∩)O~,能否提供中文字幕呢,這樣就不必費(fèi)老大勁去聽了!
HTML5中,通過(guò)在video元素添加track元素為視頻添加字幕。字幕文件有兩種格式:WebVTT和TTML。WebVTT是Web視頻文本軌跡(Web Video Text Track),是UTF-8編碼格式的文本文件;TTML是時(shí)序文本標(biāo)記語(yǔ)言(Timed Text Markup Language),是XML格式的文件。兩種文件的具體格式,已經(jīng)超出我們的討論范圍。
video元素支持添加多個(gè)track元素,不同的track元素鏈接到不同的字幕文件。用戶可以在各個(gè)字幕間進(jìn)行切換。
<video poster="img/beauty.jpg" controls preload>
<track src="en_track.vtt" kind="subtitles" srclang="en" label="English" default>
<track src="cn_track.vtt" kind="captions" srclang="zh" label="簡(jiǎn)體中文">
</video>
track元素中,src屬性指定字幕文件的URL;srclang屬性字幕文件的語(yǔ)言類型,若kind 屬性值是 "subtitles" 時(shí),該屬性必需的;label 屬性指定字幕標(biāo)簽,每個(gè)字幕元素必需設(shè)置一個(gè)唯一不重復(fù)的標(biāo)簽,切換字幕時(shí),會(huì)顯示標(biāo)簽的名稱;kind指定字幕內(nèi)容類型,只能是subtitles、captions、descriptions、chapters、metadata 之一;default屬性指定是否是默認(rèn)字幕,如果一個(gè)都沒(méi)指定,將不會(huì)自動(dòng)顯示字幕。
除了字幕外,我還希望對(duì)視頻進(jìn)行過(guò)多的控制,比如讓視頻自動(dòng)播放、循環(huán)播放、默認(rèn)靜音,以及視頻窗口的尺寸等等,這些都能做到嗎?
這已經(jīng)不是什么事了,video 元素已經(jīng)提供了相關(guān)屬性,根據(jù)需要設(shè)置相應(yīng)的屬性就可以了。這些屬性及含義見表 23:
HTML中嵌入視頻和音頻代碼
哦,原來(lái)這么簡(jiǎn)單呀!那就到此為止吧,網(wǎng)頁(yè)中嵌入視頻的全部代碼都在這里,就打包給你吧!
<video width="300" poster="img/beauty.jpg" controls preload autoplay loop muted>
<source src="media/vedio.mp4">
<source src="media/vedio.ogg">
<track src="en_track.vtt" kind="subtitles" srclang="en" label="English" default>
<track src="cn_track.vtt" kind="captions" srclang="zh" label="簡(jiǎn)體中文">
你的瀏覽器已經(jīng)老掉牙了,不支持video,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!
</video>
睜大眼睛一看,卻只有7行代碼。然而,就這區(qū)區(qū)7行代碼,可把他折磨得夠嗆。
看著這一切都全部搞定,他仰望著天空,長(zhǎng)長(zhǎng)呼了一口氣,顯得是那么的放松,那么的愜意。此時(shí),他閉上眼睛,在自己的夢(mèng)幻世界里遨游!
有了在網(wǎng)頁(yè)中嵌入視頻的經(jīng)歷,要在網(wǎng)頁(yè)中嵌入音頻,那簡(jiǎn)直就是小菜一碟了。只要把vedio元素?fù)Q成 audio 元素,就全部搞定。
但需要了解的是,audio 所支持的音頻格式只有Ogg Vorbis、mp3 和 wav。還要知道,由于音頻沒(méi)有畫面,也就沒(méi)有 width、height、poster 屬性,而其他屬性都支持,并且跟視頻的含義相同。
網(wǎng)頁(yè)中嵌入音頻的代碼如下:
<audio controls preload autoplay loop muted>
<source src="media/audio.mp3">
<source src="media/audio.wav">
<source src="media/audio.ogg">
你的瀏覽器已經(jīng)老掉牙了,不支持audio,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!
</audio>
希望可以通過(guò)這篇文章,能夠給你得到幫助。(感謝一鍵三連)
學(xué)習(xí)深入理解HTML5的audio和video。
在HTML5播放一個(gè)視頻,很簡(jiǎn)單,只需要一行代碼:
<video src="resources/dadaqianduan.mp4" autoplay></video>
了解視頻文件格式:
Audio Video InterLeaved .avi
Flash Video .flv
MPEG-4 .mp4
Matroska .mkv
Ogg .ogv
音頻和視頻編解碼器
編解碼器可以理解為一些算法代碼,用于處理視頻,音頻或者其元數(shù)據(jù)的編碼格式。對(duì)音頻或視頻文件進(jìn)行編碼,可使得文件大大縮小,便于在因特網(wǎng)上傳輸。
音頻編解碼器:
MP3,使用ACC音頻
Wav,使用Wav音頻
Ogg,使用OggVorbis音頻
視頻編解碼器:
MP4,使用H.264視頻,AAC音頻
WebM,使用VP8視頻,OggVorbis音頻
Ogg,使用Theora視頻,OggVorbis音頻
audio元素支持的音頻格式MP3,Wav,Ogg;video元素支持的格式MP4,WebM,Ogg。
在HTML5中audio和video元素提供的接口包含了一系列的屬性,方法和事件,這些接口可以幫助開發(fā)完成對(duì)音頻和視頻的操作。
那么如何在頁(yè)面中添加音頻和視頻呢?
音頻
<audio src="resources/audio.mp3">
</audio>
視頻
<video src="resources/video.mp4" width="600" height="200">
</video>
因?yàn)楦鞣N瀏覽器對(duì)音頻和視頻的編解碼器的支持不一樣,為了能夠在各種瀏覽器中正常使用,可以提供多個(gè)源文件。
<audio src="resources/audio.mp3">
<source src="song.ogg" type="audio/ogg">
<source src="song.mp3" type="audio/mpeg">
</audio>
<video src="resources/video.mp4" width="600" height="200" controls>
<source src="movie.ogg" type="video/ogg codes=`theora,vorbis` ">
<source src="movie.mp4" type="video/mp4">
</video>
使用source元素替代了audio或video的標(biāo)簽屬性src。
元素的標(biāo)簽特性
<video src="resources/video.mp4" autoplay></video>
<video src="resources/video.mp4" controls></video>
<video src="resources/video.mp4" controls loop></video>
<video src="resources/video.mp4" controls preload="auto"></video>
<video src="resources/video.mp4" controls poster="images/none.jpg"</video>
<video src="resources/video.mp4" width="600" height="200" controls></video>
接口屬性
<!DOCTYPEHTML>
<html>
<head>
<meta charset="utf-8">
<title>視頻播放時(shí)的快進(jìn)</title>
<script type="text/javascript">
function Forward() {
var el=document.getElementById("myPlayer");
var time=el.currentTime;
el.currentTime=time+300;
}
</script>
</head>
<body>
<video id="myPlayer" src="resources/video.mp4" width="600" height="200" controls>
</video>
<br/>
<input type="button" value="快進(jìn)" onclick="Forward()"/>
</body>
</html>
接口方法
代碼示例使用接口:
<!DOCTYPEHTML>
<html>
<head>
<meta charset="utf-8">
<title>播放與暫停</title>
<script type="text/javascript">
var videoEl=null;
function Play() {
videoEl.play();
}
function Pause() {
videoEl.pause();
}
window.onload=function(){
videoEl=document..getElementById("myPlayer");
}
</script>
</head>
<body>
<video id="myPlayer" width="600">
<source src="resources/video.mp4" type="video/mp4">
</video><br>
<input type="button" value="播放" onclick="Play()"/>
<input type="button" value="暫停" onclick="Pause()"/>
</body>
</html>
捕獲事件的方式
捕獲事件有兩種方法:一種是添加事件句柄,一種是監(jiān)聽。
<video id="myPlayer" src="resources/video.mp4" width="500" onplay="video_playing()">
</video>
// 監(jiān)聽方式
var videoEl=document.getElementById("myPlayer");
videoEl.addEventListener("play",video_playing);
接口事件
定義全局的視頻對(duì)象
代碼如下:
<script type="text/javascript">
// 定義全局視頻對(duì)象
var videoEl=null;
// 網(wǎng)頁(yè)加載完畢后,讀取視頻對(duì)象
window.addEventListener("load", function() {
videoEl=document.getElementById("myPlayer")
});
</script>
添加進(jìn)度顯示功能
代碼如下:
<script type="text/javascript">
function Progress() {
var el=document.getElementById("progress");
el.style.width=(videoEl.currentTime/videoEl.duration)*720 + "px"
document.getElementById("info").innerHTML=s2time(videoEl.currentTime) + "/" + s2time(videoEl.duration);
}
function s2time(s) {
var m=parseFloat(s/60).toFixed(0);
s=parseFloat(s%60).toFixed(0);
return (m<10?"0"+m:m)+":"+(s<10?"0"+s:s);
}
window.addEventListener("load",function(){videoEl.addEventListener("timeupdate",Progress)});
window.addEventListener("load",Progress)
添加靜音和調(diào)節(jié)音量的功能
消除靜音videoEl.muted=false;靜音效果videoEl.muted=true;videoEl.volume=e.value;修改音量的值。
添加慢進(jìn)和快進(jìn)功能
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。