采樣率卧蜓、比特率、幀率
- 采樣率:每秒鐘的采樣次數(shù)把敞,聲音/畫面越高越連貫弥奸,單位為Hz
- 比特率:在視頻領(lǐng)域又稱碼率,每秒傳送的bit數(shù)奋早,越高則傳的數(shù)據(jù)越多且畫質(zhì)越清晰盛霎,單位為bps(bit per second)赠橙,
MediaFormat.KEY_BIT_RATE
- 碼流率/碼率/采樣率:單位時間使用的數(shù)據(jù)流量,單位kb/s愤炸。該值越大期揪,則精度越高,畫面質(zhì)量越高规个,體積越大
- 幀率/幀速率:每秒鐘刷新的圖片幀數(shù)凤薛,單位fps(frame per second)。該值越高诞仓,動畫越流暢缤苫,越逼真。
MediaFormat.KEY_FRAME_RATE
幀
- 視頻播放是一幀一幀的畫面按照時間順序呈現(xiàn)出來的
- 為保證傳輸墅拭,會對視頻進行壓縮活玲,所以,每一幀并不都完整
- 視頻幀分為:I幀帜矾、P幀翼虫、B幀
I幀
:幀內(nèi)編碼幀,不依賴前后幀
P幀
:幀間預(yù)測編碼幀屡萤,需參考前面的I幀才能進行編碼珍剑。表示當(dāng)前幀與前一個I幀或者P幀的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別死陆,生成最終畫面招拙。
B幀
:雙向預(yù)測編碼幀湖苞,記錄的是本幀與前后幀的差別镜盯。解碼時不僅要取得之前的緩存畫面,還要解碼之后的畫面川背,通過前后畫面與本幀數(shù)據(jù)的疊加取得最終畫面领虹。
I幀只考慮本幀规哪;P幀記錄與前一幀(前一個I幀或者P幀)的差別;B幀記錄的是前一幀及后一幀的差別
問題
1. B幀或P幀提前到達塌衰,必然會導(dǎo)致視頻無法解碼诉稍,如何解決?
2. 三種幀之間的解碼依賴關(guān)系如何最疆?
3.三種幀解碼順序如何杯巨?解碼順序和顯示順序有何關(guān)聯(lián)?
說明
采集階段:
假定攝像頭采集幀順序為a b c d e努酸。
最終編碼結(jié)果是:a編碼成I幀服爷,b、c、d編碼成B幀仍源,e編碼成P幀心褐。
編碼階段:
1 先編碼a,編成I幀
2 b笼踩、c檬寂、d編碼成B幀,先緩存并記錄采集時間點戳表,后續(xù)作為PTS基準(zhǔn)
3 編碼e,編成P幀 (注意:e雖先編碼昼伴,DTS相對b匾旭、c、d靠前圃郊,但采集時間晚价涝,因此PTS大于b、c持舆、d)
4 編碼b色瘩、c、d逸寓,編成B幀
存儲階段:
編碼后立即經(jīng)過mux寫文件居兆,所以存儲順序和編碼順序是一致的,編碼順序(DTS)為:
a(I) e(P) b(B) c(B) d(B)
解碼階段:
a為I幀竹伸,e為P幀需要以a為基準(zhǔn)才能解碼泥栖,b、c勋篓、d為B幀需要以a和e為基準(zhǔn)才能解碼吧享,所以最后解碼順序為:
a e b c d
顯示階段:
幀的解碼順序由DTS決定,但幀的顯示順序由PTS決定譬嚣,該順序即為采集順序钢颂,因此,顯示順序為:
a b c d e
DTS拜银、PTS
- DTS(Decoding Time Stamp):解碼時間戳殊鞭,用于告訴播放器該在什么時候解碼這一幀的數(shù)據(jù)。
- PTS(Presentation Time Stamp):顯示時間戳盐股,用于告訴播放器該在什么時候顯示這一幀的數(shù)據(jù)钱豁。
- 當(dāng)視頻流中無B幀時,通常DTS和PTS的順序是一致的
- 音頻中無B幀疯汁,所以音頻的DTS和PTS順序是一致的
音視頻同步牲尺,通常需要選擇一個參考時鐘,參考時鐘上的時間是線性遞增的,編碼音視頻流時依據(jù)參考時鐘上的時間給每一幀數(shù)據(jù)打上時間戳谤碳。播放時溃卡,讀取數(shù)據(jù)幀上的時間戳,同時參考當(dāng)前參考時鐘上的時間來安排播放蜒简。