directshow 采集音視頻數據


  用directshow寫了一個采集本地音視頻數據的庫AVCap. 獲取音視頻采集設備, 指定設備並開始采集后, 給上層應用返回采集的音視頻數據.

  接下來的工作有兩個:

  1. 添加一個預覽采集到的視頻的接口, AVCap是不涉及界面的東西的, 所以不需要MFC的支持, 也不需要用到windows界面相關的API, windows消息機制等, 暫時的想法是上層給它一個句柄就能預覽視頻了.

  2. 對音視頻進行網絡傳輸前的編碼工作, 暫時還沒有定下格式. 

 

  下面簡單說一下dshow采集音視頻的步驟.大部分內容在dshow SDK幫助文檔中Audio Capture, Video Capture兩大章節中都有, 只是我按幫助文檔中的步驟最后使用ISampleGrabber時沒能成功. 只能再次求助SDK中的例子拉. 我的核心代碼大部分來自於samples中editing下stillcap這個示例, 實際上你也完全可以通過學習stillcap示例了解采集過程而跳過下面的內容.

  1. 初始化(或者說建立對象? COM的知識懂的不多)IGraphBuilder, ICaptureGraphBuilder2

  2. 獲取音視頻采集設備

  3. 獲取音視頻采集filter

  4. 初始化ISampleGrabber, 由於stillcap只采集視頻, 這里說下音頻的格式.

AM_MEDIA_TYPE mt;
mt.majortype = MEDIATYPE_Audio;//MEDIATYPE_Video
mt.subtype = MEDIASUBTYPE_PCM;//MEDIASUBTYPE_RGB24
mt.formattype = FORMAT_WaveFormatEx;//視頻采集時沒設置這一項

hr = pGrabber->SetMediaType(&mt);

  5. 使用PIN_CATEGORY_PREVIEW鏈接capture filter -> grab filter -> null filter.

  6. 設置ISampleGrabber的回調

  7. IMediaControl run().

 

  PS:封裝完AVCap后, 如果暫時不考慮觀看視頻, dshow應該就告一段落了, oyeah!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM