1
我有一个应用程序,它使用DirectShow.Net播放视频并记录视频。当我尝试记录刚刚用于DirectShow播放的文件名时,由于该文件仍处于使用状态,因此它会失败。有时它会工作,但需要5到60秒才能解锁文件。在尝试录制之前,播放图肯定已经被破坏。下面是创建和销毁图形的代码。如果我停止并在播放后启动我的应用程序,我可以记录到相同的文件名,并且没有文件锁定问题。DirectShow .Net AddSourceFilter发布文件
任何人都可以建议我如何才能正确地释放源过滤器,使文件不被锁定?
创建图表
try
{
graphBuilder = (IGraphBuilder)new FilterGraph();
#if DEBUG
// "Connect to remote graph" in GraphEdit
rotEntry = new DsROTEntry(graphBuilder);
#endif
hr = graphBuilder.AddSourceFilter(filename, filename, out baseFilter);
DsError.ThrowExceptionForHR(hr);
vmr9 = (IBaseFilter)new VideoMixingRenderer9();
ConfigureVMR9InWindowlessMode();
hr = graphBuilder.AddFilter(vmr9, "Video Mixing Renderer 9");
DsError.ThrowExceptionForHR(hr);
FilterGraphTools.ConnectFilters(graphBuilder, baseFilter, "Output", vmr9, "VMR Input0", true);
}
销毁图表
if (vmr9 != null)
{
Marshal.ReleaseComObject(vmr9);
vmr9 = null;
windowlessCtrl = null;
}
if (graphBuilder != null)
{
// Remove and release all filters
FilterGraphTools.RemoveAllFilters(graphBuilder);
Marshal.ReleaseComObject(graphBuilder);
graphBuilder = null;
baseFilter = null;
}
#if DEBUG
if (rotEntry != null)
{
rotEntry.Dispose();
rotEntry = null;
}
#endif