音視頻檔案是經過編碼、封裝而成的,那么反過來,要播放音視頻檔案,首先得解封裝、解碼,上一篇博客討論到音視頻編碼:https://blog.csdn.net/u011686167/article/details/108590762,我們來個上下呼應,本文與大家探討一下音視頻解碼,本質上,是按照既定的解碼協議去決議編碼內容,也就是編碼的逆程序,常見的視頻解碼器有:H264、H265、VP8、VP9、MPEG4、MJPEG、WMV3、MSMPEG4V3,常見的音頻解碼器有:MP3、AAC、FLAC、AC3、OPUS、VORBIS、AMR、WMA,
一、視頻解碼
1、pts與dts
dts:Decode Timestamp,解碼時間戳,決定什么時候解碼該幀資料,
pts:Presentation Timestamp,顯示時間戳,決定什么時候顯示該幀影像,以參考時鐘為基準,超前參考時鐘則等待,落后(在30ms與500ms之間)參考時鐘則快速渲染,十分落后(超過500ms)參考時鐘則丟棄該幀,參考時鐘分為三種:系統時鐘、音頻時鐘、視頻時鐘,一般以音頻時鐘作為參考時鐘,因為人類對聲音更加敏感,相對影像而言,
2、關鍵幀與非關鍵幀
關鍵幀:I幀為關鍵幀,所以I幀可以直接解碼還原出一個影像,
非關鍵幀:P幀與B幀為非關鍵幀,需要依賴關鍵幀才能解碼,而B幀是雙向預測幀,還要另外等待下一個I幀或P幀,才可以成功解碼出來,B幀壓縮率比較高,但是編解碼復雜度也相對高,
3、組包與拼幀
有些封裝格式會把一幀資料拆成若干包,比如wmv格式,因為關鍵幀資料可能比較大;RTP封裝資料時,也會把一幀拆成若干包,因為MTU規定網路層最大傳輸單元為1500bytes,因此,在解封裝或者接收網路資料包時,需要根據序號排列,把若干個包組成一個完整包,然后再解碼,例如FFmpeg讀取一幀資料程序,原始碼在avformat/utils.c中,如下圖所示(參考雷神博客):

圖1—FFmpeg 讀幀資料程序
4、特定幀頭
在決議h264/h265編碼的視頻幀時,需要在幀頭添加起始碼,一般起始碼為0x00 0x00 0x01或者0x00 0x00 0x00 0x01,比如mp4封裝格式,一般是以h264為視頻編碼、aac為音頻編碼,
二、音頻解碼
1、planar與packed存盤
planar:每個聲道資料單獨存盤,以立體聲道為例,L表示左聲道,R表示右聲道,那么存盤格式為LLLLRRRR,在FFmpeg中,第i個聲道資料存盤在frame->data[i],類似視頻的像素格式YUV420P,Y、U、V三個分量單獨存盤,4個Y分量對應一個U分量與一個V分量,
packed:所有聲道資料交錯存盤,同樣地,以立體聲道資料為例,那么存盤格式為LRLRLRLR,在FFmpeg中,所有聲道資料都存盤在frame->data[0],類似視頻的YUV420SP,Y獨立存盤,UV交錯存盤,4個Y分量對應一組UV分量,
2、量化位數
量化位數:量化位是對模擬音頻信號的幅度軸數字化,它決定了模擬信號數字化的動態范圍,量化位數越大,質量越好,bitsPerSample,占2bytes,一般為8bits、16bits、32bits、64bits,在WAVE的Format chunk有定義,如下表所示:
| 域 | 長度 | 內容說明 |
|---|---|---|
| ckID | 4 | Chunk ID: "fmt ",FOURCC四位元組碼,注意最后一個填充是空格, |
| cksize | 4 | Chunk size: 16 or 18 or 40 |
| nChannels | 2 | Number of interleaved channels,聲道數(交織存盤) |
| nSamplesPerSec | 4 | Sampling rate (blocks per second),音頻采樣率 |
| nAvgBytesPerSec | 4 | Average bytes rate,音頻平均碼率 |
| nBlockAlign | 2 | Data block size (bytes),音頻資料塊大小(單位位元組) |
| wBitsPerSample | 2 | Bits per sample,量化位數(比如8bits、16bits、32bit |
| cbSize | 2 | Size of the extension (0 or 22),擴展欄位長度 |
| wValidBitsPerSample | 2 | Number of valid bits,有效的位長度 |
| dwChannelMask | 4 | Speaker position mask,聲道描述掩碼 |
| SubFormat | 16 | GUID, including the data format code |
表1—Format chunk結構
3、采樣率
音頻采樣率是指錄音設備在1秒時間內對聲音信號的采樣次數,采樣頻率越高,那么聲音的還原越真實自然,常見的采樣率有8000Hz、16000Hz、32000Hz、44100Hz、48000Hz,其中44100Hz可達到CD音質標準,也是目前最為常用的采樣率,
4、聲道數與聲道布局
常見聲道數有:單聲道、立體聲道、3聲道、4聲道、5聲道、6聲道、7聲道、8聲道,其中3聲道以上,又稱為立體環繞聲道,其中杜比音效就是采用多聲道同時輸出,實作立體環繞效果,
聲道布局的各個聲道描述如下:
FC: front center
BC: back center
FL/FR: front left/right
FCL/FCR: front center left/right
FTL/FTR: front top left/right
SL/SR: back surround left/right
BL/BR: back left/right
LFE: low frequency effects
聲道數與聲道布局關系,如下表所示:
| 聲道數 | 聲道布局 | 描述 |
| 1 | mono | <FC> |
| 2 | stereo | (FL, FR) |
| 3 | 3.0 | <FC>, (FL, FR) |
| 4 | 4.0 | <FC>, (FL, FR), <BC> |
| 5 | 5.0 | <FC>, (FL, FR), (SL, SR) |
| 6 | 5.1 | <FC>, (FL, FR), (SL, SR), <BC>, [LFE] |
| 7 | 6.1 | <FC>, (FL, FR), (SL, SR), <RC>, [LFE] |
| 8 | 7.1 | <FC>, (FCL, FCR), (FL, FR), (SL, SR), [LFE] |
表2—聲道數與聲道布局關系
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/144135.html
標籤:AI
上一篇:破解彩虹貓病毒
