2012年11月27日 星期二

[DirectShow] 最簡單的 DirectShow Source Filter (Video)

最簡單的 DirectShow Source Filter (Video)
by Jing

如果你的想要寫一個自己的多媒體串流來源, 例如一個特別視訊監控系統中, 特定 camera 的串流, 讓 Windows 上所有的多媒體播放器都能看的到且用得到你的元件. 那使用 DirectShow 可能是一種最簡單而且通常是標準答案的方法, 另一個比較麻煩的方法就是寫一個 Virtual Device Device (這部份的技術, 我們會在下次提到).  

雖然 Media foundation 是用來取代 DirectShow 的新一代多媒體技術, 但是現在有大量的舊有應用程式使用 DirectShow, 所以你現在研究如何製作一個最簡單的 DirectShow Source Filter 依然是一件具有價值的工作.


Outline

  • Quick Guide -- 30 秒了解整個機制
  • Prepare
  • Project Setup
  • Source Code  (download)
    • Dll Setup for Directshow DllEntry function
    • 提供註冊 filter 實作 (for regsvr32)
    • 建構 DirectShow Filter dll 必要條件
  • Test
  • Debug Information
  • FAQs
  • Download
  • References

Quick Guide -- 30 秒了解整個機制

只要實作 CreateInstance method 以及建構子, 即可



你只要實作下面這四個 methods,  filter 就會動了
// 1. 告訴後面的 Filter, 你支援的 media type
HRESULT GetMediaType(CMediaType *pMediaType);
// 2.  配置 buffer 給你的 media
HRESULT DecideBufferSize(IMemAllocator *pAlloc,ALLOCATOR_PROPERTIES *pProperties);
// 3. 填寫 media data 到 media package 中
HRESULT FillBuffer(IMediaSample *pms);
// 4. 處理  qaulity control 事件
inline STDMETHOD(Notify)(IBaseFilter * pSender, Quality q);