計算音頻幀的播放時間(音頻碼流 音頻幀)

音頻碼流(冗餘數據佔的比例):
先簡單講一下對於ADTS header的結構的理解:
1)ADTS header位於每個aac幀的開頭,長度通常是7字節(也能夠是9字節的,沒見過)。
2)每一個aac幀的長度固定爲1024個sample(能夠是1024*n,沒見過n>1的狀況)。
3)ADTS header中大部分信息無用,有用的只有採樣率(4bit)、聲道數(3bit)和幀的大小(13bit),這三項總共只有20bit。
mp4格式會集中存放每個frame的index,每一個index佔4個字節。但由於mp4自己還有其餘tag,因此對於較短的小文件冗餘依然比ADTS大。
如一個20kpbs的48kHz he-aac語音,若是用ADTS存放,冗餘數據佔的比例能夠這麼計算
一、每秒的音頻數據量是20/8=2560 Byte;
二、每秒的音頻幀數是24000/1024=23.4375幀;(因爲編碼的aac算法是he-aac,它自帶sbr技術,所以SBR只有一半的採樣率)待實際驗證
3)每秒ADTS header的大小是7*23.4375=164.0625 Byte
4) 冗餘數據佔的比例是164.0625 / 2560 = 6.4%
可見仍是至關大的
mp4格式會集中存放每個frame的index,每一個index佔4個字節。但由於mp4自己還有其餘tag,因此對於較短的小文件冗餘依然比ADTS大。 算法

===============================================================================================
採樣頻率是指將模擬聲音波形進行數字化時,每秒鐘抽取聲波幅度樣本的次數。
。正常人聽覺的頻率範圍大約在20Hz~20kHz之間,根據奈奎斯特採樣理論,爲了保證聲音不失真,採樣頻率應該在40kHz左右。經常使用的音頻採樣頻率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,若是採用更高的採樣頻率,還能夠達到DVD的音質
對採樣率爲44.1kHz的AAC音頻進行解碼時,一幀的解碼時間須控制在23.22毫秒內。
背景知識:
(一個AAC原始幀包含一段時間內1024個採樣及相關數據)根據aac文檔
分析:
1 AAC
音頻幀的播放時間=一個AAC幀對應的採樣樣本的個數/採樣頻率(單位爲s)
一幀 1024個 sample。採樣率 Samplerate 44100KHz,每秒44100個sample,
因此 根據公式
音頻幀的播放時間=一個AAC幀對應的採樣樣本的個數/採樣頻率
(NOTE:該時間可做解碼時間的參考,解碼時間應誤差確保在該時間的必定範圍,異常的話,作必定的異常處理)
如,當前AAC一幀的播放時間是= 1024*1000000/44100= 22.32ms(單位爲ms)

當前AAC一幀的播放時間是= 1024/44100 = 0.02232 s(單位爲秒)=22.32ms(單位爲ms)
反過來,如當想經過音頻緩衝多少ms來計算實際應緩衝多少個音頻幀時,可下計算:
好比對48K緩衝300ms須要多少個buffer,
buffer = 一秒內能產生多少個音頻幀(48000/1024) 乘以 時間比例(300/1000) = (48000*300)/(1024*1000) = 14.0625個。

2 MP3
mp3 每幀均爲1152個字節, 則:
frame_duration = 1152 * 1000000 / sample_rate
例如:sample_rate = 44100HZ時, 計算出的時長爲26.122ms,這就是常常聽到的mp3每幀播放時間固定爲26ms的由來。

===============================================================================================
音視頻流的發送
1 請教大夥
我只作過 MPEG4視頻流的RTP打包傳輸 接收
如今加入了音頻採集 因此要發送 音視頻流
我想請問大夥 在發送時 通常的作法是 音視頻流分開發送
仍是 發送音視頻的合成流?
答案:
直播考慮實時性的話,就可能要考慮丟視頻包、保音頻包;分開傳輸比較好
點播不考慮實時性、要求同步的話,能夠進行緩衝;合併傳輸比較好編碼

如今的話 對合成流打包 就不須要有什麼講究了吧
在接收端 解RTP包 在接 分解 filter 再 分別解壓音視頻流視頻

相關文章
相關標籤/搜索