首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

directshow采撷音视频并存储到本地磁盘

2014-01-08 
directshow采集音视频并存储到本地磁盘我用directshow分别才从摄像头和麦克风采集音视频存储到本地,并生成

directshow采集音视频并存储到本地磁盘
我用directshow分别才从摄像头和麦克风采集音视频存储到本地,并生成wmv格式的文件.可是视频预览没有效果,生成文件也是失败的,请大家帮忙看看。代码贴出来:

   HWND hVWindow =        m_videoWindow.GetSafeHwnd();
  
pAudioFilter = NULL;
pBuilder=NULL;
pGraph = NULL;
pMediaControl = NULL;
m_pVW=NULL;
//pCompress = NULL;
pASFWriter = NULL;

HRESULT hr;

//枚举视频设备
ICreateDevEnum *pDevEnum = NULL;
CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, 
IID_ICreateDevEnum, (void **)&pDevEnum);
IEnumMoniker *pClassEnum = NULL;

hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0);
ULONG cFetched;
if (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK)     
{
pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pSrc);
pMoniker->Release(); 
}
pClassEnum->Release();

hr = CoCreateInstance(CLSID_CaptureGraphBuilder2,0,CLSCTX_INPROC_SERVER,IID_ICaptureGraphBuilder2,(void**)&pBuilder);
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
pGraph->QueryInterface(IID_IMediaControl,(void**)&pMediaControl);
pBuilder->SetFiltergraph(pGraph);
hr = pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVW);

//枚举音频设备
HRESULT hrAudio;
hrAudio = FindAudioDevice(&pAudioFilter);
if (FAILED(hrAudio))
{
MessageBox("查找音频设备失败");
}

pGraph->AddFilter(pAudioFilter,L"Audio");
pGraph->AddFilter(pSrc,L"Video Capture");
hr = pBuilder->RenderStream( &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pGraph, NULL, NULL );

IConfigAsfWriter *pConfig = 0;
hr = pASFWriter->QueryInterface(IID_IConfigAsfWriter, (void**)&pConfig);
if (SUCCEEDED(hr))
{
// Configure the ASF Writer filter.
pConfig->Release();
}

pGraph->AddFilter(pASFWriter,L"Asf Writer");
pBuilder->SetOutputFileName(&MEDIASUBTYPE_Asf,L"c:\\a.wmv", &pASFWriter, &pSink);

hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Video, pSrc, NULL, NULL);

// Now add the video capture to the output file.
hr = pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video, pSrc, NULL, pASFWriter);

// And do the same for the audio.
hr = pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Audio, pAudioFilter, NULL, pASFWriter);

pMediaControl->Run();

[解决办法]
接口不对。可以采用DSHOW自带接口。我存AVI格式。交流Q:1049568282

热点排行