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

CherryCH 2014-01-06 03:52:04
我用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();
...全文
272 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhimingcow 2015-05-27
  • 打赏
  • 举报
回复
楼主,问题解决了吗?能否共享一份源码给我,小弟这几天也正在弄这个DirectShow的音视频采集,都找不到头绪。。谢谢了!
hellscythe 2015-05-05
  • 打赏
  • 举报
回复
你这个采集音频和视频,没有经过压缩,保存为WMV会出问题吧
CherryCH 2014-01-07
  • 打赏
  • 举报
回复
我改成AVI格式了,但是WMV肯定是可以的,还是哪里有问题.另外我采集音频怎么没效果呢?视频预览和存储现在可以了。音频的流程和视频一样啊。
CherryCH 2014-01-06
  • 打赏
  • 举报
回复
我装了window media format SDK 9.5
CherryCH 2014-01-06
  • 打赏
  • 举报
回复
其中配置asf查询接口失败了,可能是什么原因?
	IConfigAsfWriter *pConfig = 0;
	hr = pASFWriter->QueryInterface(IID_IConfigAsfWriter, (void**)&pConfig);
	if (SUCCEEDED(hr))
	{
		// Configure the ASF Writer filter.
		pConfig->Release();
	}

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧