三次连续搞了3个晚上都没有搞定的问题:创建出来的source filter在录制avi的时候,时间一直不对,发现filter是全速跑的,指定的fps不起作用。后来另外的人修改了下,可以了,是在线程里加sleep。
一直都认为应该是某个开关或某个属性没设的缘故。昨晚在试这个修改过的filter时发现直接在grahpedt里跑fps是达不到预设值的。
今晚看几个filter的说明:AVI Compressor Filter,ASF Writer Filter,AVI Mux Filter。
原来通过设参数 CComQIPtr<IConfigInterleaving,&IID_IConfigInterleaving> pConfigInterleave = pAviMuxFilter;
if ( pConfigInterleave != NULL )
pConfigInterleave->put_Mode( INTERLEAVE_CAPTURE );
就可以达到目的的,把filter的代码修改会原来的样子可以正常工作了。
保存视频3种方法:
1) hr = m_pCapture->SetOutputFileName(
&MEDIASUBTYPE_Asf, // Specifies AVI for the target file.
2) hr = m_pCapture->SetOutputFileName(
&MEDIASUBTYPE_Avi,
3) 自己手动构建graph,不使用m_pCapture
按MSDN里WDM Video Capture Filter的说明,capture filter实现的接口还挺多的,其中一个就是IReferenceClock, 其output pin也需要实现一些接口。
保存avi的问题,如何枚举compressor,并不是所有的video compressor都可以用。
保存wmv的问题:不调StopWhenReady或调两次保存的内容会被清除掉,或直接调stop也一样。
保存出来的视频还是有问题,出来的fps和预先设计的不一样。