DirectShow在调用Stop的时候出错
FFDSHOW! 086cbf78()
FFDSHOW! 086c97ed()
QUARTZ! 7cfa8523()
CCaptureVideo::CaptureImagesToAVI(CString {"D:\data\0000173_wqwqwq\20110810183804.avi"}) line 157 + 20 bytes
CTHIRD::OnCapture() line 111
我不加压缩这块,就预览和采集已经实现,程序没问题,我在程序开启的时候在OnInitDialog中调用压缩Filter,Filter代码如下
//枚举压缩器
////////////////////////////////////////////////////////////////////////////////////////////////////
HRESULT hr;
ICreateDevEnum *pSysDevEnum = NULL; //创建枚举器指针
pCompress = NULL;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
IID_ICreateDevEnum, (void **)&pSysDevEnum); //创建枚举器
// Obtain a class enumerator for the video compressor category.
IEnumMoniker *pEnumCat = NULL;
hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoCompressorCategory, &pEnumCat, 0); //返回枚举参数
if (hr == S_OK)
{
// Enumerate the monikers.
IMoniker *pMoniker;
ULONG cFetched;
while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK) //开始枚举压缩器
{
IPropertyBag *pPropBag;
pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);
// To retrieve the friendly name of the filter, do the following:
VARIANT varName;
VariantInit(&varName);
hr = pPropBag->Read(L"FriendlyName", &varName, 0);
if (SUCCEEDED(hr))
{
CString str(varName.bstrVal);
SysFreeString(varName.bstrVal);
if(str == "ffdshow video encoder")
{
hr = pMoniker->BindToObject(0,0,IID_IBaseFilter,(void**)&pCompress);
pMoniker->Release();
break;
}
}
VariantClear(&varName);
}
pEnumCat->Release();
pMoniker->Release();
m_pGB->AddFilter(pCompress,L"Compressor"); //添加过滤器
HRESULT ret =NULL;
IPin * pSourceOut = NULL;
IPin* pCompressIn,* pCompressOut=NULL;
IAMVideoCompression * pAMCompress = NULL; //压缩参数设置
pCompressIn = FindPin(pCompress,PINDIR_INPUT) ; //查找输入引脚
pCompressOut = FindPin(pCompress,PINDIR_OUTPUT); //查找输出引脚
pCompressOut->QueryInterface(IID_IAMVideoCompression,(void**)&pAMCompress);
}
pSysDevEnum->Release();
然后在点击采集按钮的时候进行实时采集压缩,代码如下
HRESULT hr=0;
if(m_pMC)
{
m_pMC->Stop(); ////////////////////此处出现问题 }
hr = m_pCapture->SetOutputFileName( &MEDIASUBTYPE_Avi,inFileName.AllocSysString(), &pMux, NULL );
//渲染媒体,链接所有滤波器
m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,m_pBF,pCompress,pMux);
HRESULT ret = pMux->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
pMux->Release();
m_pMC->Run();//回复视频
return hr;
就在上面的m_pMC->Stop();处出问题
我在GraphEdit里配置图表没有问题

为什么会出现这种情况啊,请高手帮帮忙,谢谢了,实在是急死了都
相关推荐
AVI视频播放
利用VC开发可以打开AVI视频,支持视频的播放、暂停,全屏播放,循环播放,代码简单易读,适合初学者
Delphi XE中DSPack 2.3.3控件安装、使用与兼容性实战指南
DirectShow是Windows平台经典的多媒体处理框架,其通过Filter Graph模型将音视频处理流程模块化,实现了数据流的灵活组装与控制。这一原理为开发者提供了强大的底层媒体操作能力,其技术价值在于能够高效处理本地文件播放、实时流媒体捕捉与格式转换等复杂任务。在Delphi开发环境中,DSPack控件包作为DirectShow的封装层,将COM接口与Filter Graph的复杂性转化为可视化的VCL组件,极大地提升了开发效率,广泛应用于视频监控、会议系统、媒体播放器等桌面应用场景。本文聚焦于经
C# 通过 CSharpVLC 封装 LibVLC 实现 RTSP 视频流播放完整指南
在工业监控、上位机开发等场景中,C# 程序播放 RTSP 视频流是常见需求。RTSP 是一种实时流媒体传输协议,广泛用于海康、大华等网络摄像头。直接基于 DirectShow 或 FFmpeg 开发往往面临兼容性差、封装复杂、解码同步难等痛点。LibVLC 作为 VLC 播放器的核心引擎,内置丰富的流媒体协议解析和硬件解码能力,通过 CSharpVLC 这类托管封装库,C# 开发者可以跨过底层解码细节,快速实现视频拉流、窗口嵌入、多路预览与录制。文章围绕 VS2017 环境下的项目配置、LibVLC 运行库
Unity跨平台视频播放实战:AVPro Video双端配置与StreamingAssets路径优化
视频播放是游戏和多媒体应用中的基础功能,其核心原理在于解码与渲染。Unity原生Video Player组件在跨平台场景下常面临性能瓶颈与兼容性问题,尤其在安卓端表现不佳。为解决这一痛点,开发者常借助AVPro Video这类专业插件,它通过桥接各平台原生播放器(如Android MediaPlayer、Windows Media Foundation),充分利用硬件解码能力,显著提升播放性能与格式兼容性。在工程实践中,视频资源的加载路径处理是关键环节,特别是StreamingAssets文件夹在不同平台(
基于C#的DirectShow完整类库
基本包含了DirectShow里边大部分类的封装,便于从C#,VB面向对象的引用


