更新時(shí)間:2019-09-12 09:31:19 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3322次
假設(shè)公司現(xiàn)在在做汽車(chē)終端的平臺(tái),需要了解交通部808,1078的終端協(xié)議.尤其是1078是關(guān)于音視頻的協(xié)議.故此開(kāi)始入坑Java的音視頻解決方案.本系列文章涉及一個(gè)完整的音視頻服務(wù)搭建.
Java音視頻中間庫(kù)
這個(gè)肯定是站在巨人的肩上.我們會(huì)使用JAVACV來(lái)處理所有的視頻,音頻信息.
音視頻基礎(chǔ)知識(shí)
1、圖像像素格式與圖片封裝格式
圖像像素格式(簡(jiǎn)稱像素格式),一般指的是沒(méi)有經(jīng)過(guò)編碼的按照原始像素排列的數(shù)據(jù)。舉個(gè)栗子,一個(gè)完整圖像的像素排列一般是這樣的(以4*4像素的rgb像素格式為例):
當(dāng)然我們存儲(chǔ)的時(shí)候一般使用一維數(shù)組來(lái)存這些數(shù)據(jù),所以排列順序就變成這樣:rgbrgbrgbrgb.......以此類(lèi)推。
圖片封裝格式指的我們?nèi)粘R?jiàn)到的png,jpg,bmp,gif等等圖片格式,其中bmp是無(wú)損格式,里面的數(shù)據(jù)格式就是圖片頭信息加上rgb排列的像素?cái)?shù)據(jù),png/jpg這些都是有損壓縮格式,但是壓縮比還是很高的,為什么要壓縮下面會(huì)講到。(壓縮就是編碼[email protected])
2、圖像與視頻幀
圖像像素?cái)?shù)據(jù)指的是yuv、rgb,rbga,bgr,gbra等圖像像素格式,經(jīng)過(guò)編碼后才是視頻幀。比如我們常見(jiàn)的h264編碼,編碼其實(shí)就是對(duì)圖像像素?cái)?shù)據(jù)的壓縮,(以rgb為例,假如當(dāng)前圖像像素尺寸為1920*1080,,每種顏色用一個(gè)字節(jié)表示,也就是說(shuō)每個(gè)像素點(diǎn)有紅綠藍(lán)三色共3字節(jié),圖像有1920*1080個(gè)像素點(diǎn),也就是說(shuō)這張圖像大小為1920*1080*3字節(jié),顯然數(shù)據(jù)太大了),可以這樣理解,h264編碼本質(zhì)上就是一種圖像數(shù)據(jù)壓縮算法。(一個(gè)像素為啥占用3個(gè)字節(jié),因?yàn)榧t綠藍(lán)三原色
視頻幀中常常提到的I幀,B幀和P幀指的是什么?i幀也叫關(guān)鍵幀,實(shí)際上就是一張完整的靜態(tài)圖像,而B(niǎo)幀和P幀只是用來(lái)記錄畫(huà)面的運(yùn)動(dòng)矢量等非圖像數(shù)據(jù),B/P幀都需要依賴i幀才能夠正確解碼出完整圖像(有損的圖像畫(huà)面)。在實(shí)際應(yīng)用中各種視頻源中很少使用B幀,原因是雖然使用大量B幀可以提高壓縮率,但也會(huì)消耗更多的硬件性能,所以大多數(shù)情況下的視頻源都以i幀(關(guān)鍵幀)和大量P幀為主。
另外在直播應(yīng)用中i幀間隔會(huì)很低,這樣能夠更快的顯示首幀畫(huà)面(B/P幀需要i幀才能夠解碼),但是這樣也增加了傳輸?shù)臄?shù)據(jù)量,因?yàn)橐粋€(gè)i幀通常會(huì)很大。
補(bǔ)充:由于人類(lèi)眼睛的特殊生理結(jié)構(gòu),如果所看畫(huà)面之幀率高于16的時(shí)候,就會(huì)認(rèn)為是連貫的,此現(xiàn)象稱之為視覺(jué)停留。這也就是為什么電影膠片是一格一格拍攝出來(lái),然后快速播放的。
一般來(lái)說(shuō),現(xiàn)在監(jiān)控的攝像頭是25幀。這個(gè)當(dāng)然是工作需要了。實(shí)際上,用攝像頭錄制播放視頻時(shí),只要幀率達(dá)到15,人眼就感覺(jué)是連續(xù)的。這個(gè)有什么用呢?相比25,15幀可以節(jié)省大量的編碼、解碼、刷屏工作。至于10-12,勉強(qiáng)連續(xù),只能說(shuō)某些特殊場(chǎng)合下的選擇了。
幀數(shù)簡(jiǎn)單地說(shuō),幀數(shù)就是在1秒鐘時(shí)間里傳輸?shù)膱D片的幀數(shù),也可以理解為圖形處理器每秒鐘能夠刷新幾次,通常用fps(FramesPerSecond)表示。每一幀都是靜止的圖象,快速連續(xù)地顯示幀便形成了運(yùn)動(dòng)的假象。高的幀率可以得到更流暢、更逼真的動(dòng)畫(huà)。每秒鐘幀數(shù)(fps)愈多,所顯示的動(dòng)作就會(huì)愈流暢。一般來(lái)說(shuō)30fps是可以接受的,所以要避免動(dòng)作不流暢的最低fps是30。除了30fps外,有些計(jì)算機(jī)視頻格式,例如AVI,每秒只能提供15幀。我們之所以能夠利用攝像頭來(lái)看到連續(xù)不斷的影像,是因?yàn)橛跋駛鞲衅鞑粩鄶z取畫(huà)面并傳輸?shù)狡聊簧蟻?lái),當(dāng)傳輸速度達(dá)到一定的水平時(shí),人眼就無(wú)法辨別畫(huà)面之間的時(shí)間間隙,所以大家可以看到連續(xù)動(dòng)態(tài)的畫(huà)面。
3、編碼與封裝
編碼上面已經(jīng)講了,是一種壓縮算法;那么封裝格式又是什么呢,封裝格式就是我們?nèi)粘R?jiàn)到的視頻文件了,比如mp4,avi,mkv,flv等等等,按照每種封裝格式的規(guī)范把視頻幀和音頻按照一定順序存起來(lái)就成我們?nèi)粘?吹降囊曨l文件了,這些封裝格式一般都會(huì)包含一些頭/尾標(biāo)識(shí)和一些視頻描述信息,這樣播放器讀取視頻文件的時(shí)候就知道該怎么播放這些視頻文件了(可以把封裝格式理解成收納箱,上面貼著小紙條說(shuō)明里面放了哪些東西)。壓縮圖片格式也可以參考視頻編碼格式,原理都一樣,都是對(duì)圖像數(shù)據(jù)做有損/無(wú)損壓縮。
4、轉(zhuǎn)封裝與轉(zhuǎn)碼
什么是轉(zhuǎn)封裝?為什么轉(zhuǎn)封裝比轉(zhuǎn)碼消耗更少?為什么轉(zhuǎn)封裝無(wú)法改動(dòng)視頻尺寸?
先舉個(gè)栗子:假設(shè)視頻格式(mp4,flv,avi等)是盒子,里面的視頻編碼數(shù)據(jù)(h264,hevc)是蘋(píng)果,我們把這個(gè)蘋(píng)果從盒子里取出來(lái)放到另一個(gè)盒子里,盒子是變了,蘋(píng)果是沒(méi)有變動(dòng)的,因此視頻相關(guān)的尺寸數(shù)據(jù)是沒(méi)有改動(dòng)的,這個(gè)就是轉(zhuǎn)封裝的概念。有了上面這個(gè)例子,我們可以把“轉(zhuǎn)碼”理解為:把這個(gè)盒子里的蘋(píng)果(hevc)拿出來(lái)削皮切塊后再加工成櫻桃(h264)后再裝到另一個(gè)盒子里,多了一步對(duì)蘋(píng)果(hevc)轉(zhuǎn)換為櫻桃(h264)的操作,自然比直接把蘋(píng)果拿到另一個(gè)盒子(轉(zhuǎn)封裝)要消耗更多機(jī)器性能
5、音/視頻源
音/視頻源可以是視頻文件、音頻文件,流媒體源,設(shè)備等等。
比如我們要看電腦或手機(jī)攝像頭視頻,就得采集設(shè)備的圖像數(shù)據(jù)(從源設(shè)備采集到的是像素?cái)?shù)據(jù),一般是bgr或者rgb像素?cái)?shù)據(jù))如果是某些廠商的商用攝像機(jī),可能會(huì)支持rtsp/rtmp協(xié)議,要采集聲音呢,就得采集錄音/話筒設(shè)備里面的數(shù)據(jù)(一般是pcm采樣數(shù)據(jù))。
6、流媒體協(xié)議
rtsp協(xié)議棧,rtmp協(xié)議棧,hls,http-flv(理論上講這個(gè)flv不能算是流媒體協(xié)議,它只是個(gè)無(wú)限大的flv文件)等等。
例如rtmp,對(duì)編碼后的音視頻幀,要對(duì)其進(jìn)行封裝成flv進(jìn)行傳輸。(說(shuō)到底這些協(xié)議原理上依然是建立在tcp/udp基礎(chǔ)上的應(yīng)用層傳輸協(xié)議。[email protected].)部標(biāo)的1078協(xié)議要求終端設(shè)備的推流協(xié)議是參考的rtp協(xié)議.后面我們寫(xiě)代碼去處理它.
7、流媒體服務(wù)
流媒體服務(wù)就是接受rtsp,rtmp的推流服務(wù)器,并且能接收拉流.后面我們會(huì)搭建一個(gè)rtmp的流服務(wù)器.
8、音頻聲道
音響中的幾聲道指的是音響有幾個(gè)輸出線路,常見(jiàn)的有2.0、2.1、及5.1聲道
1、2.0聲道指的是音響只有左右兩個(gè)聲道輸出聲音。
2、2.1指的是音響有左右聲道和低音三個(gè)聲道輸出。
3、5.1則指的是音響有左右聲道加左右環(huán)繞再加一個(gè)中置和一個(gè)低音輸出。
聲道(SoundChannel)是指聲音在錄制或播放時(shí)在不同空間位置采集或回放的相互獨(dú)立的音頻信號(hào),所以聲道數(shù)也就是聲音錄制時(shí)的音源數(shù)量或回放時(shí)相應(yīng)的揚(yáng)聲器數(shù)量。
聲卡所支持的聲道數(shù)是衡量聲卡檔次的重要指標(biāo)之一,從單聲道到最新的環(huán)繞立體聲.
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編分享的“Java音視頻解決方案-音視頻基礎(chǔ)知識(shí)”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分與你。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743