C# 在Windows CE上接收UDP单播视频流

C# 在Windows CE上接收UDP单播视频流,c#,video,compact-framework,windows-ce,directshow,C#,Video,Compact Framework,Windows Ce,Directshow,我不是严格意义上的软件开发人员,我是一名电子工程师,我主要处理硬件和微型计算机上的C语言,但我刚刚继承了一个C语言项目,需要对其稍作调整(至少我希望是轻微的!)。我在完整而紧凑的框架上使用C#做了不少工作,但在DirectShow方面我没有经验 我们有一个WindowsCE6.0设备,它运行一些C#软件,用于数字看板类型的产品。显示器的一部分可以配置为视频,目前可以播放本地存储在设备SD卡上的文件,而不会出现太多问题。我被要求使用UDP网络流(我相信它将是原始的MPEG4,我正在等待最终确认)

我不是严格意义上的软件开发人员,我是一名电子工程师,我主要处理硬件和微型计算机上的C语言,但我刚刚继承了一个C语言项目,需要对其稍作调整(至少我希望是轻微的!)。我在完整而紧凑的框架上使用C#做了不少工作,但在DirectShow方面我没有经验

我们有一个WindowsCE6.0设备,它运行一些C#软件,用于数字看板类型的产品。显示器的一部分可以配置为视频,目前可以播放本地存储在设备SD卡上的文件,而不会出现太多问题。我被要求使用UDP网络流(我相信它将是原始的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支持:

  • 彩信流媒体
  • HTTP流媒体
  • 文件流
  • 广播和多比特率流媒体
  • Windows Media Station支持
  • ASX支持
  • 编解码器
现在,我认为WindowsCE本机不支持来自UDP的流式传输,对吗?如果是,我有几个问题:

  • 我读到过,可以创建自定义DirectShow过滤器。撇开我的技术能力不谈,这是实现我在这里想要的目标的一个选择吗?我发现了,但是我对C++不太熟悉,而且我很难把它加入到VS2008中去玩。我相当精通C和C#,所以我希望,对于这样的东西,如果必须的话,我应该能够摸索通过

  • 是否有人知道有任何现有的组件可以实现我想要的功能?我们可以买的东西?我不能在这件事上浪费太多时间。我已经做了一些关于“WindowsCEDirectShow”和“WindowsCEDirectShow源代码过滤器”的搜索,但我只得到了同样的几篇文章和未回复的论坛帖子。我不确定是否什么都不存在,或者我在寻找错误的东西

  • 如果我自己写的话,我发现了一些文章,例如,他们在C语言中创建了过滤器而不是C++。这看起来更符合我的舒适区,但我仍然不确定我到底需要做什么。我对获取UDP流数据的想法很好,但我不确定接下来需要做什么才能将其获取到“输出引脚”。我如何修改我们的软件来使用这个定制的过滤器,而不是普通的过滤器?目前,我似乎无法理解如何开始使用空源过滤器

    我很抱歉,如果这些看起来像是琐碎的东西,但这一切都是有点太多了,在一次去接受,我只是需要一些指导,我想。如果有人能帮我,我将不胜感激

    提前感谢,


    Rik

    如果你想购买产品,我建议你联系他的公司,看看他们有什么或可以做些什么

    他的博客是>>这里关于你的问题:

  • 是的,定制的Direct Show过滤器正是您所需要的。然后可以将该过滤器插入filtergraph

  • 我不知道有任何现成的Windows CE产品可以做到这一点,但我也从未寻找过这样的产品,所以不要认为我缺乏知识就等于缺乏可用性。我敢打赌,如果你想把你的工作建立在别人的基础上,你必须找到一个桌面版本的过滤器,获取源代码,然后为Windows CE重新编译它。我知道那里有一船成像的东西,所以至少值得在那里进行一次调查

  • 如果你自己写的话,很不幸的是,必须在C++中完成。DirectShow筛选器必须具有COM接口。要导出本机接口,框架必须具有EE宿主,而Compact框架没有。这样做的最终结果是,您无法在Compact框架中创建COM对象或CCW,这意味着您无法在C#for Windows CE中创建DirectShow筛选器


    啊,但我的电子邮件地址在我的个人资料中,你已经链接到了。把它放在我的博客里,我以前做过,会产生惊人数量的垃圾邮件(比我现在收到的数量多得多)。好的,谢谢你。我已经在我的桌面上安装并运行了球形过滤器示例。我正在考虑修改它,从UDP源接收数据,然后将其移植到WinCE。