C# 尝试连接筛选器时出现AccessViolationException异常

C# 尝试连接筛选器时出现AccessViolationException异常,c#,directshow,directshow.net,C#,Directshow,Directshow.net,我试图用c代码实现一个filtergraph。 这个过滤器在GraphStudionText中非常正常,可以正常工作,但是当尝试连接最后两个过滤器(mpeg mux过滤器和文件编写器过滤器)时,我得到一个AccessViolationException accessviolation错误的原因是什么?通常什么时候发生。你怎么知道怎么修理它?是否错误的原因不是我的代码而是过滤器 链接错误发生在Mpeg-4多路复用器和Filewriter之间 这是我的代码:(错误发生在底部) 我将非常感谢任何帮助

我试图用c代码实现一个filtergraph。 这个过滤器在GraphStudionText中非常正常,可以正常工作,但是当尝试连接最后两个过滤器(mpeg mux过滤器和文件编写器过滤器)时,我得到一个AccessViolationException

accessviolation错误的原因是什么?通常什么时候发生。你怎么知道怎么修理它?是否错误的原因不是我的代码而是过滤器

链接错误发生在Mpeg-4多路复用器和Filewriter之间 这是我的代码:(错误发生在底部)

我将非常感谢任何帮助、建议或信息,谢谢

调用堆栈没有显示太多有用的信息。有一个本机事务,我无法在visual studio中看到调用了哪些函数,也无法使用调试器进入该方法

[管理到本机转换]

YourControlService.dll!YourControlService.YourControlRecorder.init()行207 C#

YourControlService.dll!YourControlService.YourControlRecorder.startRecording(字符串 filename=“D:\TEMP\test_2014_5_31.avi”)第229 C行#

YourControlService.dll!YourControlService.Service.StartRecording(字符串 name=“test”,string text=“text”)第79行C#[轻量级 功能]

System.ServiceModel.dll!System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象 实例,对象[]输入,输出对象[]输出)未知 System.ServiceModel.dll!System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(参考 System.ServiceModel.Dispatcher.MessageRpc= {System.ServiceModel.Dispatcher.MessageRpc}未知

System.ServiceModel.dll!System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(参考 System.ServiceModel.Dispatcher.MessageRpc= {System.ServiceModel.Dispatcher.MessageRpc}未知

System.ServiceModel.dll!System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(参考 System.ServiceModel.Dispatcher.MessageRpc)未知

System.ServiceModel.dll!System.ServiceModel.Dispatcher.MessageRpc.Process(bool isOperationContextSet=false)未知

System.ServiceModel.dll!System.ServiceModel.Dispatcher.ChannelHandler.DispatchedReleasePump(System.ServiceModel.Channels.RequestContext 请求= {System.ServiceModel.Channels.HttpRequestContext.ListenerHttpContext}, bool cleanThread,System.ServiceModel.OperationContext currentOperationContext)未知

System.ServiceModel.dll!System.ServiceModel.Dispatcher.ChannelHandler.HandlerRequest(System.ServiceModel.Channels.RequestContext 请求,System.ServiceModel.OperationContext currentOperationContext)未知

System.ServiceModel.dll!System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(System.IAsyncResult 结果)未知

System.ServiceModel.Internals.dll!System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(System.IAsyncResult 结果)未知

System.ServiceModel.Internals.dll!System.Runtime.AsyncResult.Complete(bool 完成(同步)未知

System.ServiceModel.Internals.dll!System.Runtime.InputQueue.AsyncQueueReader.Set(System.Runtime.InputQueue.Item 项目)未知

System.ServiceModel.Internals.dll!System.Runtime.InputQueue.EnqueueAndDispatch(System.Runtime.InputQueue.Item 项目= {System.Runtime.InputQueue.Item}, bool candispatchonthistread)未知

System.ServiceModel.Internals.dll!System.Runtime.InputQueue.EnqueueAndDispatch(System.ServiceModel.Channels.RequestContext 项目,系统。操作出列回调,布尔 canDispatchOnThisThread)未知

System.ServiceModel.dll!System.ServiceModel.Channel.SingletonChannelAcceptor.Enqueue(System.ServiceModel.Channel.RequestContext 项目,系统。操作出列回调,布尔 canDispatchOnThisThread)未知

System.ServiceModel.dll!System.ServiceModel.Channels.HttpPipeline.EnqueueMessageAsyncResult.CompleteParseAndQueue(System.IAsyncResult 结果)未知

System.ServiceModel.dll!System.ServiceModel.Channel.HttpPipeline.EnqueueMessageAsyncResult.HandleParseIncomingMessage(System.IAsyncResult 结果)未知

System.ServiceModel.Internals.dll!System.Runtime.AsyncResult.SyncContinue(System.IAsyncResult 结果)未知

System.ServiceModel.dll!System.ServiceModel.Channels.HttpPipeline.EmptyHttpPipeline.BeginProcessInboundRequest(System.ServiceModel.Channels.ReplyChannelAcceptor ReplyChannel接收器,System.Action出列回调, System.AsyncCallback,对象状态)未知

System.ServiceModel.dll!System.ServiceModel.Channel.HttpChannelListener.HttpContextReceivedAsyncResult.ProcessHttpContextAsync()未知

System.ServiceModel.dll!System.ServiceModel.Channels.HttpChannelListener.BeginHttpContextReceived(System.ServiceModel.Channels.HttpRequestContext 上下文,System.Action Acceptor回调,System.AsyncCallback 回调,对象状态)未知

System.ServiceModel.dll!System.ServiceModel.Channel.SharedHttpTransportManager.EnqueueContext(System.IAsyncResult listenerContextResult)未知

System.ServiceModel.dll!System.ServiceModel.Channel.SharedHttpTransportManager.OnGetContextCore(System.IAsyncResult listenerContextResult={System.Net.ListenerAsyncResult})未知

System.ServiceModel.Internals.dll!System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(System.IAsyncResult 结果)未知

System.dll!System.Net.lazyancresult.Complete(System.IntPtr userToken)未知

System.dll!System.Net.ListenarAsyncResult.IOCompleted(System.Net.ListenarAsyncResult asyncResult,uint errorCode,uint numBytes)未知

mscorlib.dll!System.Threading.\u IOCompletionCallback.PerformiCompletionCallback(uin
  private void init()
        {
            m_filterGraph = new FilterGraph() as IFilterGraph2;
            mediaControl = (IMediaControl)m_filterGraph;
            mediaEvent = (IMediaEvent)m_filterGraph;


            int hr;
            DsDevice[] audiDevices;

            audiDevices = DsDevice.GetDevicesOfCat(FilterCategory.AudioInputDevice);
            List<IPin> audioOutputs = new List<IPin>();

            DsDevice[] capDevices;

            // Get the collection of video devices
            capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);

            if (capDevices.Count() < 2)
            {
                throw new Exception("Not enough video input devices found");
            }
            ISampleGrabber sampGrabber = null;
            IBaseFilter baseGrabFlt = null;
            List<IBaseFilter> capFilter = new List<IBaseFilter>();
            IBaseFilter muxFilter = null;
            IFileSinkFilter fileWriterFilter = null;
            ICaptureGraphBuilder2 capGraph = null;

            try
            {
                capGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
                hr = capGraph.SetFiltergraph(m_filterGraph);
                DsError.ThrowExceptionForHR(hr);
                for (int i = 0; i < Math.Min(capDevices.Count(), 2); i++)
                {
                    IBaseFilter _capFIlter;
                    hr = m_filterGraph.AddSourceFilterForMoniker(capDevices[i].Mon, null, capDevices[i].Name, out _capFIlter);

                    DsError.ThrowExceptionForHR(hr);
                    capFilter.Add(_capFIlter);
                }


                DsError.ThrowExceptionForHR(hr);

                for (int i = 0; i < Math.Min(audiDevices.Length, 1); i++)
                {
                    IBaseFilter _audioFilter;
                    hr = m_filterGraph.AddSourceFilterForMoniker(audiDevices[i].Mon, null, audiDevices[i].Name,
                        out _audioFilter);
                    IPin audiooutpin = FindPinByDirection(_audioFilter, PinDirection.Output);
                    audioOutputs.Add(audiooutpin);
                }

                //MJPEG Decompressor
                IBaseFilter mjpeg_dec0 = null;
                IBaseFilter mjpeg_dec1 = null;
                Guid mjpegguid = Guid.Parse("301056D0-6DFF-11D2-9EEB-006008039E37");
                Type t1 = Type.GetTypeFromCLSID(mjpegguid);
                mjpeg_dec0 = (IBaseFilter) Activator.CreateInstance(t1);
                mjpeg_dec1 = (IBaseFilter) Activator.CreateInstance(t1);
                hr = m_filterGraph.AddFilter(mjpeg_dec0, "MJPEG0");
                hr = m_filterGraph.AddFilter(mjpeg_dec1, "MJPEG1");
                IPin cam1out;
                IPin cam2out;

                IPin pinmjpegIn = FindPinByDirection(mjpeg_dec0, PinDirection.Input);
                IPin pinjmpegIn1 = FindPinByDirection(mjpeg_dec1, PinDirection.Input);

                if (capFilter.Count < 1 || capFilter[0] == null)
                {
                    throw new Exception("No input devices found!");
                }
                IPin cam0Out = FindPinByDirection(capFilter[0], PinDirection.Output);
                m_filterGraph.Connect(cam0Out, pinmjpegIn);

                if (capFilter.Count >= 1 && capFilter[1] != null)
                {
                    cam1out = FindPinByDirection(capFilter[1], PinDirection.Output);
                    m_filterGraph.Connect(cam1out, pinjmpegIn1);
                }


                //MyFilter
                IPin mjpegOut = FindPinByDirection(mjpeg_dec0, PinDirection.Output);
                IPin mjpegout1 = FindPinByDirection(mjpeg_dec1, PinDirection.Output);





                IBaseFilter myfitlter = null;


                Guid myfilterGuid = Guid.Parse("067216DE-E6A1-49C9-A016-074624C20FE5");
                Type t = Type.GetTypeFromCLSID(myfilterGuid);
                myfitlter = (IBaseFilter)Activator.CreateInstance(t);

                var imyfilter = (IMyFilter)myfitlter;

                //int result = imyfilter.SetIntervalText("THis is intervall test");
                //int result2 = imyfilter.SetIntroText("This is intro text test");

                hr = m_filterGraph.AddFilter(myfitlter, "MyFilter");
                DsError.ThrowExceptionForHR(hr);
                IPin mypin0;
                hr = myfitlter.FindPin("PIN0", out mypin0);
                DsError.ThrowExceptionForHR(hr);
                IPin mypin1;
                hr = myfitlter.FindPin("PIN1", out mypin1);
                DsError.ThrowExceptionForHR(hr);
                IPin mypinin2;

                IPin mypinout;
                hr = myfitlter.FindPin("PINOUT0", out mypinout);

                hr = m_filterGraph.Connect(mjpegOut, mypin0);
                DsError.ThrowExceptionForHR(hr);
                hr = m_filterGraph.Connect(mjpegout1, mypin1);
                DsError.ThrowExceptionForHR(hr);



                //Color space convertor

                IBaseFilter colorSpance = null;
                Guid csGUID = Guid.Parse("1643E180-90F5-11CE-97D5-00AA0055595A");
                Type t2 = Type.GetTypeFromCLSID(csGUID);
                colorSpance = (IBaseFilter)Activator.CreateInstance(t2);
                hr = m_filterGraph.AddFilter(colorSpance, "ColorSpaceConvertor");
                IPin csIn = FindPinByDirection(colorSpance, PinDirection.Input);
                IPin csOut = FindPinByDirection(colorSpance, PinDirection.Output);

                hr = m_filterGraph.Connect(mypinout, csIn);
                DsError.ThrowExceptionForHR(hr);



                IBaseFilter ffdshowfilter = null;
                Guid ffdshowguid = Guid.Parse("4DB2B5D9-4556-4340-B189-AD20110D953F");
                Type ffdshowtype = Type.GetTypeFromCLSID(ffdshowguid);
                ffdshowfilter = (IBaseFilter)Activator.CreateInstance(ffdshowtype);
                m_filterGraph.AddFilter(ffdshowfilter, "FFD");
                IPin pinffdin = FindPinByDirection(ffdshowfilter, PinDirection.Input);
                IPin pinffdout = FindPinByDirection(ffdshowfilter, PinDirection.Output);
                hr = m_filterGraph.Connect(csOut, pinffdin);
                DsError.ThrowExceptionForHR(hr);


                IBaseFilter mpegmuxfilter = null;
                Guid mpegmux = Guid.Parse("5FD85181-E542-4E52-8D9D-5D613C30131B");
                Type mpegmuxType = Type.GetTypeFromCLSID(mpegmux);
                mpegmuxfilter = (IBaseFilter)Activator.CreateInstance(mpegmuxType);
                hr = m_filterGraph.AddFilter(mpegmuxfilter, "MpegMux");

                DsError.ThrowExceptionForHR(hr);
                IPin mpegIn = FindPinByDirection(mpegmuxfilter, PinDirection.Input);

                hr = m_filterGraph.Connect(pinffdout, mpegIn);
                IPin mpegOut = FindPinByDirection(mpegmuxfilter, PinDirection.Output);

                DsError.ThrowExceptionForHR(hr);


                m_filterGraph.Connect(pinffdout, mpegIn);

                IBaseFilter filewriter = null;
                filewriter = new FileWriter() as IBaseFilter;

               filesinkFilter= (IFileSinkFilter)filewriter;

                hr = m_filterGraph.AddFilter(filewriter, "FileWriter");
                DsError.ThrowExceptionForHR(hr);
                IPin fileIn = FindPinByDirection(filewriter, PinDirection.Input);
                m_filterGraph.Connect(mpegOut, fileIn); //Here an access violation exception is triggered
                foreach (IPin pin in audioOutputs)
                {
                    IPin muxInPin = FindPinByDirection(mpegmuxfilter, PinDirection.Input);
                    m_filterGraph.Connect(pin, muxInPin);
                }

             }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
        }
 m_filterGraph.Connect(mpegOut, fileIn); //Here an access violation exception is triggered