我不是一个严格意义上的软件开发人员,我是一名电子工程师,我主要处理硬件和C on micros,但我刚刚继承了一个需要稍微调整的C#项目(至少我希望它很轻微!)。我已经在完整而紧凑的框架上完成了C#,但是在DirectShow方面我没有经验。
我们有一个Windows CE 6.0设备,它为数字标牌类型产品运行一些C#软件。显示器的一部分可以配置为视频,它当前可以播放本地存储在设备SD卡上的文件,没有太大问题。我被要求使用UDP网络流(我相信它将是RAW MPEG4,我只是在等待最终确认)。
通过阅读本文,我知道DirectShow使用“过滤器”,并且有源,解码器和渲染过滤器。它们通过“引脚”连接在一起,形成“过滤器图形”。我看到DirectShow都是基于COM的,虽然我知道COM,但我自己从来没有真正使用过它。我确实拥有这个我继承过的C#软件,所以我不是从空白画布开始的。
我相信我需要修改的部分是:
clsid = CLSID_.FilterGraph;
riid = IID_.ICaptuGraphBuilder2;
hr = (HRESULT)PInvokes.CoCreateInstance(ref clsid, IntPtr.Zero, (uint)CLSCTX_.INPROC_SERVER, riid, out obj);
_graphBuilder = (IGraphBuilder)obj;
hr = (HRESULT)_graphBuilder.RenderFile(filePath, null);
根据msdn.microsoft.com/en-us/library/ms834433.aspx上的文章和其他各种来源,Windows CE支持:
现在,我是否认为Windows CE本身不支持从UDP流式传输?如果是这样,我有几个问题:
我读过可以创建自定义DirectShow过滤器。除了我的技术能力,这是否是实现我想要的选择?我找到了http://archive.msdn.microsoft.com/dshowfilter,但我对C ++并不是很熟悉,而且我很难进入VS2008来玩它。我对C和C#非常熟练,所以我希望如果有这样的话,我应该能够摸索我的方式吗?
是否有人知道任何现有的组件会做我想做的事情?我们可以购买的东西?我不能浪费太多时间在这上面。我已经做了一些关于“Windows CE DirectShow”和“Windows CE DirectShow源过滤器”的搜索,但我得到了相同的几篇文章和未回答的论坛帖子。我不确定是否存在任何问题,或者我在寻找错误的东西?
如果我自己写这篇文章,我发现了this这样的文章,他们用C#而不是C ++创建了过滤器。这在我的舒适区看起来更多,但我仍然不确定我需要做什么。我对获取UDP流数据的想法很好,但是我不知道我需要做什么才能将它带到“输出引脚”。如何修改我们的软件以使用此自定义过滤器而不是普通过滤器?一般来说,开始使用空的源过滤器目前似乎超出了我的范围!
我很抱歉,如果其中一些看起来像是微不足道的东西,但这一切都有点过分,我想只需要一点指导。如果有人能帮助我,我会非常感激!
提前致谢,
里克多维
答案 0 :(得分:3)
关于你的问题:
是的,自定义Direct Show过滤器正是您所需要的。然后可以将该过滤器插入到过滤器图中。
我不知道有任何现成的Windows CE产品可以做到这一点,但我从来没有找过一个,所以不要认为我缺乏知识等于缺乏可用性。我敢打赌,如果你想让你的工作基于别人的工作,你将不得不找到过滤器的桌面版本,获取源代码,然后为Windows CE重新编译它。我知道LEADTOOLS有大量的成像资料,因此至少可以在那里进行调查。
如果你自己编写它,不幸的是,它必须用C ++完成。 DirectShow过滤器必须具有COM接口。要导出本机接口,框架必须具有EE Hosting,Compact Framework不能。最终结果是您无法在Compact Framework中创建COM对象或CCW,这意味着您无法在C#for Windows CE中创建DirectShow过滤器。
答案 1 :(得分:2)
如果您想购买某种产品,我建议您与Chris Tacke联系,看看他的公司是否有某些东西或可以做些什么。
他的博客是>> HERE <<。我认为他是关于Compact Framework开发的最大权威,可以提出真正的问题。
但是,我不会在他的博客上看到任何与他联系的方式。也许他会在不久的将来改变它。