標籤:mf media foundation 多媒體架構 dshow windows
該筆記參考書籍《Developing Microsift Media Foundataion Application》,因此有不少是從該書中摘錄的,如有侵權,不勝惶恐!
MF核心概念:component(組件),這裡的組件類似於directshow的filter,即針對某一特定功能封裝成一個component,該特定功能可以是解碼,編碼,渲染等等,通過把這些component組合,形成pipeline,就可以完成多媒體應用程式所需的各種功能,跟directshow連結filter一樣,保持filter功能的獨立性同時又提供靈活多變的組合功能。其實OpenGL也有pipeline一說,通過一道道工序完成最後螢幕中所想要輸出的圖形映像。
一個完整的檔案播放pipeline,如所示(從《Developing Microsift Media Foundataion Application》書中複製而來):
小的矩形框,例如“Audio decoder”、“Video decoder”即為component組件,整個的chain鏈路形成一個pipeline,完成檔案播放功能。該鏈路可以切成3個部分:檔案源、資料解碼、渲染,在dshow裡面則分別對應source filter,transform filter,render filter,但在MF裡面有專門的術語,以下一一描述:
1. MF sources:對應圖中的File source,源頭的意思,用來產生資料以給後面組件處理,這裡的資料可以是來自本地檔案(如),也可以是來自網路。還應該注意的是該File source其實還做了音視頻資料分離的工作,以分別針對後續組件(音頻解碼和視頻解碼)。
2. Media Foundation transforms (MFTs): 對應圖中的Audio decoder和Video decoder,用來“轉換”(transforms),解碼嘛,很明顯。
3. MF sinks:對應圖中的Audio render和Video render,sink字面解釋"滲透"、“下沉”,該組件可以用來做最終資料的渲染,也可以用來把資料發送至網路另一端,例如視訊通話中把本地視頻編碼並在MF sinks中打包碼流發送給網路另一端。
而以上三種類型component的串連,則是基於它們各自的輸入輸出類型,例如假設Video decoder的輸入是h.264碼流,輸出是yuv映像,則它上遊的file source的輸出最起碼能支援h.264碼流輸出,否則這兩個component就串連不成功;同樣video decoder的下遊video render的輸入類型也得是支援yuv映像輸入的。可能以上描述不夠嚴謹,但大致就是這個意思,到具體代碼的時候再詳加分析。
接下來要描述的是組件之間的資料傳遞,在MF中是以Media Sample來描述傳遞的資料,Media sample中還包括資料的屬性(不僅僅是raw data)。DShow也是用的IMediaSample來傳遞資料,很和諧啊。
最後描述的是MF的調試工具,乖乖,名字是“topoedit”,騷年,DShow的是“graphedit”!windows sdk裡面還有topoedit源碼,不錯喲,可以研究下。
談談感受,看完該章感覺和DShow結構模型類似,只是換了些說法,還沒體會到MF的精髓啊!待續。。。
Windows Media Foundation學習筆記1——MF核心概念