關注IOS、Android網路、音視訊編解碼、特效、Neon演算法優化,DSP等嵌入式驅動開發演算法移植
(1)音訊格式:典型WAV
封裝格式是每個音訊檔案必不可少的組成部分之一,它給我們提供了以下參考資訊。音訊檔案型別、編解碼方法、單雙聲道、取樣深度、取樣率、量化位數、音訊檔案大小、長度。下面首先來分析一下經典的wav音訊的封裝格式。個人精力有限不可能把每種音視訊格式都一一解析,所以這裡分別挑選了音訊:Wav,視訊Mp4兩種多媒體檔案格式介紹:
下面我們對每一個欄位進行詳細的分析。
整個音訊檔案包括三個主要部分:
(1) 檔案頭描述欄位
(2) 資料頭欄位
(3) 資料欄位
(1) 檔案頭描述欄位:
1.1 Chunk ID:“RIFF”標誌位。佔用4個位元組。資料型別char,偏移地址0x00。儲存方式:大端模式
我們任意開啟一個wav音訊檔案:
利用十六進位制到ASCII轉換工具:
剛好是RIFF
1.2 Chunk Size:檔案大小 。佔用4個位元組。資料型別long int,偏移地址0x04。儲存方式:小端模式
首先要把大小端調整一下:
0035E024. 將其轉換為十進位制:3530788
總檔案大小=3530788+4(RIFF4個位元組)+4(Chunk Size) 4個位元組。
總檔案大小=3530796 Byte
我們對比一下:
1.3 Format:檔案標誌位。佔用4個位元組。資料型別char,偏移地址0x08。儲存方式:大端模式。
對應的英文字母:WAVE
(2)資料頭欄位
2.1 Subchunk1 ID:“FMT”標誌位。佔用4個位元組。資料型別char,偏移地址0x0c。儲存方式:大端模式。
2.2Subchunk1 Size:過渡位元組。佔用4個位元組。資料型別int,偏移地址0x10。儲存方式:小端模式。
2.3Audio Format:聲音格式。佔用2個位元組。資料型別int,偏移地址0x14。儲存方式:小端模式.01表示pcm格式。當然,模擬訊號轉化為數字訊號可以有不同的格式。比如常用的PCM、ACM、LAW
2.4Num Channels:聲道個數。佔用2個位元組。資料型別int,偏移地址0x16。儲存方式:小端模式。02 00 。對應的2個通道
2.5 Sample Rate:取樣率。佔用4個位元組。資料型別int,偏移地址0x18。儲存方式:小端模式.
0000AC44-》44100 取樣速率。
2.6 Byte Rate:音訊傳輸速率。佔用4個位元組。資料型別long int,偏移地址0x1c。儲存方式:小端模式
音訊傳輸速率:176000 176KB
其實這個根據上面的引數是能計算出來的。
音訊傳輸速率(每秒傳輸的位元組數)=取樣率(每秒取樣個數)*通道個數*每個取樣點的位元組數(每個取樣點16位,佔2個位元組)
這個引數什麼作用呢?它直接決定播放這種音訊檔案需要多大的頻寬。
頻寬:頻寬指單位時間能通過鏈路的資料量。通常以bps來表示
所以,如果播放這個音訊,大約需要 1.375M 頻寬以上,才能直播音訊。否則只能緩衝來播放了。實際上一般不用WAV,都用AAC等壓縮率高的音訊檔案格式。
2.7 Block Align:資料塊調整。佔用2個位元組。資料型別int,偏移地址0x20。儲存方式:小端模式
2.8 Bits perSample:每個樣本中資料位數。佔用2個位元組。資料型別int,偏移地址0x22。儲存方式:小端模式
10 00這個是啥意思呢?通俗理解就是每個取樣點所佔的位數。這裡是十六。說明44100的取樣點,每個點是16個bit的。
(3)資料欄位
3.1 Subchunk2 ID:“data”識別符號。佔用4個位元組。資料型別char,偏移地址0x24。儲存方式:大端模式
3.1 Subchunk2 Size:音訊檔案長度。佔用4個位元組。資料型別long int,偏移地址0x28。儲存方式:小端模式
一個是檔案長度,一個是音訊資料長度。二者偏移地址分別是0x04 0x28 。剛好相差0x24個位元組。
3.3 Date:為音訊資料。長度等資訊由具體音訊檔案決定。
這裡可以把一些音訊加密等資訊放在這裡。或者把音訊加密的一些key放在音訊檔案頭部。