有熟悉directshow的吗?求助

gd4ever 2006-03-12 05:35:43


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

谢谢啦,我都看了好几天,网上查了好久,都没有结果,指导一下吧 谢了
...全文
306 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
httpaspjspphp 2006-03-20
  • 打赏
  • 举报
回复
以前我有一个贴子专门讨论这个
后来不知道被那个狗给删去了
气死我;の
gd4ever 2006-03-17
  • 打赏
  • 举报
回复
谁有网络发送filter的例子,看一看,嘿嘿
ccxian123 2006-03-16
  • 打赏
  • 举报
回复
有一个SampleCB的,里面回调中把数据拷出来就行了。但这个SampleGrab这个Filter好像只有在DX9中才有的,所以用户机上不一定可以跑的,慎重。可以写一个这样的Filter实现同样的功能的。
cx0928 2006-03-14
  • 打赏
  • 举报
回复
可以自己写一个transform filter,,实现sample的接受并通过网络发送
zhaojian999 2006-03-14
  • 打赏
  • 举报
回复
网络传输你用TCP或者UDP都可以 组播也可以
zhaojian999 2006-03-14
  • 打赏
  • 举报
回复
你查一下双队列缓冲,用来处理sample的存储和读取比较好
yyhzpk 2006-03-13
  • 打赏
  • 举报
回复
楼主是不是在run之后,直接调用的pGrabber->GetCurrentBuffer呀
这个时候可能这个filter还没有数据呢
可以先判断一下graph的运行状态再调,应该可以的
gd4ever 2006-03-13
  • 打赏
  • 举报
回复
我想把每一个sample数据都保存起来,通过网络发送,具体用什么方法呢?谢了 :)

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧