有熟悉directshow的吗?求助

gd4ever gd4ever 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


现在有一个棘手的问题请教:我现在用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 怎么将缓冲区的数据拿出来?

谢谢啦,我都看了好几天,网上查了好久,都没有结果,指导一下吧 谢了
...全文
评论 8
收藏 已收藏
分享
返回顶部