天我們來學習HTML基本格式。
H1 標簽定義了一個文檔的標題 ,雖然在瀏覽器里顯示了預期的效果 ,但它并不是一個符合規范的 html 文檔,今天我們就來定義一個標準的 html 文檔。
這是一個 html 文檔的基本格式 ,來深入的剖析一下
<!DOCTYPE html> 這個標簽會告訴瀏覽器,后面書寫的是HTML5規范 的語法,瀏覽器會按照 HTML5 的語法規范進行解析
<html lang='en'> 包裹了整個頁面的所有內容,有時被稱為根元素。
<head> 是所有頭部元素的容器,描述了文檔的各種屬性和信息,比如文檔的標題,文檔引用的樣式表和JS腳本文件,頁面元信息等等,絕大多數文檔頭部包含的數據,都不會真正作為內容顯示給瀏覽者。
<meta charset="utf-8"> 將文檔應該使用的字符集設置為UTF-8,它包括了書面語言的大多數字符,基本上可以處理放在頁面上的任何文本內容,它可以幫助你解決頁面亂碼的問題。
<title> 設置頁面的標題,也就是出現在瀏覽器標簽中的內容,它描述頁面被加入入書簽或收藏時的標題
<body> 它包含了頁面展示的所有內容,比如文字,圖片,視頻,游戲,可播放的音樂等等
一般情況下 一個符合規范的 html 文檔 都應該使用這個基本格式
回到編輯器 我們創建一個文件 名字叫 base.html 我們快速的編寫好 html 基本格式, 在 <body> 標簽里寫一個 h1 在里面寫一些內容,瀏覽器中打開頁面正常的顯示了,每個頁面都寫這么多東西很麻煩 我們有 vscode。
刪除所有內容 在頁面里只需一個感嘆號 ,再按一下 tab 鍵 ,html 基本格式自動生成了,這時就可以直接在 body 內編寫網頁內容了。
通過觀察基本結構發現 標簽前面有的有空格 有的沒有空格 這是為什么呢 實際上 當出現標簽嵌套的時候 需要保持一個固定的縮進 ,一般采用兩個或者四個空格 具體看個人習慣和開發團隊的規范,為了方便閱讀不推薦混用 。 有些標簽嵌套在一起,這就是標簽結構嵌套
在一個標簽內再次書寫一個標簽 他們之間形成了這樣的包裹關系 ,別包裹的叫做子標簽,包裹的就是父標簽。
在父子標簽嵌套的時候子標簽整體相對于父標簽多一套縮進,更加方便閱讀。
當今互聯網時代的發展里,Web前端發展已經占據了很大面積,基于Web前端開發基礎上,HTML5已經迅速崛起。在整個技術領域,HTML5永遠站在第一線直面用戶體驗,已成為當下互聯網行業最緊俏的高端技術崗位。雖然HTML5發展的如火如荼,但很多人對HTML5仍不了解,或者說對HTML5有誤解,認為HTML5就是網頁制作?下面,千鋒武漢HTML5培訓老師詳細解讀HTML5,讓大家真正的了解HTML5到底是什么!
1、H5不就是網頁制作?
我們需要先了解HTML5。你可能以為它也不過就是一個html4的升級版本?或者你理解為它是完全不同的新版本,因為到處都是宣傳的?起始兩種看法都是部分正確。HTML 5包括許多簡化和附加的網頁標記,所以它稱為升級版本也是可以的。但是,HTML5也可以被認為是很多的技術組合在一起的技術,包括一整套和HTML 5標簽交互的API接口。還有CSS3,給我們的HTML5帶來了非常強大的各種動畫和風格的效果。如果你已經很熟悉原本的html4,那大多數新的標簽會很容易使用。
2、因為Java,H5充滿了能量
雖然我們一聽前端都聽到的總是HTML5, 但真正的大英雄是原生Java和一套很新的接口。這些API包括新的本地存儲(local storage),流暢的視頻體驗,獲取地理位置信息(Geolocation),繪制圖形游戲(canvas),拖放,還有新產生的多線程。然而提到的這么多這只是已經命名的一些API而已。
Java其實它是一個復雜和強大的語言。并且現在看來,它也是一個快速發展的語言,在最近的10年中,Java的發展速度得到快100倍的改善(還會得到更多的改善)。所以,如果你想要去使用HTML 5,你就要學會Java。
3、使用是不是就是畫圖
為網頁添加了一個二維的繪圖區域。最簡單的操作,適于創建一個簡單的繪圖程序,可以畫出線,弧,和矩形。但是,如果看一下網絡上各種效果的頁面,我們就會發現canvas被用于任何基礎繪圖、制作動畫、游戲、交互式繪圖應用甚至三維場景。canvas一個挺好玩的實例是視頻處理。我們可以從player取得幀數據然后處理,而后寫入畫布上顯示出來。同樣,我們可以在游戲中使用一個canvas提供圖像的雙緩沖。
所以,不要輕易的小看canvas,它是HTML 5一個強大的新功能,可以用于各種圖形應用, 在現代的瀏覽器中的JavaScrip的性能提升也足以應付圖像和視頻處理需求。
4、HTML5視頻編碼
在拋棄flash以后,現在只需要在頁面中添加一個元素,就可以很方便地在網頁上播放視頻,并且不需要其它插件。但是我們該引入什么樣的視頻格式呢,說到視頻格式,現在html5支持三種格式:WebM,MP4,以及Ogg,而具體使用哪一種,就可以參考客戶使用的瀏覽器。如果你的用戶集中在某個平臺上,那就非常的容易了。打個比方,針對iPhone用戶,那就只需要提供MP4格式就可以了。如果你想支持所有流行的瀏覽器,那么我們就可以提供所有三種格式的內容。
5、 CSS3的動畫效果
通過CSS3,我們可以輕松實現以前只能通過Java實現的網頁效果。
比如說,當鼠標劃過時,要求圖片進行淡出淡出,在之前我們需要寫出復雜的Java代碼或者使用一個UI庫。而通過CSS3,你就不再需要寫代碼了。
transform(轉換) 和 Transition(過渡)是CSS3中的新特性,我們能通過它們寫出有趣的動畫效果。比如我們可以使用元件不透明性(opacity)的過渡(transition)實現淡化的效果。還可以通過transform函數實現多個元件的旋轉和縮放。組合起來就可以創造出很酷的動畫效果。
6、那我該不該使用html5
在你的工作中看,如果你的用戶使用移動設備(當然,移動設備普及的這么迅速),你就應該考慮去使用HTML5。HTML5瀏覽器現在已經是在大量的智能手機和平板上很普遍了。
HTML5已經是這個時代的選擇,加入HTML5的大軍吧,讓HTML5來點亮你的高薪人生!
照相機、留聲機誕生,解決了人們記錄影像、聲音的需求以來,人們就不斷地追求著在有限的條件下盡可能地提高這些記錄的品質,而從模擬時代過渡到數字時代以后,這方面的追求有一部分變成了在盡可能小的空間中提供盡可能好的內容質量,這就催生出了一系列不斷演進著的媒體壓縮技術。
不過這期課堂的主題尚未來到媒體編碼的歷史,在講音視頻圖像的壓縮算法進化之路前,我們先來了解一下這些媒體內容的載體——容器格式的進化歷程。
首先需要區分清楚的,就是容器格式與媒體編碼格式。
對于數字媒體數據來說,容器就是一個可以將多媒體數據混在一起存放的東西,就像是一個包裝箱,它可以對音視頻數據進行打包裝箱,將原來的兩塊數據整合到一起,也可以單單只存放一種類型的媒體數據。它就像電影膠片一樣,中央是一幀一幀的圖像,而兩旁則印有對應的音軌。
舉個簡單的例子,常見的MP4就是一種媒體容器格式而不是編碼格式,它里面的視頻編碼可以是現在最常見的AVC/H.264,也可以是它的前任H.263或者下一任——HEVC,音頻編碼可以是常見的AAC也可以是AC-3。
另一個生僻點的例子:最常見的圖片格式——JPEG,它其實只是一種壓縮方式,而它的存放方式其實叫做JFIF(JPEG File Interchange Format),雖然在JPEG標準中定義了一種名為JIF(JPEG Interchange Format)的容器格式,但是因為其缺乏某些關鍵要素,造成了使用的不便而被后來第三方開發出來的JFIF容器給取代了,今天我們能夠看到的JPEG文件幾乎都是裝在JFIF容器中的。
雖然今天我們能夠直接拿到的MP4文件里面裝的幾乎都是AVC+AAC的組合,但還是不能混淆了兩者的概念,容器就是個容器,它沒得靈魂。
AVI可能是和筆者年齡相仿的朋友最早接觸的一個格式。確實,它推出的時間相對較早,也是許久以前最為常見的一種容器格式。它全稱叫做音頻視頻交錯( Audio Video Interleave),顧名思義,它就是簡單地將視頻與音頻交錯在一起,幾幀視頻之后就是對應的音頻段,這樣重復,直到結束。
AVI文件的結構示意圖
它由三部分組成,頭部、主體以及位于文件尾部的索引。頭部中含有文件的元數據(metadata),比如視頻的分辨率、碼率總幀數等信息。主體部分是媒體數據的存放區,它使用了塊(chunk)的概念,將原本的視頻流和音頻流分成塊狀進行交錯放置,就是上面講的一段視頻一段音頻交錯放置,而尾部則是用來放置索引,它用來記錄每個數據塊在文件中的偏移位置。
紅框標注為對軌道的標識
講到AVI,還可以聯動一下WAV和蘋果那邊的AIFF,這些容器格式其實是同源的,來自于EA(對,就是現在那個做游戲的EA)為了讓不同公司開發出來的軟件之間進行數據交換而在1985年開發出來的IFF(Interchange File Format)格式。蘋果在IFF的基礎上開發出了AIFF,而微軟與IBM將IFF格式使用的大端序改成小端序就成了RIFF(Resource Interchange File Format),也就是AVI、WAV這兩個容器的基本原型。
AVI雖然老,但是因為它以幀為單位把數據切成塊來存放的特性,使得它幾乎支持市面上幾乎所有的音視頻編碼。而它的缺點也有很多,首先因為索引在文件尾部的關系,所以它并不適合用來流傳輸;另外在容器中也沒有時間戳,只能通過幀數和幀率信息來進行計算,在索引里面并沒有寫明時間戳—媒體位置的數據,所以要在播放AVI時進行快速跳轉還需要額外的技術手段;而媒體數據分塊存放也使得它對很多使用運動預測特性的視頻編碼的支持并不是太好,因為這些幀,比如P幀和B幀,都是通過I幀進行計算得到的,這就需要訪問當前幀以外的數據了。
用電腦播放過VCD的朋友一定還記得會在目錄里尋找那個最大的.DAT文件來播放,而DVD則是找那個最大的.VOB。其實這兩個格式都是MPEG-PS容器規范的一種,此PS非彼Photoshop,而是指Program Stream,是MPEG組織在1993年發布的一個容器標準,并且隨后寫入ISO/IEC國際標準,除了以上兩種后綴名之外,還有.mpg也用的是這個標準。
MPEG-PS標準中引入了包的概念,整個文件由一個個包組成,每個包的大小并不相等,包里面含有這個包的時間碼以及對應的音視頻數據。
MPEG-PS已經隨著時代的進步被廢棄了,它只能存放MPEG-1、MPEG-2、MPEG-4這些出自同門的視頻編碼,限制性較大。但因為VCD和DVD的廣泛流行,實際上它還是被用的相當多的。
MPEG組織不僅僅為音視頻文件的存儲制定了容器標準,還早早地順應時代潮流,為它們的傳輸準備了相應的容器。我們的數字電視和IPTV用的就是MPEG組織在1995年制定的Transport Stream,也就是TS容器,當然它也并不限于這兩個場景,在現在的低延時直播系統中,MPEG-TS仍然占據了絕對主流的地位,原因就是它的整個結構就是為了流傳輸而設計的。
從IP層到TS包內部的結構
一個TS文件中可以容納多個TS流,不同的流上面可以帶有不同的音視頻數據,這樣通過接收一個TS文件,用戶方面可以自由地在這個TS文件中的多個子TS流之間進行切換,非常適合用于傳輸電視節目。而它同時針對復雜的傳輸環境進行了針對性的優化,TS流的基礎單位是一個個大小僅為188字節的包,每個包都有自己的獨立時基,并且由于采用了固定大小,所以在傳輸過程中即使遭遇丟包也很快就可以恢復正常播放。
發展到今天,TS仍然在網絡流傳輸時代中發揮著自己重要的作用,在蘋果主導的HLS(Http Live Streaming)協議中使用的就是TS流,它比MPEG-DASH更加通用,因為后者對于MP4文件進行了一定的修改,在老平臺上面支持不太好,而HLS使用的TS仍然是規范中的,可以被大多數設備兼容。
不過也因為TS分包較多的特性,會產生一些數據冗余,所以在存儲場景中一般不會使用TS作為容器。
M2TS:專為高清時代而生
M2TS多見于Blu-ray光盤和高清錄像(AVCHD)中,它由MPEG-TS修改而來,加入了對于高清時代新的音視頻編解碼支持。
一張Blu-ray視頻光盤中的M2TS
并且由于TS文件的特性,每一個小片上都有自己的獨立時間戳,這使得文件中一部分數據即使遭到破壞也不會影響到其他部分的正常播放,而且可以從中隨意的進行切片操作。
見過ASF格式視頻的朋友我想應該不會太多,但是見過WMV和WMA這兩個微軟以前主推的媒體編碼格式的朋友肯定有很多。其實WMV和WMA就是存放在ASF容器之中的,它全稱高級系統格式(Advanced Systems Format),微軟原本計劃是用它來作為AVI容器的后繼者的,它具有諸多先進的特性,比如說它可以包含視頻除了規格以外的元數據,如導演、電影名這些,它也可以提供數字版權管理(DRM),還有非常好的流傳輸支持——僅需要加載文件的最小部分即可開始播放,這點小編感受過一次。
ASF文件開頭會用這32個字節來標識自己是個ASF文件
ASF身上的這些特性在當時還算是比較先進的,但不過這于事無補,微軟建立它那套封閉媒體格式體系的做法并沒有得到太多廠商和用戶的支持,大家仍然更喜歡用其他更為開放一點的標準,比如MP3就是一個很好的例子。ASF容器也隨著微軟媒體格式的衰亡而漸漸消失了,我們今天已經幾乎看不到WMV、WMA這兩個曾經還很常見的格式的影子了。
與ASF差不多同時代流行的就是RM和RMVB了,在那個AVC尚未開始普及,DivX和XviD應用較少的年代中,RMVB在國內的各大下載站中都占據了絕對主流的地位,很多視頻站也大多使用RM來提供“網絡視頻點播”的服務。
RM容器的內部結構
不過RM容器本身并不出彩,索引仍然位于文件尾部,不過由于數據段里面有加入時間戳,所以在流傳輸時還是可以應付用戶的跳轉操作的。因為這個容器本身與RM編碼息息相關的原因,它本身也只能容納RM編碼的視頻流,所以在RM編碼沒落之后我們就很少再看到這些昔日王者了,一個容器格式想要長存,要么在設計上有其獨到之處,要么就是要開放,在眾多平臺上面提供支持。而RM兩個理由都不占,效果又比不過新興的AVC,所以它的沒落也是必然了。
還記得十年前的土豆網嗎?彼時它還被稱為“國內的Youtube”,當時視頻網站普遍都還在用Flash寫播放器實現流視頻播放,而自然而然地,Adobe制定的Flash Video格式就成了這些視頻網站主要使用的容器格式,也就是我們熟知的FLV。
FLV格式是在Flash Player 6中引入的,當時更多的是被存放在SWF文件的內部,不過后來因為體積越來越大而直接獨立了出來,它的結構相對而言比較簡單,主要分為兩塊,位于文件頭部的元數據信息和后面的音視頻數據。不過在數據的存放上面,FLV是將數據分為多個標簽進行存儲的,每個標簽都帶有自己的時間戳,所以這就保證了流傳輸時的音畫同步。
由于FLV結構簡單但是功能足夠用,并且被Flash Player天然支持,所以在當時的視頻網站上面普遍都使用它作為容器,直到今天還有很多網站沒有放棄它,雖然其中的視頻編碼早已升級,它也有衍生出來的F4V作為后繼者,雖然后者的血統已經不是Flash家族的了。
F4V:換了血的繼任者
小編還記得土豆網在2009、2010年左右在國內率先開始使用H.264編碼,當時如果將清晰度切換到“高清”就會播放這些用H.264編碼的視頻。而用飛速土豆加速會緩存到一些.f4v擴展名的文件,乍一看還以為它就是FLV,但其實不然,F4V其實是MP4所在的ISO標準容器家族的,但也是Adobe搞出來的FLV的后繼者。關于后者的詳情,請往下看。
MOV格式的正式名字叫QuickTime File Format。看到這個QuickTime第一反應肯定是“哦,這是蘋果的東西”。確實,QuickTime File Format是由蘋果在1998年推出的,它引入了原子(atom)的概念,在QTFF格式中,atom是基本的數據單元,它可以用來容納實際的音視頻數據,也可以放置元數據和字幕等文本信息,atom中所容納的數據類型和大小在每個atom的頭部進行描述,經過一層層的嵌套之后,整個數據文件呈現了一種樹狀的結構,并且保留了強大的可擴展性。
MOV和MP4這些ISO標準容器格式的開頭都有一個ftyp用于標記格式
MOV作為蘋果QuickTime編碼的成員,在目前仍然被蘋果設備廣泛使用著,并且對于它的支持非常好。1998年推出QTFF的同時,蘋果將這個格式交給了ISO組織,后者將它標準化為國際通用容器格式,而基于這個標準衍生出來的容器,又可以叫做ISO/IEC base media file format,同時被MPEG組織采納,寫入MPEG-4 Part 12標準中。
ISO標準容器格式
ISO標準容器格式是一個規范,它代表符合這個規范的容器類型,而不是特指某個格式。它是由蘋果的QuickTime File Format發展而來的,在MPEG-4 Part 12中被最終確定并被ISO/IEC組織寫入標準。它雖然沒有具體實現,但是它定義了基于時間碼的多媒體文件的通用結構,并由此成為了MP4、3GP等格式的基礎。
3GP、MP4與ISO標準容器格式的關系
MP4肯定是現在最通用最流行的媒體容器,甚至可以說沒有之一。但其實現在的MP4和早期的并不是同一個標準,目前常見的MP4標準是在2003年完整的的MPEG-4 Part 14規范中制定的,到今天為止也經過了多次的修訂。它其實與MOV之間并沒有太大的區別,基本上就是把MOV的atom改了個名字,叫成box,然后加了一點別的佐料。
MP4的內部結構
蘋果建立iTunes Store賣數字音樂的時候選擇了AAC-LC作為他們的音頻編碼格式,而容器格式上面他們并沒有選擇與AAC-LC處于同一時代(MPEG-2)的ADTS,而是選擇了比AAC-LC大一輩的MPEG-4標準容器,也就是MP4,不過因為它只含音頻所以我們看到的擴展名就是.m4a,iTunes Store還賣一種只有視頻沒有音頻的MV,它用的也是MP4,擴展名為.m4v,本質上它們就是同一種東西。
目前很多視頻網站已經從FLV切換到MP4上面了,而且還有一種新的MPEG-DASH格式就是借助于MP4可分割的特性實現的,它將一整段視頻切成許多段小塊,方便瀏覽器進行加載,減少HTTP長連接對服務器的壓力。
這里說一句題外話,當年某站剛上HTML5播放器的時候,因為他們原來的視頻幾乎全部都用的是FLV存儲的,而HTML5標準并不支持它,所以要進行一個容器轉換,某站當時一位非常年輕的程序員寫出了一個在瀏覽器內實時將FLV文件轉成MP4并喂給瀏覽器的媒體播放器的腳本,名為flv.js,這個腳本可能給某站省下了非常大的格式轉換成本。不久之后這位程序員因為受不了某站的低薪而離職。這件事曾經引起了很多社區的熱烈討論,因為今天是程序員日所以特地寫了這么一段。
3GP:精簡小巧,手機最愛
3GP是MP4的同族兄弟,一樣是基于ISO標準容器格式,用過3GP的兄弟肯定還記得這格式最多出現的地方是哪里——以諾基亞為代表的前智能手機時代,手機錄像出來的文件大多都是3GP格式的。
3GP這個容器格式標準其實不是由以往的MPEG啊這類專注于多媒體編碼的組織搞出來的,而是3GPP,對沒錯就是制定通信行業標準的那個組織制定的。它在容器支持的格式上進行了精簡,只面向于手機可以進行的編碼,比如MPEG-4 Visual、H.263這些比較老的視頻編碼和AMR、AAC這兩種前智能手機時代使用較多的音頻編碼。
因為前智能手機時代的手機性能并不強大,一般也不需要支持很多種格式,不用像MP4那么全面,所以3GP最終成為了一種被廣泛支持的格式,不過也因為它支持的格式過于有限,最終在智能手機時代被同門大哥MP4給取代了。
MPEG-DASH
面對時下流行的流媒體,MPEG組織對MP4文件進行了魔改,由于MP4天生可以進行無損切割的特性,DASH方式將原本媒體文件中完整的文件頭的元數據信息和片段Box中的信息抽取出來單獨寫在一個文件(MPD)中,同時還包含了片段的URL等信息,播放器可以自適應選擇需要的片段進行播放,在自適應程度上面比HLS更強一些。(其實MPEG-DASH也可以用TS作為容器,但用MP4更多一些)
目前MPEG-DASH已經成為了一項國際標準,人們比較熟悉的應用平臺就是Youtube和Netflix,在這些平臺上面你會發現瀏覽器在不斷地加載一些小的視頻文件,但是視頻的播放是連續的。
說到MKV,喜歡收藏高清電影的朋友肯定不會陌生,這種容器格式大概是和高清時代一起發展起來的,但其實它在2002年底就已經完成制定了,不過推廣的很緩慢,到了高清時代和UHD時代人們才開始發現這種容器的強大,并用的越來越多,連微軟都在Windows 10的初始版本中加入了對它的支持。
MKV的內部結構
MKV全名Matroska,它身上最大的特點就是開放標準、免費使用,而且它可能是目前地球上最強大的數字媒體容器格式,一個文件中可以放音頻、視頻、字幕、字體還有章節信息等等等等,前面東西都是不限數量任你放多少都可以吃得下的,而且它是目前唯一一個支持封裝ASS字幕的格式。
值得一提的是,這玩意兒是俄羅斯組織матрёшка搞出來的,其實本身是用于盜版的,俄羅斯的網絡情況跟我們挺像的,網絡上盜版橫行,而MKV也幫助了文件的傳播,目前來看,MKV可能是眾多容器格式里面最好用的,無論是編輯元數據還是抽取軌道重新封裝都有GUI工具支持,不過可惜的是眾多視頻編輯剪輯軟件還是沒有提供對它的支持。
其實讀到最后你會發現,這些容器格式內部對于音視頻數據的處理都是大同小異的,區別點其實并不大。更多的差距在于它們對于不同編碼格式的支持程度、元數據的詳細程度以及對于是否能夠支持音視頻以外的數據。
而發展到至今,MP4仍然夠用,在互聯網時代扮演著非常重要的角色;MKV在下載黨那里被奉為圭臬;而TS格式仍然在數字電視系統中被廣泛使用。但在他們之前的格式也不是說非常弱或者不好,只不過可能是他們支持的那些格式沒落了順帶著把它們也帶沒了,真正像AVI那樣確實在技術規格上落伍的容器并不多。
而對于各種容器之間無損互轉的事情,小編這里推薦mp4box、mkvtoolnix和強大的ffmpeg這些工具。下一篇系列課堂,我們會轉向在如今多媒體領域中扮演無可替代角色的視頻編碼的變遷史,并且會看一看未來的AV1和VVC這兩種對于大眾來說還很陌生的下一代視頻編碼。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。