問題背景:
凡是和流媒體和音視頻打交道,時間戳基本是一個必須深刻理解的概念。你會在各種各樣的傳輸協(xié)議和封裝格式中看到這個東西,而且表現(xiàn)形式還不一樣。其次這個概念會涉及到音視頻播放的同步問題,也會影響音視頻播放的控制問題。前者說的是音畫同步,后者說的是類似快進,隨機點播放等。如果要理解好這個概念,需要掌握下面幾個名詞的含義。
基本概念:
采樣率
音視頻現(xiàn)在采用的數(shù)字編碼方法,簡單說就是把音視頻這種波形和圖像進行采集,量化,編碼,傳輸,解碼。所以采樣率就是每秒鐘抽取圖像或者聲波幅度樣本的次數(shù)。比如音頻采樣率8k,就是表示把波形進行每秒8000次采樣。
我們看到一秒的采樣頻率其實挺大的,至于這個值是多少合理,其實無論視頻還是音頻都和人的視覺特征和聽覺特征有關(guān)系。
對于人的視覺而言,只要1秒鐘播放的視頻達到25幀以上,我們就看到了連續(xù)的圖像即為視頻。如果低于這個值,我們?nèi)搜劬湍芨杏X出來卡頓。
對于人的聽覺而言,正常的聽覺頻率范圍在20Hz-20kHz,根據(jù)奎斯特采樣理論,為了保證音頻不失真,我們的采樣頻率應(yīng)該在40kHz左右。為什么采樣率不是越高越好呢,因為采樣率越高意味著你傳輸?shù)臄?shù)據(jù)量越多,這樣給編碼和傳輸都帶了極大的負擔(dān),成本也是個重要考慮因素。
幀率
幀率就是每秒顯示的幀數(shù),比如30fps就是1秒顯示30幀圖像。但是對于音頻可能理解幀率不太好理解,這有點抽象。對于音頻,不同的編碼方式比如AAC和mp3分別就規(guī)定1024采樣sample,mp3每幀為1152采樣,如果一個采樣用一個字節(jié)表示,那就是1024字節(jié)AAC編碼音頻為一幀,1152字節(jié)為MP3編碼方式的音頻一幀。
時間戳單位
前面我們提到采樣率,感覺到采樣率是個很大的單位,一般標準的音頻AAC采樣率達到了44kHz,視頻采樣率也規(guī)定在90000Hz.所以我們衡量時間的單位不能再是秒,毫秒這種真實的時間單位,我們的單位應(yīng)該轉(zhuǎn)換為采樣率,也就是一個采樣的時間為音視頻的時間單位,這就是時間戳的真實值。當(dāng)我們要播放和控制時,我們再將時間戳根據(jù)采樣率轉(zhuǎn)換為真實的時間即可。
一句話,時間戳不是真實的時間是采樣次數(shù)。比如時間戳是160,我們不能認為是160秒或者160毫秒,應(yīng)該是160個采樣。要換算真實時間,我們必須知道采樣率,比如8000,那么說明1秒被劃分成8000分之一,如果你要明確160個采樣占用的時間,則160*(1/8000)即可,即20毫秒。
時間戳增量
就是一幀圖像和另外一幀圖像之間的時間戳差值,或者一幀音頻和一幀音頻的時間戳差值。同理時間戳增量也是采樣個數(shù)的差值不是真實時間差值,還是要根據(jù)采樣率才能換算成真實時間。
所以對于視頻和音頻的時間戳計算要一定明確幀率是多少,采樣率是多少。
比如視頻而言,幀率25,那么對于90000的采樣率來說,一幀占用的采樣數(shù)就是90000/25也就是3600,說明每幀圖像的時間戳增量應(yīng)該是3600,換算成實際時間就是3600*(1/90000)=0.04秒=40毫秒,這也和1/25=0.04秒=40毫秒一致。
對于AAC音頻,一幀1024個采樣,采樣頻率是44kHz,所以一幀的播放時間應(yīng)該是1024*(1/44100)=0.0232秒=23.22毫秒。
同步方法:
上面說了時間戳重要的功能就是來為了音視頻的同步,那么這個時間戳到底是如何讓音視頻同步的呢?
播放器本地需要建立一個系統(tǒng)時鐘,這個時鐘一般是根據(jù)CPU時間計算出來的,當(dāng)播放開始時時鐘時間為0,時間戳決定了一幀解碼和渲染的時刻。當(dāng)播放開始,時鐘時間會進行增加,播放器會用系統(tǒng)時鐘和當(dāng)前視頻和音頻的時間戳進行比較,如果音視頻的時間戳小于當(dāng)前系統(tǒng)時鐘,那么就要晚點進行解碼和渲染播放。文章來源:http://www.zghlxwxcb.cn/news/detail-400193.html
可以看到播放能否準確進行需要編碼器打的時間戳必須精確,同時播放器端的系統(tǒng)時鐘也精確,因為播放時要基于時間戳和這個系統(tǒng)時鐘對數(shù)據(jù)流進行控制,也就是對數(shù)據(jù)塊要根據(jù)時間戳來采取不同的處理方法。實際無論編碼器還是本地播放器都不能非常精確,所以我們說固定幀率25,也有可能編碼器一遍打24幀的現(xiàn)象出現(xiàn)。為了解決這個累計誤差問題,一般我們需要在播放端有一套反饋機制,能夠消除這種誤差。其實,同步是一個動態(tài)的過程,是一個有人等待、有人追趕的過程。同步只是暫時的,而不同步才是常態(tài)。人們總是在同步的水平線上振蕩波動,但不會偏離這條基線太遠。文章來源地址http://www.zghlxwxcb.cn/news/detail-400193.html
到了這里,關(guān)于音視頻基礎(chǔ)知識-時間戳的理解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!