用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層自適應算法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM