Windows Media Foundation 音視頻採集 小記

來源:互聯網
上載者:User

標籤:

寫在前面

我是個講文明的人…… 不過有的時候實在忍不住了也要吐槽幾句:

1. 我真是跟不上時代,到現在了還在研究 Windows 應用開發…… 咳;

2. DirectShow 是傻X!我只是想要擷取 Camera 裸資料,尼瑪卻要讓我學習神馬各種 .ax, filter, graph... 相關資料少、又晦澀;

3. 在此祝願 Windows XP 及其之前的版本早點退出曆史舞台,這樣 DirectShow 就不是必須的了!

 

音視頻採集Windows 7 以後, Media Foundation 支援音視頻採集。視頻採集裝置必須支援 UVC 1.1 驅動。 音頻採集裝置通過 Windows Audio Session API (WASAPI) 來支援。採集裝置在 Media Foundation 中表現為 Media Source 對象,暴露出 IMFMediaSource 介面。但是一般情況下應用程式不會直接用這個介面,而會使用更高層的API,比如 Source Reader 來控制採集裝置。枚舉採集裝置們:1 調用 MFCreateAttributes 函數建立屬性庫;2 設定 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE 屬性(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID 或 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID);3 調用 MFEnumDeviceSources 函數就會得到一群組 IMFActivate 指標。每個指標就是一個裝置;4 調用 GetAllocatedString 函數 可以擷取裝置名稱,其中,4.1 用 GetAllocatedString 函數 的 MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME 參數可以擷取顯示名稱4.2 用 GetAllocatedString 函數 的 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK 參數可以擷取視頻採集裝置的實體名稱,名稱是唯一的,但不好閱讀4.3 用 GetAllocatedString 函數 的 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID 參數可以擷取音頻採集裝置的實體名稱,名稱是唯一的,但不好閱讀5 調用 IMFActivate::ActivateObject 或 MFCreateDeviceSource 方法來建立一個可用的 Media Source 對象執行個體。對於具體的一個採集裝置(建立好了的 Media Source),擷取裝置所支援的格式,並設定採集格式:1 調用 IMFMediaSource::CreatePresentationDescriptor 擷取媒體源(Media Source)的表現描述符(presentation descriptor)2 調用 IMFPresentationDescriptor::GetStreamDescriptorByIndex 擷取視頻流的流描述符(Stream Descriptor)3 調用 IMFStreamDescriptor::GetMediaTypeHandler 擷取流描述符的媒體類型控制代碼(IMFMediaTypeHandler)4 調用 IMFMediaTypeHandler:: 的 GetMediaTypeCount 和 GetMediaTypeByIndex 來擷取每一條目的格式(IMFMediaType,每一條目的格式包含許多屬性,如寬高、採樣格式、幀率),另外,教程還有一些實用函數,用於列印 IMFAttributes 。5 最後, IMFMediaTypeHandler::SetCurrentMediaType 設定指定條目的格式(IMFMediaType)。如果要修改 IMFMediaType 的某個屬性(比如 Frame Rate)的話,就調用 IMFMediaType::SetItem 來設定具體的屬性(比如 MF_MT_FRAME_RATE)。具體要看代碼來理解。

相關文檔:

https://msdn.microsoft.com/en-us/library/dd317912.aspxhttps://msdn.microsoft.com/en-us/library/dd940326.aspxhttps://msdn.microsoft.com/en-us/library/dd940328.aspx (裝置使用時中途丟失的處理,待學)https://msdn.microsoft.com/en-us/library/ee663602.aspxhttps://msdn.microsoft.com/en-us/library/aa473818.aspx (媒體類型)

 

 

其他功能

視頻採集並顯示(MFCaptureD3D): https://msdn.microsoft.com/en-us/library/dd743690.aspx 

音視頻採集 + 編碼(Transcode): https://msdn.microsoft.com/en-us/library/ff485863.aspx

播放媒體檔案:https://msdn.microsoft.com/en-us/library/ms703190.aspx

 

 

代碼地址

在 Windows SDK 的 Samples\multimedia\mediafoundation 目錄中

 

Windows Media Foundation 音視頻採集 小記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.