您的任務非常不尋常,並且沒有任何媒體基礎組件允許將兩個視頻流合併爲一個。然而,'IMFMediaSesion'支持通過'MFCreateAggregateSource'在一個源中處理兩個視頻流。這意味着像'LEGO'這樣的媒體基金會可以讓您自行撰寫解決方案,將兩個視頻流合併爲一個像畫中畫一樣的視頻流,但它本身並不支持這種功能。
問候。
P.S.我想建議閱讀'開發微軟媒體基礎應用程序' '安東波林格'(Developing Microsoft® Media Foundation Applications) - 它包含了很多例子的一個流,但它包含了'WaterMarkTransform'的代碼 - 用於注入圖像的代碼Media Foundation Transform進入視頻流 - 爲您的解決方案啓動此類代碼凸輪 - 將一個視頻流注入另一個視頻流。
P.S.我有一個錯誤 - 我看到你只想顯示畫中畫 - 所以EVR - 默認的視頻渲染器支持16個視頻流 - 一個參考和15個額外的 - 你需要通過'MFCreateVideoRendererActivate'創建'VideoRenderer',然後創建每個視頻流(對於兩個流中的每一個,你的情況)TopologyNode
,爲每個TopologyNode
設置已經通過設置'SetObject'創建的'VideoRenderer' - 結果許多視頻流將使用ONE'VideoRenderer'。BY設置SetUINT32
爲TopologyNode
'MF_TOPONODE_STREAMID',您必須選擇哪個流將參考 - '背景圖片' - 通過設置0,以及哪個流將爲'MF_TOPONODE_STREAMID'大於0(例如1)的additional Picture
。 additional Picture
的位置可以通過IMFVideoMixerControl來控制 - 它包括下列方法: GetStreamOutputRect - 檢索合成矩形內視頻流的位置。
GetStreamZOrder - 檢索視頻流的z順序。
SetStreamOutputRect - 設置合成矩形內視頻流的位置。
SetStreamZOrder - 設置視頻流的z順序。
這就是我所做的,但現在我正努力在一個窗口中分別顯示兩個視頻。我試圖使用'm_pVideoMixerControl-> SetStreamOutputRect(0,&rect)',但它不起作用。如何做到這一點。 – User7723337
你通過什麼值。 rect在0.0到1.0的範圍內。例如MFVideoNormalizedRect rcHalf = {0.0,0.0,0.5,0.5};同時使用m_pStreamSink-> GetIdentifier檢查流的標識符是否正確。 – mofo77