directshow 采集保存为avi文件的有关问题,请帮忙。
发布时间:2011-06-27 19:28:47 文章来源:www.iduyao.cn 采编人员:星星草
directshow 采集保存为avi文件的问题,请帮忙。。。。。。
独立的两个采集设备,一个视频,一个音频,想将采集到的音频和视频信息保存为一个avi文件。(图片如上)代码如下
hr = m_pCaptureBuilder2->SetFiltergraph( m_pGraph );
if (FAILED( hr ))
{
return hr;
}
CComPtr<IBaseFilter> pVideo; //获取视频的filter
hr = GetCaptureFilter(CLSID_VideoInputDeviceCategory, strVideo, &pVideo);
if (FAILED(hr))
{
return hr;
}
hr = m_pGraph->AddFilter(pVideo, L"Cap");
if( FAILED( hr ) )
{
return hr;
}
CComPtr<IBaseFilter> pAudio; //获取音频的filter
hr = GetCaptureFilter(CLSID_AudioInputDeviceCategory, strAudio, &pAudio);
if (FAILED(hr))
{
return hr;
}
hr = m_pGraph->AddFilter(pAudio, L"Audio");
if( FAILED( hr ) )
{
return hr;
}
CComPtr<IBaseFilter> pSmart; //获取视频的filter
hr = pSmart.CoCreateInstance(CLSID_SmartTee);
if( !pSmart )
{
return hr;
}
hr = m_pGraph->AddFilter(pSmart, L"SmartTee");
if( FAILED( hr ) )
{
return hr;
}
hr = m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );
if( !m_pGrabber )
{
return hr;
}
IBaseFilter *pRender; //Video Renderer Filter
hr = CoCreateInstance(CLSID_VideoRenderer,NULL,CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void **)&pRender);
hr = m_pGraph->AddFilter(pRender, L"VideoRenderer");
if( FAILED( hr ) )
{
return hr;
}
CComQIPtr< IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pGrabber );
// force it to connect to video, 24 bit
CMediaType VideoType; //Strmbase.lib
VideoType.SetType( &MEDIATYPE_Video);
VideoType.SetSubtype(&MEDIASUBTYPE_RGB24);
hr = m_pGrabber->SetMediaType( &VideoType ); // shouldn't fail
if( FAILED( hr ) )
{
return hr;
}
// add the grabber to the graph
hr = m_pGraph->AddFilter( pGrabBase, L"Grabber" );
if( FAILED( hr ) )
{
return hr;
}
IBaseFilter *pMux;
hr = m_pCaptureBuilder2->SetOutputFileName(
&MEDIASUBTYPE_Avi,
L"C:\\test.avi", // File name.
&pMux, // Receives a pointer to the mux.
NULL); // (Optional) Receives a pointer to the file sink.
hr = ConnectFilters(pVideo, pSmart); //将两个filter连接
hr = ConnectFilters(pSmart, pGrabBase);
hr = ConnectFilters(pGrabBase, pRender);
hr = ConnectFilters(pSmart, pMux);
hr = ConnectFilters(pAudio, pMux);
hr = m_pCaptureBuilder2->RenderStream(
&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Interleaved,
pSmart,
NULL,
pMux);
{
// try to render preview pin
hr = m_pCaptureBuilder2->RenderStream(
&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Video,
pSmart,
NULL,
pMux);
if( FAILED( hr ) )
{
hr = m_pCaptureBuilder2->RenderStream(
&PIN_CATEGORY_CAPTURE,
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的
...
-
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不...
-
请问怎么在live555中接收jpeg
请问,我现在想接收一个服务器发送的jpeg 不知道怎么用live555做一个客户端, 接收它并显示。
请问应...
-
XP SP3 YUV420 的fiter依赖 在线等答案……
链接时媒体类型为WMMEDIASUBTYPE_I420
有的XP可以播放出来
有的就不行,请问不能播放...
-
如何获取通过麦克风来获取当前说话的音量?
使用Wave系统API采集音频输入的数据,当数据缓存区满了后,收到消息取得数据后,如何根据这里...
-
RFC3984 有没有完整的中文版本呢?
搜了几个 都是一半英文一半中文的。哎 郁闷!
------解决方案--------------------
英文的凑合...
-
介绍一个学习directshow和com、atl技术的网站
有一个学习directshow和com、atl技术的网站,还可以下视频教程,共享给大家: http://www...
-
攻击帖:jrtplib、live555是个垃圾,刚开始搞流媒体就用这玩意就是找s
不解释~
来丢我砖头吧~~
我分太多了用不完~ 支持的散分~~~
...
-
50分,寻找《Visual C++音频/视频处理技术及工程实践》的随书光盘?
急于使用其中的几个例程。若哪位好心人能够提供,非常感谢!!我的QQ:52...
-
h264的高宽比怎么获取?
我看标准里面只有样点的高宽比啊。
还有,bit rate可以读出来吗?
------解决方案--------------------
是要...