2012-08-24 32 views
2

我正在使用Visual Studio 2012並使用C#,我正在使用庫DirectShowLib從我的攝像頭拍攝照片,但我只能拍攝一張照片,如果我試圖把另一個我得到一個異常:DirectShowLib - 無法使用網絡攝像頭拍攝多張照片。 「沒有足夠的系統資源來完成請求的服務」錯誤

DirectShowLib.DsError.ThrowExceptionForHR(Int32 hr) 
    at SnapShot.Capture.SetupGraph(DsDevice dev, Int32 iWidth, Int32 iHeight, Int16 iBPP, Control hControl) in c:\Users\devel_000\Documents\Visual Studio 2012\Projects\ControlAcceso\ControlAcceso\Capture.cs:line 323 
    at SnapShot.Capture..ctor(Int32 iDeviceNum, Int32 iWidth, Int32 iHeight, Int16 iBPP, Control hControl) in c:\Users\devel_000\Documents\Visual Studio 2012\Projects\ControlAcceso\ControlAcceso\Capture.cs:line 86 
    at ControlAcceso.PhotoWindow..ctor() in c:\Users\devel_000\Documents\Visual Studio 2012\Projects\ControlAcceso\ControlAcceso\PhotoWindow.cs:line 32 
    at ControlAcceso.CheckWindow.pbPhoto_Click(Object sender, EventArgs e) in c:\Users\devel_000\Documents\Visual Studio 2012\Projects\ControlAcceso\ControlAcceso\CheckWindow.cs:line 108 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
    at ControlAcceso.Program.Main() in c:\Users\devel_000\Documents\Visual Studio 2012\Projects\ControlAcceso\ControlAcceso\Program.cs:line 18 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

我使用DxSnap例如[link]以拍攝照片。方法中拋出異常SetupGraph [link]

該行DirectShowLib.DsError.ThrowExceptionForHR(Int32 hr)引起了我的注意,這是什麼意思?我怎樣才能解決這個問題?

+1

您需要'hr'的值 - 它描述錯誤。 –

+0

我追蹤了錯誤,並將其從方法setupgraph [link](http://pastebin.com/mszs73UP)的145行中拋出,該行是下面的hr = mediaCtrl.Run();而不是返回1當我拍下第一張照片時,返回值是-2147023446。 –

+0

FYI'-2147023446'爲'0x800705AA'' ERROR_NO_SYSTEM_RESOURCES'「系統資源不足以完成請求的服務。」 (請參閱[本文和工具](http://alax.info/blog/1383)閱讀'HRESULT'值)。我想說,你很可能試圖打開第二條管線,而不是先關閉。並且視頻捕獲設備專門打開,因此出現錯誤。 –

回答

6

錯誤-21470234460x800705AA,ERROR_NO_SYSTEM_RESOURCES「系統資源不足以完成請求的服務」。 (請參閱this post and tool閱讀HRESULT值,方便簡單)。

我會說最有可能你試圖打開第二條管道而不先關閉。視頻捕獲設備是專門打開的,因此如果還有另一個仍處於活動狀態,則無法啓動管道。錯誤代碼正是這個建議。

爲了解決這個問題,您需要確保您在以前的過濾器圖形上調用IMediaControl.Stop,並釋放您不再需要的COM接口,並使用Marshal.ReleaseComObject

相關問題