整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          熱劇《開端》的時(shí)間哲學(xué):在“土撥鼠日環(huán)”里重復(fù)生活?

          熱劇《開端》的時(shí)間哲學(xué):在“土撥鼠日環(huán)”里重復(fù)生活?

          者 | 潘文捷

          編輯 | 黃月

          電視劇《開端》2022開年即吸引了不少觀眾的目光,劇中主人公一次次從公交車上驚醒,一次次地嘗試制止公交車爆炸,拯救無(wú)辜生命,又一次次失敗,他們一次次地向警察解釋,一次次被質(zhì)疑,再一次次陷入循環(huán)中。

          這種多次回到過(guò)去、重復(fù)某一時(shí)間段人生的影視劇設(shè)定并不少見,從上世紀(jì)90年代的電影《土撥鼠之日》到2011年杰克·吉倫哈爾主演的《源代碼》,主人公都因?yàn)榉N種原因陷入類似的循環(huán)往復(fù)之中,既包含著某種逃不出去的折磨,又有著可以重回過(guò)去、做出改變的機(jī)會(huì)。

          01 土撥鼠日環(huán)

          《開端》的主角用“循環(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í)間)之間。

          02 推理和游戲

          至于主人公為什么會(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)行比較。

          03 時(shí)間的哲學(xué)

          “土撥鼠日環(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í)深入理解HTML5audiovideo

          HTML5視頻概述

          HTML5播放一個(gè)視頻,很簡(jiǎn)單,只需要一行代碼:

          <video src="resources/dadaqianduan.mp4" autoplay></video>

          了解多媒體術(shù)語(yǔ)

          了解視頻文件格式:

          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,Oggvideo元素支持的格式MP4,WebM,Ogg

          • audio元素是專門用于在網(wǎng)頁(yè)中播放網(wǎng)絡(luò)音頻的
          • video元素是專門用于在網(wǎng)頁(yè)中播放視頻的

          HTML5audiovideo元素提供的接口包含了一系列的屬性,方法和事件,這些接口可以幫助開發(fā)完成對(duì)音頻和視頻的操作。

          那么如何在頁(yè)面中添加音頻和視頻呢?

          音頻

          <audio src="resources/audio.mp3">
          </audio>

          視頻

          <video src="resources/video.mp4" width="600" height="200">
          </video>

          使用source元素

          因?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元素替代了audiovideo的標(biāo)簽屬性src

          1. src屬性用于指定媒體文件的url地址
          2. type屬性用于指定媒體文件的類型,屬性值為媒體文件的MIME類型,該屬性值還可以通過(guò)codes參數(shù)指定編碼格式

          audiovideo特性和屬性

          元素的標(biāo)簽特性

          1. src,源文件特性,用于指定媒體文件的url地址
          2. autoplay,自動(dòng)播放特性,表示媒體文件加載后自動(dòng)播放。
          <video src="resources/video.mp4" autoplay></video>
          1. controls,控制條特性,表示為視頻或音頻添加自帶的播放控制條。
          <video src="resources/video.mp4" controls></video>
          1. loop,循環(huán)特性,表示音頻或視頻循環(huán)播放。
          <video src="resources/video.mp4" controls loop></video>
          1. preload,預(yù)加載特性,表示頁(yè)面加載完成后如何加載視頻數(shù)據(jù)。
          • none表示不進(jìn)行預(yù)加載
          • metadata表示只加載媒體文件的元數(shù)據(jù)
          • auto表示加載全部視頻或音頻,默認(rèn)值為auto
          <video src="resources/video.mp4" controls preload="auto"></video>
          1. postervideo元素獨(dú)有的特性,替代內(nèi)容屬性,用于指定一副替代圖片的url地址,當(dāng)視頻不可以用時(shí),會(huì)顯示該替代圖片。
          <video src="resources/video.mp4" controls poster="images/none.jpg"</video>
          1. widthheightvideo元素獨(dú)有的特性,用于指定視頻的寬度和高度
          <video src="resources/video.mp4" width="600" height="200" controls></video>

          接口屬性

          1. currentSrc,只讀,獲取當(dāng)前正在播放或已加載的媒體文件的url地址
          2. videoWidth,只讀,video元素特有屬性,獲取視頻原始的寬度
          3. videoHeight,只讀,video元素特有屬性,獲取視頻原始的高度
          4. currentTime,獲取或設(shè)置當(dāng)前媒體播放位置的時(shí)間點(diǎn)
          5. startTime,只讀,獲取當(dāng)前媒體播放的開始時(shí)間
          6. duration,只讀,獲取整個(gè)媒體文件的播放時(shí)長(zhǎng)
          7. volume,獲取或設(shè)置媒體文件播放時(shí)的音量,取值范圍在0.00.1之間
          8. muted,獲取或設(shè)置媒體文件播放時(shí)是否靜音。true表示靜音,false表示消除靜音
          9. ended,只讀,如果媒體文件已經(jīng)播放完畢則返回true,否則返回false
          10. error,只讀,讀取媒體文件的錯(cuò)誤代碼
          11. played,只讀,獲取已播放媒體的TimesRanges對(duì)象,該對(duì)象內(nèi)容包括已播放部分的開始時(shí)間和結(jié)束時(shí)間。
          12. paused,只讀,如果媒體文件當(dāng)前是暫停或未播放則返回true,否則返回false
          13. seeking,只讀,獲取瀏覽器是否正在請(qǐng)求媒體數(shù)據(jù)
          14. seekable,只讀,獲取媒體資源已請(qǐng)求的TimesRanges對(duì)象,該對(duì)象內(nèi)容包括已請(qǐng)求部分的開始時(shí)間和結(jié)束時(shí)間
          15. networkState,只讀,獲取媒體資源的加載狀態(tài)
          16. buffered,只讀,獲取本地緩存的媒體數(shù)據(jù)的TimesRanges對(duì)象
          17. readyState,只讀,獲取當(dāng)前媒體播放的就緒狀態(tài)
          18. playbackRate,獲取或設(shè)置媒體當(dāng)前的播放速率
          19. defaultPlaybackRate,獲取或設(shè)置媒體默認(rèn)的播放速率

          視頻播放的快進(jìn)

          <!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>

          audiovideo接口方法

          接口方法

          1. load(),加載媒體文件,為播放做準(zhǔn)備。
          2. play(),播放媒體文件。
          3. pause(),暫停播放媒體文件。
          4. canPlayType(),測(cè)試瀏覽器是否支持指定的媒體類型。

          代碼示例使用接口:

          <!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>

          audiovideo事件

          捕獲事件的方式

          捕獲事件有兩種方法:一種是添加事件句柄,一種是監(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);

          接口事件

          1. play,當(dāng)執(zhí)行方法play()時(shí)觸發(fā)
          2. playing,正在播放時(shí)觸發(fā)
          3. pause,當(dāng)執(zhí)行了方法pause()時(shí)觸發(fā)
          4. timeupdate,當(dāng)播放位置被改變時(shí)觸發(fā)
          5. ended,當(dāng)播放結(jié)束后停止播放時(shí)觸發(fā)
          6. waiting,在等待加載下一幀時(shí)觸發(fā)
          7. ratechange,在當(dāng)前播放速率改變時(shí)觸發(fā)
          8. volumechange,在音量改變時(shí)觸發(fā)
          9. canplay,以當(dāng)前播放速率需要緩沖時(shí)觸發(fā)
          10. canplaythrough,以當(dāng)前播放速率不需要緩沖時(shí)觸發(fā)
          11. durationchange,當(dāng)播放時(shí)長(zhǎng)改變時(shí)觸發(fā)
          12. loadstart,當(dāng)瀏覽器開始在網(wǎng)上尋找數(shù)據(jù)時(shí)觸發(fā)
          13. progress,當(dāng)瀏覽器正在獲取媒體文件時(shí)觸發(fā)
          14. suspend,當(dāng)瀏覽器暫停獲取媒體文件,且文件獲取并不是正常結(jié)束時(shí)觸發(fā)
          15. abort,當(dāng)終止獲取媒體數(shù)據(jù)時(shí)觸發(fā)
          16. error,在獲取媒體過(guò)程中出錯(cuò)時(shí)觸發(fā)
          17. emptied,當(dāng)所在網(wǎng)絡(luò)變?yōu)槌跏蓟癄顟B(tài)時(shí)觸發(fā)
          18. stalled,在瀏覽器嘗試獲取媒體數(shù)據(jù)失敗時(shí)觸發(fā)
          19. seeking,在瀏覽器正在請(qǐng)求數(shù)據(jù)時(shí)觸發(fā)
          20. seeded,在瀏覽器停止請(qǐng)求數(shù)據(jù)時(shí)觸發(fā)

          定義全局的視頻對(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=truevideoEl.volume=e.value;修改音量的值。

          添加慢進(jìn)和快進(jìn)功能


          主站蜘蛛池模板: 国产99精品一区二区三区免费| 日韩最新视频一区二区三| 极品少妇一区二区三区四区| 奇米精品视频一区二区三区| 精品人妻码一区二区三区| 国产在线一区二区杨幂| 中文字幕精品一区二区精品| 精品无人乱码一区二区三区| 亚洲AV无码一区二区三区国产| 日韩一区二区三区在线精品| 中文字幕一区二区区免| 日韩精品一区二区三区中文精品| 国产精品无码一区二区在线| 久久久久人妻一区精品果冻| 亚洲乱码一区av春药高潮| 冲田杏梨高清无一区二区| 国产福利精品一区二区| 国产精品无码一区二区在线观一 | 综合久久一区二区三区 | 国产在线步兵一区二区三区| 亚洲一区二区精品视频| 久久久久人妻一区二区三区vr | 秋霞日韩一区二区三区在线观看 | 久久免费区一区二区三波多野| 成人丝袜激情一区二区 | 国产福利一区二区三区在线观看| 国产成人一区二区三区高清 | 文中字幕一区二区三区视频播放 | 中文字幕一区在线| 国产色精品vr一区区三区| 一区二区三区四区在线视频| 亚洲.国产.欧美一区二区三区| 国产美女在线一区二区三区| 日韩免费一区二区三区在线| 精品午夜福利无人区乱码一区| 3d动漫精品啪啪一区二区中| 韩国福利一区二区美女视频| 欧美激情一区二区三区成人| 日本高清天码一区在线播放| 亚洲人成网站18禁止一区 | 精品人妻一区二区三区四区|