有熟悉directshow的吗?求助
现在有一个棘手的问题请教:我现在用directshow把视频采集下来,我希望的是存到缓冲区,然后通过网络,用ip组播的形式发出去(你觉得可以吗,或者有更好的方式?)现在的问题是,我使用 Sample Grabber filter接收数据,(sdk上说用这个可以复制每个sample):
这样:pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,pCapFilter,pGrabberF,NULL);
pGrabber->SetBufferSamples(TRUE);
pControl->Run();
//得到缓冲区大小
long cbBuffer = 0;
pGrabber->GetCurrentBuffer(&cbBuffer, NULL);
char *pBuffer = new char[cbBuffer];
//获取数据
pGrabber->GetCurrentBuffer(&cbBuffer, (long*)pBuffer);
问题:
1 这样得不到数据?!只有在pControl->Run();后加上一个Sleep()函数好像才可以得到数据,否则 pGrabber->GetCurrentBuffer(&cbBuffer, (long*)pBuffer);返回VFW_E_WRONG_STATE 说明没有得到sample
2 我不明白一个pGrabber->GetCurrentBuffer(&cbBuffer, (long*)pBuffer);
怎么就可以得到每一个sample?这个函数不就执行一次?还有缓冲区满了怎么办?
3 怎么将缓冲区的数据拿出来?
谢谢啦,我都看了好几天,网上查了好久,都没有结果,指导一下吧 谢了