前言:HLS是HTTP Live Streaming的縮寫。它是蘋果公司實現(xiàn)的基于HTTP的流媒體傳輸協(xié)議,可以實現(xiàn)流媒體的直播和點播。官網(wǎng)參考地址:http://developer.apple.com/resources/http-streaming/
PS:本文的主要目的在于:加以個人理解,對研究新技術(shù)的記錄。如果文中有出入的地方,還請見諒,且請各位大蝦指正,不勝感激,已內(nèi)牛滿面...
本文主要內(nèi)容:
1、何為直播?何為點播?2、HLS流媒體播放的工作流程(重點說明理解);3、總結(jié)。
1、何為直播?何為點播?
視頻播放實現(xiàn)簡述:客戶端播放器播放視頻URL(這也是一個網(wǎng)絡(luò)請求),服務(wù)器受到請求后,做出響應(yīng),實時將2個小時的視頻文件,經(jīng)過處理,以媒體“流”(一個形象的說法)的形式傳輸?shù)娇蛻舳说牟シ牌鳎蛯崿F(xiàn)了視頻的播放。
點播:視頻內(nèi)容已經(jīng)存放在服務(wù)器上(換句話說,我們能夠得到該視頻文件在服務(wù)器上的URL地址),我們可以選擇性地播放某個“大片”。
直播:視頻內(nèi)容是實時錄制的,與此同時,將音視頻以媒體“流”的形式推到服務(wù)器上。此時,一旦有觀眾收看該直播,服務(wù)器收到響應(yīng)后,會將媒體流傳輸至播放器,實現(xiàn)視頻播放
PS:最直觀的認知,即點播的內(nèi)容,可以任意控制視頻播放的進度。而直播則不然,取決于網(wǎng)紅的實時直播進度。?
擴展了解:目前常見的點播視頻的格式,mp4、flv、hls等。其中,1、mp4是比較經(jīng)典的文件格式,其格式較復(fù)雜,處理成本較高;2、flv是Adobe力推的標準;3、hls是Apple力推的標準,鑒于其精簡的m3u8索引結(jié)構(gòu)所表現(xiàn)出的優(yōu)勢,無疑會使其成為媒體處理的趨勢。
2、HLS流媒體播放的工作流程(重點說明理解)
上圖為Apple官網(wǎng)提供的說明,參見上圖,對其工作流程做以下說明:
1.音視頻采集(Live、或錄制好的Video) -> 這里“采集”只針對于視頻直播,比如說我通過iPhone32(噗,更長了...)設(shè)備的麥克風(fēng)、攝像頭來采集音視頻,并將其實時上傳至服務(wù)器。而點播的內(nèi)容,已經(jīng)在服務(wù)器上了。
2.音視頻編碼(H.264、AAC)->服務(wù)端對視頻、音頻進行H.264、AAC編碼(所謂的編碼:將視頻文件進行合理的最大化的壓縮處理,便于在網(wǎng)絡(luò)中傳輸),鑒于H.264具有很高的數(shù)據(jù)壓縮比率,同時還擁有高質(zhì)量流暢的圖像,故而備受“恩寵”。
3.媒體流切片處理(Stream segmenter) ->服務(wù)器通過“切割器”對多媒體進行切片處理,生成N多個.ts文件,并對應(yīng)了一個索引文件(.m3u8)。其中該索引文件記錄了視頻即 .ts文件的播放順序,并會作出及時的更新。
4.生成.m3u8(精簡的索引結(jié)構(gòu))和 N多個.ts文件(5~10s) ->這樣精簡的結(jié)構(gòu)相對于MP4而言,尤其顯示了優(yōu)勢之處,首先是便于閱讀理解,其次最重要的每個ts文件很小,能夠在網(wǎng)絡(luò)快速傳輸。而對于用戶而言,可以根據(jù)網(wǎng)絡(luò)狀況,快速的切換視頻碼率。另外,.m3u8采用UTF-8編碼,接下來咱們看一下該結(jié)構(gòu):
5.基于Http協(xié)議,將數(shù)據(jù)傳遞給客戶端,以實現(xiàn)視頻播放 -> 通過Http協(xié)議,客戶端課按照m3u8所提供的索引結(jié)構(gòu),能夠快速的下載相應(yīng)的 .TS片段。最后通過播放器對音視頻解碼,從而播放“大片”。
3、總結(jié)
目前是一個“網(wǎng)紅”盛行的時代,越來越多的人躋身其中,無形中推動了互聯(lián)網(wǎng)“直播”的快速發(fā)展,就拿現(xiàn)在的直播平臺來說,YY,斗魚、熊貓等等,這無疑對于開發(fā)者是一個新的契機。流媒體就好比是一塊非常大的蛋糕,而本文的目的是先對這個蛋糕做一個整體認知,便于對其的每個組成部分逐一攻破。
最后
歡迎大家關(guān)注我們團隊微信公眾號,以及博客地址,在這里我們會實時與大家分享優(yōu)質(zhì)的技術(shù)文章。大家也可以加入我們的技術(shù)交流群(QQ群:343640780),共同探討,共同進步。
團隊博客地址:http://www.52learn.wang
團隊GitHub:https://github.com/wu2LearnTeam