我正在使用 Directshow 制作一個小型實時音頻-視頻應用程式。我使用 SampleGrabber 從音頻捕獲過濾器中抓取樣本。SampleGrabber 的回呼每秒呼叫一次,每個樣本的大小為 88200 位元組。我列印了 WAVEFORMATEX:
WAVE_FORMAT_PCM: true
nChannels: 2
nSamplesPerSec: 44100
nAvgBytesPerSec: 176400
nBlockAlign: 4
wBitsPerSample: 16
cbSize: 0
所以我有兩個問題:
Directshow 方面的“樣本”與錄音中的“樣本”是否不同?因為據我所知,每秒有 44100 個樣本(每個花費 16 位),而 directshow 的 SampleGrabber 每秒只能抓取 1 個樣本(每個花費 88200 位元組)。看起來很多樣本被聚合并放入“緩沖區”?
如果將大量音頻樣本放入緩沖區,則緩沖區的大小應為每秒 176400 位元組。為什么每個緩沖區只有 88200 位元組?是否只使用了 1 個通道?
uj5u.com熱心網友回復:
Directshow "sample" 是帶有資料的緩沖區的術語:
當一個 pin 將媒體資料傳送到另一個 pin 時,它不會將直接指標傳遞給記憶體緩沖區。相反,它提供一個指向管理記憶體的 COM 物件的指標。此物件稱為媒體樣本,公開 IMediaSample 介面。
然后
...大小應為每秒 176400 位元組。為什么每個緩沖區只有 88200 位元組?
不,不應該。您將看到捕獲過濾器的默認行為以生成 500 毫秒的緩沖區。您可以使用IAMBufferNegotiation界面(相關 問題和搜索其他)來覆寫此行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/373616.html
上一篇:使用向量回傳型別遍歷二叉樹
