我正在嘗試使用 C 撰寫一個小型 DirectShow 應用程式。我的主要問題是從麥克風中獲取原始資料并將其保存為位元組。
這可以使用 DirectShow 過濾器嗎?我應該使用什么介面來獲取資料?
現在,我可以使用以下圖形過濾器來實作寫入錄制的 AVI 檔案:
麥克風->Avi Mux->檔案撰寫器
該圖作業正常。
我曾嘗試使用 SampleGrabber(已被 Microsoft 棄用),但我對如何處理這種 BaseFilter 型別缺乏了解。
uj5u.com熱心網友回復:
按照設計,DirectShow 拓撲需要完整,從源(麥克風)開始,到渲染器過濾器終止,并且DirectShow 管道中的資料交換對連接的過濾器是私有的,而不會將資料暴露給控制應用程式。
這讓您感到困惑,因為您顯然想將內容從管道匯出到外部世界。這并不是 DirectShow 設計的作業方式。
“預期”、“DirectShow 方式”是開發一個自定義渲染器過濾器,該過濾器將連接到麥克風過濾器并接收其資料。開發人員通常不喜歡這條路,因為開發自定義過濾器有點復雜。
流行的解決方案是構建管道 Microphone --> Sample Grabber --> Null Renderer。Sample GrabberSampleCB是一個過濾器,它使用回呼公開傳遞的資料。即使隨著時間的推移變得越來越難,你仍然可以找到大量的代碼來完成這項作業。大多數開發人員更喜歡這種方法:使用即用型塊構建管道,而忘記 DirectShow API。
然后另一種選擇是根本不使用 DirectShow。鑒于它的狀態,這個 API 選擇是不幸的,您應該改為查看WASAPI 捕獲。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/532623.html
標籤:温纳皮直播
