摘要:很顯然,一幀的視頻不可能進(jìn)行網(wǎng)絡(luò)傳輸,所以需要對(duì)這個(gè)文件進(jìn)行有損的壓縮,壓縮成的文件,這塊的壓縮比是。
說在前面的話
視頻對(duì)于前端工程師來講,真的是簡(jiǎn)單到極點(diǎn),直接給一個(gè)視頻地址,然后賦值到video下面,搞定!對(duì)于普通的后臺(tái)工程師也很簡(jiǎn)單,因?yàn)槲覀兙幊潭际菍?duì)每一幀進(jìn)行編程,不用關(guān)心視頻的怎么編碼、解碼、傳輸?shù)攘鞒蹋悄兀A(chǔ)這東西,有一句名言:**基礎(chǔ)就像眼鏡,用到時(shí)候才知道有多重要。
現(xiàn)實(shí)世界的原型第一個(gè)是30年前的放映機(jī),不知道大家見過沒有,一個(gè)非常大一卷的帶子,放到放映機(jī)上面,然后以每秒x張膠片的速度一張一張的播放
第二個(gè)是一個(gè)創(chuàng)意,在一個(gè)空筆記本上,畫上連續(xù)動(dòng)物奔跑的圖,然后快速的翻閱,就能看到動(dòng)物在奔跑,感覺像在放動(dòng)畫片一樣
現(xiàn)實(shí)世界的這兩種視頻的表現(xiàn)形式都是一致的,就是每一幀都采用完整的一張圖,然后按照第秒20張的速度進(jìn)行播放,從而形成視頻
這種表現(xiàn)形式最直觀,但有一個(gè)比較嚴(yán)重的問題,就是體積太大了。你看第一種,要放一部電影,得需要非常大的一卷的帶子,非常不利用攜帶;第二種,要展示幾秒種的動(dòng)畫,你可能得畫整整一本;放到數(shù)字世界里呢,假如我們存放一部無損、1小時(shí)、1080P電影,每秒20幀的速度,你需要的存儲(chǔ)空間大約為:6203600=421G
提幾個(gè)概念先編碼格式:既然文件那么大,肯定得壓縮,也就是對(duì)視頻進(jìn)行編碼和解碼,用哪種方式編解碼,就叫視頻的編碼格式。目前最流行的編碼格式是:H.264,還有其他的格式,如更加先進(jìn)的H.265和比較落后的H.263。
封裝格式:俗稱就是文件的格式,像我們看到.avi/.mp4/.mkv,這些都是封裝格式。因?yàn)槲覀兛吹揭曨l都是由聲音和圖像組成的,封裝格式就是把圖像和聲音組合到一起,比如我們把H.264編碼的視頻和AAC編碼的音頻封裝成.avi格式的視頻文件,也可以把H.265和AAC-3組合到一起,生成.mkv格式的文件等等組合的方式。
比特(bit)和字節(jié)(byte):這兩個(gè)概念我們平時(shí)經(jīng)常搞混,換算比較簡(jiǎn)單:1byte=8bit。有一個(gè)比較重要的結(jié)論比特用于傳輸,字節(jié)用來存儲(chǔ)。舉個(gè)例子:如果服務(wù)器上存放著一個(gè)80M大小的文件,你家的網(wǎng)絡(luò)帶寬是80M,你說理論上是1秒就能把文件下載來你本地嗎?聰明的你,肯定猜到了,不是!因?yàn)橹庇X告訴我們,80M的網(wǎng)張帶寬,下載只有8M左右,所以需要10秒才能下載完,嘿嘿,大體上是這樣的,我們來計(jì)算一下啊。服務(wù)器存放著80Mbyte,注意:這里是byte,而你的帶寬80Mbit,注意:這里是bit,根據(jù)上面的換算公式,80Mbit=10Mbyte,所以,你的實(shí)際傳輸速度是10M/s,所以需要8秒,通過上面的例子,你就能更加深刻的理解那個(gè)結(jié)論了吧。
碼率:不太好總結(jié),還是看個(gè)例子吧。一個(gè)1G的視頻,100分鐘,它的碼率的算法是這樣的:1G=1x1024MBx8bit,100min=100minx60s=6000s,碼率=1024x8/6000~~1.4M/s。
視頻的產(chǎn)生流程攝像機(jī)采集完一幀圖像之后,會(huì)生成一個(gè)無損的.bmp文件格式的圖片文件,這個(gè)圖片是位圖,分8位、24位、32位,用win的話,可以用畫圖軟件隨便畫一個(gè),然后你保存,默認(rèn)就是.bmp的格式,下面就會(huì)讓你選位數(shù),我們以1080P的圖像(24位)為例,算一個(gè)這個(gè)位圖的大小:54+((1920*1080)x24)/8~~6M。54是圖片的頭信息,24是圖像的位數(shù),除以8是把bit轉(zhuǎn)成byte。很顯然,6M一幀的視頻不可能進(jìn)行網(wǎng)絡(luò)傳輸,所以需要對(duì)這個(gè).bmp文件進(jìn)行有損的壓縮,壓縮成200KB的JPEG文件,這塊的壓縮比是1/30。
每一幀是200KB,很顯然也不利于網(wǎng)絡(luò)傳輸,咱們算一下碼率(以每秒20幀):(200x20x8)/ 1024 = 32M,也就是一對(duì)一傳輸,你家的網(wǎng)絡(luò)帶寬至少得32M才能勉強(qiáng)播放(一般的視頻的碼率都保持在2M以內(nèi))。現(xiàn)在我們前面說的編碼格式:H.264就粉墨登場(chǎng)了。
編碼的基本原理拋開其他東西不談,我們也會(huì)發(fā)現(xiàn),視頻的連續(xù)幀之間的差別其他非常小,就像上面提的那個(gè)動(dòng)畫書,沒有必要把每一幀都多帶帶生成圖片,只要記錄幀和幀之間的差別其實(shí)就可以了。咱們這么想,H.264編碼也是按這個(gè)思路來進(jìn)行壓縮的。這點(diǎn)和SVN比較類似,起初我們得提交一個(gè)原始文件,這個(gè)原始文件就相當(dāng)是I幀,也就是上面我們看到攝像機(jī)產(chǎn)生的那張200KB大小的JPEG文件,有了I幀之后,下一幀就可以以此幀進(jìn)行對(duì)比,生成差異文件,這個(gè)差異文件就是P幀,(這個(gè)P幀是通過H.264的運(yùn)動(dòng)補(bǔ)償算法算出來的),依次類推,后面的幀都是前面幀的差異,直到下一個(gè)GOP的出現(xiàn)。恩?GOP是個(gè)什么鬼?GOP就是單位時(shí)間內(nèi)一組I幀和P帖組合,一般的設(shè)置是一個(gè)GOP為2秒,也就是在這個(gè)GOP中,只有一個(gè)I幀,其余都是P幀(其實(shí)還有B幀,這個(gè)后面說),那現(xiàn)在們我們得到另外一個(gè)結(jié)論:一個(gè)GOP中,只有加載出I幀,才能渲染出一段視頻,這個(gè)也好理解哈,沒有原始的對(duì)比文件,只有差異文件,是啥也渲染不出來的。
還有一種幀叫B幀,P幀我們上面已經(jīng)講清楚了,就和前一幀的差異,那B幀是雙向的差異,就是他即參考前一個(gè)幀,也參考后一個(gè)幀,這樣就帶來兩個(gè)好處:1.更高的壓縮比;2.更加快速的解碼能力。第二點(diǎn)還好理解些,雙向參考,解碼時(shí)可以進(jìn)行多線程解碼,而不像P幀一樣,要等待前一幀的結(jié)果。第一點(diǎn)好處,我查了很多資料也沒說清楚,只知其然,不知其所以然。
一些視頻現(xiàn)象的分析有了上面的基礎(chǔ)知識(shí),我們就可以分析幾個(gè)我們使用視頻的時(shí)候經(jīng)常遇到的問題
馬賽克現(xiàn)象,我們先看這個(gè)圖:
從圖中我們能看出一些東西來,不是所有畫面都出馬了,只是一少部分的圖像出現(xiàn)了錯(cuò)位。我們假設(shè)只有3幀,IPP,如果第一個(gè)P幀丟失,第二個(gè)P幀參考的是I幀,也就是P幀的運(yùn)動(dòng)補(bǔ)償補(bǔ)償?shù)絀幀上,是不是就出現(xiàn)這樣的現(xiàn)象了。然后你會(huì)發(fā)現(xiàn),過一會(huì)這個(gè)馬又沒有了,是因?yàn)橐曨l是基于GOP的,一個(gè)GOP里(一般2秒),只有丟一幀(P幀或B幀),那么整個(gè)2秒的時(shí)間都會(huì)是馬賽克,再來一個(gè)GOP,如果這人GOP幀不丟失的情況,視頻自然就好。
卡頓:為了避免上面的現(xiàn)象,我們一般會(huì)設(shè)置,當(dāng)有一幀丟失的時(shí)候,我們會(huì)放棄整個(gè)的GOP,這樣,你的視頻就會(huì)出現(xiàn)Loading的狀態(tài),Loading時(shí)間決定了你丟的是哪一幀,如果是I幀,那么你得等2秒,如果你丟的是最后一幀,那么你得等1/20秒。
延遲:也許你會(huì)發(fā)現(xiàn),有的時(shí)候打開個(gè)視頻馬上就能看,有時(shí)候要等上一小會(huì),這個(gè)也很好解釋。一個(gè)GOP是從I幀開始的,所以只有加載到第一個(gè)I幀時(shí),才會(huì)開始播放視頻,我們還假定一個(gè)GOP是2秒,如果你運(yùn)氣好,正好取的GOP的I幀,那么就是秒開;如果你運(yùn)氣不好,你的網(wǎng)絡(luò)請(qǐng)求,正好是I幀后面的P幀,那么不好意思,你得2秒,等到下一個(gè)GOP來的時(shí)候,你才能開始播。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/11025.html
摘要:和格式的瀏覽器兼容性移動(dòng)端因?yàn)樘O果公司對(duì)的強(qiáng)烈抵制以及自己定的視頻協(xié)議,所以在端原生支持格式的視頻播放而不支持的播放,而且因?yàn)樘O果在移動(dòng)端的領(lǐng)頭作用,所以其他移動(dòng)端包括瀏覽器也都原生支持格式的視頻播放。 因?yàn)檎`打誤撞來到了淘寶直播團(tuán)隊(duì),從開始完全不了解直播技術(shù),現(xiàn)在因?yàn)閘eader暫時(shí)的離開,準(zhǔn)備接手h5播放器的迭代,就不得不開始了解相關(guān)的視頻技術(shù),先整理一下在直播技術(shù)中的視頻格式和不...
閱讀 3464·2021-11-18 10:02
閱讀 3707·2021-09-13 10:25
閱讀 1920·2021-07-26 23:38
閱讀 2568·2019-08-30 15:44
閱讀 2267·2019-08-30 13:51
閱讀 1223·2019-08-26 11:35
閱讀 2273·2019-08-26 10:29
閱讀 3444·2019-08-23 14:56