用HTTP協議傳輸媒體檔案 學習
用HTTP協議傳輸媒體檔案可以分兩個階段,第一個階段是Progressive Download(漸進式下載方式)階段,第二個階段是HTTP streaming(HTTP流化)階段。其中,第一個階段可以看成第二個階段的前身。
- Progressive Download
漸進式下載是一種順序流式傳輸,它是一種簡單的從HTTP WEB伺服器進行檔案下載的方式,其中“漸進”指的是使用者可以一邊下載一邊播放,而不需將整個媒體檔案下載完畢再播放。在漸進式下載中,客戶端使用者傳送HTTP請求流媒體檔案,伺服器收到請求之後通過HTTP響應傳送媒體檔案給客戶端使用者。客戶端與伺服器互動過程如圖:
從嚴格意義上講,這種下載方式不是真正的流式傳輸,所以它也稱為“偽流媒體”,主要原因是它與普通檔案下載方式沒有本質的區別,不支援實時的流媒體傳輸,當用戶停止播放它仍然繼續下載,直到整個媒體檔案下載完畢或者播放介面被關閉,下載的媒體檔案會被儲存在客戶端的磁碟上。
- HTTP streaming
HTTP流化技術的主要思想是在伺服器端將多位元速率的媒體檔案分割成一個個小的媒體切片,客戶端通過HTTP請求一個個小的媒體切片,伺服器收到請求通過HTTP響應傳送媒體切片。伺服器和客戶端互動的過程中,可以由客戶端或伺服器實時檢測網路頻寬情況,隨時可以切換媒體切片的質量級別(不同位元速率對應不同質量級別)。保證播放的連續性和流暢性,提升使用者體驗
採用HTTP協議作為流媒體傳輸的協議棧,主要分成網路層、傳輸層和應用層。
在HTTP流化方式中,一個媒體檔案有多種位元速率的版本(可以砸伺服器端動態產生也可以靜態儲存),其中高位元速率對應較高質量級別,反之亦然。伺服器實現媒體檔案的切片、容器格式封裝等等之後,在伺服器和客戶端互動的過程中,根據寬頻資源的變化,動態的在不同質量級別的媒體檔案切片之間切換,這種切換的發起者可以是伺服器或者客戶端,即有伺服器控制的自適應策略和客戶端控制的自適應策略。
- 網路部署
HTTP流化技術在網路部署中不需要假設專有的流媒體伺服器,使用標準的HTTP WEB伺服器即可,便於大規模部署,而且,因為採用HTTP協議,HTTP流化能很好的支援防火牆的穿越與NAT的轉換。
- 流媒體編碼格式
數字化的音訊和視訊資訊攜帶著大量的資料量,而資料量又是網路傳輸的敏感因素,因此,在進行網路傳輸之前,需要對音訊和視訊進行必要的壓縮編碼,降低網路傳輸的壓力,目前主流的基於HTTP流化的流媒體技術中,一般採用H.264+AAC的視訊和音訊編碼組合。
H.264的編碼分為兩層,視訊編碼層VCL(video coding layer)和網路提取層NAL(network abstraction layer).視訊編碼層負責對視訊資料的編解碼,包括運動估計、熵編碼等內容;網路提取層負責將編碼後的資料進行封裝,方便視訊資料在異構網路上傳輸。網路提取層的引入,使得H.264視訊編碼格式的媒體檔案具有較強的網路適應性,能容易地在不同網路上傳輸。
- 流媒體檔案的容器格式
我們一般說流媒體檔案格式或者其後綴名指的就是檔案的容器格式,如MP4格式。對於一種容器格式, 可以包含多種不同的軌道,每個軌道可以是壓縮編碼後的視訊、音訊或者文字等資訊。容器的作用是把壓縮編碼後的視訊和音訊資料放在同一個檔案的不同軌道,新增一些資訊方便同時回放,並且將資料儘可能緊湊的排布。
容器格式一般應包含三個部分:
Header:標記檔案型別,音視訊碼流等基本屬性資訊。
Index:索引表,視訊frame對應的offset,size,timestamp等資訊。
Stream:音視訊裸資料。
有些容器格式(如AVI)可能沒有索引表,但在需要的時候要根據其他資訊找到offset和size等資訊,自己建立索引表。
MP4檔案格式是個十分開放的容器,幾乎可以用來描述所有的媒體結構。MP4容器中的媒體格式描述與媒體資料時分開的,並且媒體資料的組織也很自由,不一定要按照時間順序排列。
圖中給出了MP4容器格式的一些主要box,可以看出,MP4容器格式是一種逐級巢狀的容器格式。MP4容器格式由若干個box組成,每個box有型別和長度,可以填充不同的資訊或者資料。box可以理解為俄資料物件塊,有些box中可以包含其他box,這種box稱為contained box。標準的box開頭的四個位元組(32位)為box size,該大小包括box header 和box body整個box的大小。size 後面緊跟的32位為box type,一般是四個字元,如“ftyp"、”moov"等,每個box都有固定的格式和需要填充的資訊。其中ftyp box有且只有一個,不能被其他box包含。該box應該被放在檔案的最開始,指示該MP4檔案應用的相關資訊。moov box同樣只有一個,一般情況下,“moov"會緊隨"ftyp"出現,一般情況下,moov中會包含1個mvhd和若干個trak。其中mvhd為header box,一般作為moov的第一個子box出現(對於其他container box來說,header box都應作為首個子box出現),trak必須包含一個tkhd和一個mdiz,此外還有很多可選的box.
在所有的box中,填充資訊和資料比較多且比較重要的box為stbl box(sample table box),該box包含了sample所有時間和位置的資訊,以及sample的編碼資訊等,是MP4最複雜的box,可以含有stsd,stts,stsz等下一級box.
stsd(sample description box):該box必不可少,包含了資料型別資訊和編碼的資訊,例如:音視訊的編碼方式、視訊的寬和高、音訊的聲道。
stts(Time to Sample Box):儲存了sample的時長資訊,描述了sample時序的對映關係,我們通過它可以找到任何時間的sample.
stsz(sample size box): 包含了每個sample的大小資訊。
以上box都 屬於容器格式的索引表部分,在MP4容器格式中,音視訊的裸資料在mdat box中儲存。
H.264編碼視訊流是由一個個NAL(network abstraction Layer)單元組成的,同城一幀視訊資料封裝在一個或多個NAL單元。
- 流媒體檔案切片
- 流媒體檔案切片
- 容器格式轉換
- 自適應演算法的兩種模式
- HTTP層自適應演算法