2013-02-25 57 views
1

我試圖使用從「http://directshownet.sourceforge.net/」DirectShot.Net包裝從一些視頻文件中提取幀。DirectShow.Net沒有組合的過濾器,但在GSpot罰款

每當我運行DxScan示例應用程序。我得到一個「沒有中間過濾器的組合可以發現,使連接。」這發生在WMV文件,MP4文件,AVI文件中。我在示例應用中指出的任何媒體。

如果我使用GSpot編解碼器工具打開任何視頻,並要求它渲染圖形,那麼這樣做沒問題。所以這臺機器肯定能夠播放內容。

我在Win 7 64位上。針對x64,x86或Auto引發同樣的錯誤。包括以管理員身份運行Visual Studio。

我修改了示例代碼,嘗試找到包含以下Romain R建議的視頻媒體類型的正確引腳。

我使用:

  IEnumPins epins; 
      capFilter.EnumPins(out epins); 
      IntPtr fetched = Marshal.AllocCoTaskMem(4); 
      IPin[] pins = new IPin[1]; 
      while (epins.Next(1, pins, fetched) == 0) 
      { 
       PinInfo pinfo; 
       pins[0].QueryPinInfo(out pinfo); 
       IEnumMediaTypes mtypes; 
       pins[0].EnumMediaTypes(out mtypes); 
       AMMediaType[] types = new AMMediaType[1]; 
       while(mtypes.Next(1, types, new IntPtr()) == 0){ 
        var majorType = types[0].majorType; 
        if (majorType == MediaType.Video) 
        { 
         //This is never reached 
        } 
       } 
      } 

對於MP4文件,它從來沒有打上面的註釋行。但是,對於WMV文件,演示現在可以正常運行。

大概,這是因爲它沒有找到合適的MP4文件過濾器。這是晦澀的內容將在Windows媒體播放器播放罰款。

這是可能的原因嗎?

回答

0

DxScan示例正在以不可靠的方式構建過濾器圖形,特別是假設從源過濾器爲媒體文件提供的第一個引腳是視頻引腳。情況並非總是如此。更好的圖形構建方法應該工作得很好。您可能需要逐步瞭解哪條線路有錯誤。最有可能的是,它將連接Sample Grabber Filter輸入引腳。

UPD。請注意,原始濾波器可能沒有輸入引腳,它需要額外的濾波器,所謂的解析器/解複用器濾波器將流轉換爲視頻幀和音頻採樣。 DirectShow API提供Render*方法來幫助建立圖表,以便建議此鏈和DxScan所做的直接連接所需的鏈接。

也就是說,DxScan可能不是最好的樣本,本地API的MSDN樣本/參考可能更適合用DirectShow起飛。

您的遊樂場和主要研究和API探索工具應該是Windows SDK(GraphStudio的GraphEdit或GraphStudioNext作爲備選改進選項),而不是DirectShow.NET包裝庫樣本。

這是晦澀的,因爲內容將在Windows媒體播放器中正常播放。

WMP不使用DirectShow進行播放。

+0

你知道如何檢測DShow.Net中的視頻引腳的例子嗎? – 2013-02-25 15:36:18

+0

您通過引腳迭代,您可以枚舉其上的媒體類型。如果枚舉的第一個媒體類型具有'majortype == MEDIATYPE_Video',則它是一個視頻引腳。 – 2013-02-25 15:38:33

+0

使用上面的代碼,它似乎沒有返回任何具有majortype MediaType的引腳。視頻 大概我正在測試正確的過濾器上的引腳(捕獲過濾器) – 2013-02-25 16:20:18

相關問題