除了界面线程和dshow自己的线程之外,我们启动了两个线程,AudioEncoderThread和VideoEncoderThread,分别从SampleGrabber中取出数据,调用编码器进行编码,编码后的文件可以直接输出 视频编码线程 主要流程是首先初始化x264编码器,然后开始循环调用DSVideoGraph,从SampleGrabber中取出视频帧,调用x264进行编码,流程比较简单,调用的频率就是你想要获取的视频帧率 音频编码线程 主要流程和视频编码线程相同,也是初始化FAAC编码器,然后循环调用DSAudioGraph,从SampleGrabber中取出视频帧,调用faac进行编码。 和视频不同的是,音频的sample的频率是非常快的,所以几乎要不断的进行采集,但前提是SampleGrabber中捕获到新数据了才行,不然你的程序cpu就100%了,下面代码中IsBufferAvailaber
然后再加入SampleGrabber对象,用于捕获每一帧的视频数据。 5. 设置摄像头显示参数、预览参数、 设置保存的尺寸信息 此步代码较多,就不在贴代码,后面给出源码下载地址. 6.
因为这里不是做直播或监控,所以没必要实时对每一帧做处理,所以决定不采用SampleGrabber的回调形式,直接让它生成AVI文件,然后再做处理。
m_pNullFilter); hr = m_pGraphBuilder->AddFilter(m_pNullFilter, L"NullRenderer"); hr = CoCreateInstance(CLSID_SampleGrabber