一个觉着好简单的问题,就是解决不了,好累,求助:捕获到有大小但不能播放的.avi文件
| | | | | |
|Vedio Capture|----->| AVI Mux |------->|File Writer |
|_____________| |____________| |____________|
在graph edit中可以保存成.avi文件,并能播放.
但运行如下函数,去只能得到随着捕获时间的长短而不同的.avi文件,不能播放.
以下函数中的GetDeviceInterfaces();FindCaptureDevice(&m_pBaseFilter);均为Dx9.0例子中的常用函数
CTRYCAPTURE1Dlg::CaptureVideo1()
{
IBaseFilter *pMux,*pWrite;
IFileSinkFilter2 *pFileSink;
USES_CONVERSION;
HRESULT hr=0;
hr=GetDeviceInterfaces();/////
hr=FindCaptureDevice(&m_pBaseFilter);////
m_pCaptureGraphBuilder->SetFiltergraph(m_pGraphBuilder);
hr=m_pGraphBuilder->AddFilter(m_pBaseFilter,L"Video Capture");
hr = CoCreateInstance(CLSID_AVIMux, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&pMux);
hr = CoCreateInstance(CLSID_FileWriter, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&pWrite);
hr = pWrite->QueryInterface(IID_IFileSinkFilter2, (void **) &pFileSink);
hr = m_pGraphBuilder->AddFilter(pMux, L"AVIMux");
hr = m_pGraphBuilder->AddFilter((IBaseFilter *)pWrite, L"File Writer");
pFileSink->SetFileName(L"C:\\Vedio.avi",NULL);
ConnectFilters(m_pGraphBuilder,m_pBaseFilter,pMux);
ConnectFilters(m_pGraphBuilder,pMux,pWrite);
m_pMediaControl->Run();
return S_OK;
}
我也试了用renderstream智能连接的方法,可结果一样,哪儿出了问题呢,和我的数码相机有关吗,(在graph edit中只能看到capture,没有preview),郁闷中...
P.S.
在graph edit中dump这个filter和捕获设备相连后输出的无论.avi或.asf文件都不能播放,为什么?谢!