作者:手机用户2502893987 | 来源:互联网 | 2023-09-25 05:35
俺是初学者,各位高手如果看了,不要见笑,其实俺写这个也就是为了记录一下。项目需要用到视频监控,以前做了个XNA的版本,但是XNA对网卡以及操作系统都是要求,领导要求没办法,
俺是初学者,各位高手如果看了,不要见笑,其实俺写这个也就是为了记录一下。
项目需要用到视频监控,以前做了个XNA的版本,但是XNA对网卡以及操作系统都是要求,领导要求没办法,一个字“改”,那就改!参考了一下,决定用DirectShow。以前我没有做过,公司里也没有做过,只能是赶鸭子上架了,杯具阿!
开始看教程,看了半天,还是有点云里雾里的,算了,还是直接找demo模仿了,然后就开始看自带的Demo,看了几个Ticker、Blender、Async、Ball,我觉得这几个例子倒是不错(所有的例子肯定都是很好的),反正对我这个初学者还是挺有作用,至少对Filter这个概念理解的更深了,当然了,这期间也要不间断看看老陆的资料(还是比较经典)。Ticker说了如何加载Render Filter(VMR),Ball说了如何加载Source Filter,Async说了如何写自己的Filter。然后就开始进行时了:
1.写了自己对一个Filter,读取文件,解析h264编码,因为以前用做过一版本,还是比较顺利,但是在其中重装过一次系统,xp->win2003server,然后杯具又一次上演:开发环境搞不定了,NND,搞了一整天。顺利完成,在Graph Edit上测试完成,但是就是闪烁,怀疑是解码的问题,暂时没有理会
2.不知不觉杯具再次上演,我的Graph Edit打不开,找了半天资料也没有找到原因,一想算了直接写一个Demo调用吧,然后就开始写demo,很顺利,哈哈
3.然后需要自己封装一个Dll需要C#调用,写好了,老是不能播放,我的神了,真无语了!然后就开始排错
hr = pWC->GetNativeVideoSize(&lWidth, &lHeight, 0, 0);
这个地方的问题,返回的Width和Height,然后找原因,其实当时脑子有点懵,胡找。终于在MSDN上找到这么一句:
IVMRWindowlessControl::GetNativeVideoSize Method
Remarks
If the VMR is not connected to an upstream filter, this method will succeed but all parameters will be set to zero.
地址http://msdn.microsoft.com/en-us/library/dd390559%28VS.85%29.aspx
没有反应过来,哈哈,然后接着找
hr = pGB->Render(pStreamFilter->GetPin(0));
返回值为0x8004025f(VFW_E_NOT_IN_GRAPH) The filter to which this pin belongs is not in the filter graph.
奥,原来Filter没有加到Filter Graph Manage里面,我的天,撞墙的心都有了