關於直播幾個視頻格式的概念總結

由於業務須要,這段時間一直在準備作一個新的HTML5播放器,涉及到一些底層的視頻知識,這段時間處處搜索瞭解了一些相關信息,這裏先作一個階段性總結。html

MPEG

MPEG(Moving Picture Experts Group,動態圖像專家組)是ISO(International Standardization Organization,國際標準化組織)與IEC(International Electrotechnical Commission,國際電工委員會)於1988年成立的專門針對運動圖像和語音壓縮制定國際標準的組織。算法

這一段我是直接從百度百科上粘下來的官方解釋,總結下來就是這是一個專門制定視音頻通用標準的一個組織,由於要讓播放器能正確識別播放各類視頻,因此須要一份視音頻格式的業界標準。我也同找到了一個解答很清晰簡單的回答。一般來說,每一次制定一個版本的白皮書就是一次技術的革新。segmentfault

  • 好比最開始MPEG1就是針對VCD制定的音頻壓縮標準(其中咱們所熟知及最近正在被漸漸廢棄的mp3格式就是指MPEG-1 audio layer 3)瀏覽器

  • MPEG2開始針對DVD制定視頻+音頻的壓縮標準,視頻其實能夠看做是圖片幀序列,好比一張通過壓縮的jpg圖片的大小是100KB,對於一個每秒24幀的1分鐘的視頻來講,一個視頻可能就有100KB * 24 * 60 ≈ 14G的大小,這樣確定不行。MPEG2協議中就定義了一些業界的視頻壓縮標準。網絡

  • MPEG3其實和mp3不一樣,原本MPEG3是針對HDTV廣播視頻而制定的協議,可是因爲MPEG-2的出色性能表現,已能適用於HDTV,使得原打算爲HDTV設計的MPEG-3,還沒出世就被拋棄了。ide

  • 後來隨着手機的出現,由於手機的存儲量有限,就要求更高的壓縮率,好比原來一張DVD的存儲量有4GB,而手機只有1G,這時候經過一些算法大牛們的努力,慢慢就有了MPEG4的協議制定。MPEG4協議中用了更高級的壓縮算法,會比MPEG2有更高的壓縮比。性能

Container

container就是指視頻的格式,包括.mp4, .mov, .wmv, .m3u8, .flv等等,container做爲容器主要包含了video數據、audio數據、metadata(用於檢索視頻payload格式等信息)。編碼

Codec

COmpress and DECompress,是指視音頻的壓縮方式,包括H.265/MPEG-H HEVC, H.264/MPEG-4 AVC, H.263/MPEG-4 Part 2, H.262/MPEG-2等等。能夠分爲intraframe codec和interframe codec。其中H.264/AVC,也稱爲MPEG-4 高級視頻編碼(Advanced Video Coding,AVC),而且它將成爲MPEG-4標準的第10部分(MPEG協議有不少部分,壓縮方式是其中的一部分,還有一些部分定義了視頻文件結構標準等)。就是如今工業界廣泛在用的視頻壓縮方式。spa

MediaSource Extension

瀏覽器新提供的經過JavaScript生成媒體流來播放的API,經過window.URL.createObjectURL(MediaSource)接口能夠在瀏覽器端生成一個可播放的blob連接,並設置給video標籤.net

HLS vs. RTMP

這個基本能夠連接我上一篇文章了,是當前比較通用的兩個直播傳輸協議。其中HLS協議的直播視頻格式是m3u8,RTMP的是flv。

m3u8文件

圖片描述圖片描述

上面2張圖片,左圖是一個普通的m3u8文件打開的內容,其實m3u8文件是一個純文本,能夠用記事本直接打開的,是一個視頻描述文件,裏面描述了一個個.ts文件片斷的地址(或相對地址)、時長及hls協議版本信息等。右圖是一個能夠有多碼率自適應的m3u8描述文件,能夠根據不一樣帶寬選擇不一樣的m3u8地址。其中ts文件纔是真正的視頻數據。

ts文件

410527-20160723143430029-744220516.jpg

上圖是我找的網上關於ts文件的詳細文件結構,一個ts文件在傳輸過程當中是以188byte大小的包傳輸的,每個包包括一個header和payload。header中又有不一樣的字段,用來描述視頻信息及payload所在的位置,payload便是有效負載,就是視頻信息,是一個在通訊領域的專用名詞。具體的文件結構解析,打算在下一篇m3u8文件詳細的文章中描述。

fragmented mp4

Center

也就是fmp4,是適應於現代瀏覽器的一種流媒體格式。和mp4格式不一樣的是,以往的mp4格式化也分爲header信息和payload信息,一個大的mp4就會有一個很大的頭信息,不適合與如今的網絡環境。因此新的fmp4格式就出現了,fmp4格式有一個帶了metadata的頭片斷,及後面一序列的fragment,每一個fragment都有各自的header信息,這樣就把header信息也分紅了一個個小的片斷,更適合如今的應用場景。因此fmp4格式也就是用於MediaSource對象的SourceBuffer的格式,經過一個initSegment和一序列的segment塞給MediaSource對象來播放。

相關文章
相關標籤/搜索