我已經使用Delphi Pro 6和DSPACK DirectShow庫編寫了Skype使用的DirectShow推送過濾器。在預覽模式下,當您在Skype客戶端視頻設置窗口中測試視頻輸入設備時,我的過濾器完美無缺地工作。我可以保持它運行許多分鐘而不會出錯。DirectShow過濾器我在Skype視頻通話中寫了10-24秒後死亡
但是,當我在10到24秒後開始視頻通話時,視頻輸入會凍結。通話持續時間計數器點擊秒數後,通話仍然正常,但視頻輸入已死,停留在發生凍結的任何幀(雖然過了很長一段時間,它變成黑色,我相信Skype意味着放棄了過濾器)。我嘗試從我的調試器中附加一個斷點,在每次方法調用時都設置一個斷點,並且一旦發生凍結,它們都不會被命中。就好像讓DirectShow FillBuffer()調用我的過濾器代表Skype的線程已經死機或者已經關閉了一樣。
我無法在調試器中跟蹤我的過濾器,因爲在Skype調用期間,當Skype視頻通話正在進行時,我得到了奇怪的int 1和int 3調試器硬中斷呼叫。即使選擇了我的標準網絡攝像頭輸入設備,並且我的DirectShow過濾器作爲ActiveX服務器完全取消註冊,也會發生此行爲。我懷疑它可能是一些「反調試」代碼,因爲它不會在視頻輸入預覽模式下發生。無論哪種方式,這就是爲什麼我必須在事實之後重視流程,以查看我調用的FillBuffer()是否仍然被調用,而發現它看起來已經死亡。
請注意,我的普通香草USB網絡攝像頭的DirectShow濾鏡不會顯示凍結行爲,並且可以在很多分鐘內正常工作。 Skype不喜歡我的過濾器。我已經嘗試了Sleep()語句的變化間隔,沒有Sleep語句,在FillBuffer()調用中幾乎沒有做任何事情。沒什麼幫助。
如果任何人有任何想法可能是這裏的罪魁禍首,我想知道。
感謝, 羅伯特