2013-10-04 84 views
2

見:https://superuser.com/questions/653725/vlc-output-to-directshow(重新張貼在這裏,因爲它沒有得到太多的關注在那裏,我願意寫軟件,如果需要解決這個問題。)VLC輸出到DirectShow的源過濾

簡短的版本:我想一個虛擬的DirectShow源設備(看起來像網絡攝像頭或類似的東西),而不是使用真正的設備,將通過播放列表播放時從VLC獲得視頻幀。 (從而允許另一個只瞭解攝像頭的應用程序查看內容。)

如果需要,我可以編寫一些代碼(儘管這看起來應該是已經存在的事情)或者使用其他方式VLC如果簡化了事情。

我以前沒有爲DirectShow或VLC編寫代碼,但我很樂意學習。或者如果任何人可以指出我已經存在的合適的東西(無論是作爲應用程序還是作爲代碼),那將是更可取的。然而這是一個愛好者的事情,所以我沒有尋找任何昂貴的東西。

回答

1

要將數據注入DirectShow管道,您需要一個定製的或第三方組件。這項任務沒有標準組件。進行數據注入的最近的Windows SDK示例是Push Source Filters。這是一個數據源,它可以擴展爲其他應用程序可以在Capture Source Filter項目中識別的設備。這些是流行的起點。

另一方面,此組件需要從VLC獲取數據。由於它是另一個應用程序,因此需要在那裏進行某種進程間通信。也許最簡單的是 - 尤其是。如果您對質量和延遲沒有特定的要求 - 在VLC上設置網絡流,以便可以使用套接字上衆所周知的協議讀取流。這也讓您可以選擇讓應用程序通過網絡運行。擁有標準的協議流,你可以在上面的段落中找到一個現有的任務過濾器(並避免開發)。

更嚴格的要求:延遲,圖像質量和/或幀率,視頻/音頻同步,目標應用程序擬合,無聲搜索或效果 - 基本上列表中的任何內容可能仍需要通過開發或閱讀這些文件直接沒有VLC。對於一個嗜好的東西,你可能很好地在現有的東西上構建它。

+0

我發現最終應用程序比我想象的更具限制性。我構建了PushSource示例並對其進行了註冊,但它並未在應用程序中顯示爲有效來源。我猜測它正在尋找捕獲設備,而不是一般的來源。 – Miral

+0

我給了你上面第二個鏈接,其中包含設備列表中出現的項目。它基本上是'PushSource' +添加了所需的接口('IAMStreamConfig','IKsPropertySet')+在設備類別下正確註冊。 –

0

現有解決方案 - VisioForge Virtual Camera SDK。它包括2個濾波器,一個濾波器接收器,必須用作VLC播放器的輸出,第二個濾波器 - 虛擬攝像機設備。

+0

我不確定VLC是否有選項輸出到DirectShow。或者至少如果是這樣,我不知道它在哪裏。 – Miral

+0

此外,300歐元的價格標籤不符合我對「愛好者」的定義。 – Miral