2010-11-07 54 views
0

我一直在檢測音頻和視頻設備,並構建捕獲圖,但在最後一個過濾器中,我無法渲染它們兩個。如何在C#中使用DirectShowNet呈現視頻和音頻文件?

  DsDevice dev = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice)[0]; 
      hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, null, dev.Name, out capFilter); 
      Marshal.ThrowExceptionForHR(hr); 

      DsDevice audioDv = DsDevice.GetDevicesOfCat(FilterCategory.AudioInputDevice)[0]; 
      hr = m_FilterGraph.AddSourceFilterForMoniker(audioDv.Mon, null, audioDv.Name, out audioFilter); 
      Marshal.ThrowExceptionForHR(hr); 

      asfWriter = ConfigAsf(capGraph, szOutputFileName); 

      hr = capGraph.RenderStream(null, MediaType.Audio, audioFilter, null, asfWriter); 
      Marshal.ThrowExceptionForHR(hr); 
      hr = capGraph.RenderStream(null, MediaType.Video, capFilter, null, asfWriter); 
      Marshal.ThrowExceptionForHR(hr); 

這是我嘗試的一段代碼,我應該選擇其他的MediaType嗎?

回答

2

我是一名C++ directshow開發人員,我不熟悉DirectShow.net,因此我無法對您的代碼發表評論。

但我有很多的經驗DSHOW ...

要寫入的視頻和音頻媒體流文件時,你需要一個多路複用器過濾。

從您的源濾波器中,視頻和音頻引腳都應該連接到多路複用器的多路複用器濾波器。從那裏,多路複用濾波器的(單引腳)輸出將連接到File Writer filter

複用器過濾器取決於正在使用的介質類型。您無法將兩個流連接到您的多路複用器過濾器將表明它不支持一種(或兩種)媒體類型。

在這種情況下,進行一些測試 - 例如,只渲染視頻流到磁盤,然後只渲染音頻磁盤。至少其中一個將不起作用 - 這是違規的媒體類型。

您可以嘗試使用谷歌搜索替代多路複用過濾器,編寫自己的過濾器,或更改源流的媒體類型。

希望這至少有一些幫助!

相關問題