2011-11-20 58 views
1

我今天用一個DirectShow圖表進行了一次測試,我在圖表頂部分配了一個捕獲過濾器分配給我的VOIP電話。該應用程序從捕獲過濾器獲取音頻並寫入WAV文件,作爲過濾器圖形操作的一部分。出於好奇,我跑了兩個程序的副本,完全期待其中的一個發出抱怨說捕獲設備「正在使用」的錯誤。讓我驚訝的是,該程序的兩個副本均正常工作,並且每個都創建了自己的錄製音頻的WAV文件。這兩個文件中的音頻都很流暢,沒有問題,而且在包含的音頻數據方面彼此都是雙胞胎。我可以指望能夠在過濾器圖形之間共享DirectShow捕獲過濾器嗎?

我可以指望所有DirectShow捕獲過濾器展現多個過濾器圖形之間共享的能力嗎?或者每個設備/驅動程序都不同?

回答

2

如果過濾器實例不在內部共享任何獨佔訪問資源(例如硬件,特定TCP端口等),則可以自由地在一個進程或多個進程中複製它們。沒有任何影響,因爲特定的過濾器只能在整個系統的單個實例中處於活動狀態。

重要的例子包括:

  • USB視頻捕捉:視頻捕捉裝置通常旨在僅由一個應用而已,所以儘快使用,因爲它是有效時,它被鎖定沒有其他應用程序或過濾器實例可以從中捕獲

  • 音頻播放:流行的用戶模式音頻API是實際播放實現的頂層,內部是驅動程序混合來自多音頻啓用應用程序的音頻;因此當您播放音頻時,不會涉及排他鎖,因爲實際設備是在應用程序之間共享的,並且運行的代碼透明地結合了應用程序的音頻。

+0

Thanks @Roman R.但是,然後一個合理的斷言是,僅僅因爲涉及硬件,這並不意味着它是一個獨佔的訪問資源,是正確的嗎?我這樣說是因爲我能夠分享的設備是我的VOIP電話,它是一個硬件設備。但是,您的回答的第二部分是說,用於音頻的用戶模式API正在爲我進行硬件複用,如果沒有它,我將無法共享它? –

+1

我現在知道你的VoIP設備的細節,但它是否能夠設置同時會話('SIP'?),然後我不明白爲什麼它不能共享。 –

+0

我不知道我的VOIP電話的技術細節,我唯一的經驗是通過它的Moniker選擇它,將其分配給我的捕獲過濾器實例。所以我不知道它是否使用SIP。 –

相關問題