visual-studio - 扩展 Win Embedded CE 6.0 的媒体功能

标签 visual-studio ffmpeg windows-ce cross-compiling codec

我有一个以 WinCE 6.0 作为操作系统的嵌入式设备。制造商为其提供了用于 3rd 方开发的 IDE。 IDE 几乎只允许

  • 从主应用程序的各种事件调用的 .NET 3.5 Compact Framework 脚本
  • 将文件添加到设备。

  • 包含的媒体播放器似乎正在使用 DirectShow,并且操作系统具有仅用于 mpeg-1 编码视频播放的媒体编解码器。 我的目标是能够播放使用其他编解码器编码的媒体在那个主应用程序中。

    我已经设法使用 DirectShowNETCF(.NET Compact Framework 的 DirectShow 包装器)并成功播放 mpeg-1 编码的视频。

    我对这些东西完全陌生,我有很多(愚蠢的)问题。我将尝试缩小范围:
  • 该操作系统基于 WinCE,但据我了解,它实际上始终是它的一些定制版本(通过 Platform Builder)。之后为其开发任何东西的唯一“正确方法”是使用制造商通常提供的SDK。正确的?就我而言,SDK 非常有限,并且如上所述紧密集成到 IDE 中。但是,.NET CF 3.5 能够进行互操作,因此可以调用 native 库——只要它们是为正确的平台编译的。
  • 编译后的代码几乎只是处理器的指令(汇编代码),编译器会根据目标处理器设置选择正确的指令。还有一个 PE-header 定义了程序要在哪个平台上运行。如果我将我的“helloworld.exe”(除了返回特定的退出代码什么都不做)定位到 x86 并用 VC 编译它,它应该工作吗?
  • 如果 PE-header 实际上是问题所在,是否可以在没有 SDK 的情况下设置 WINCE?我真的需要整个 SDK 来创建仅使用基本类型的简单可执行文件吗?我正在使用 VS2010,它甚至不再支持智能设备开发,我不想仅仅为了测试目的而降级。
  • 以上问题是我实际想法的前传:Porting ffmpeg/ffdshow for WinCE。这其实已经exists ,但不是针对英特尔凌动的,也不是为英特尔凌动构建的。注释?
  • 如果本地实现是不可能的,我最终会用 C# 实现一些特定的编解码器......那可能是一项相当艰巨的任务。但是必须选择 C# 而不是原生,我会遇到编解码器性能问题吗?我的意思是.. C# 慢得多吗?

  • 谢谢你。

    最佳答案

    我还没有看到一个 OEM 发布了他们自己的 IDE,但这当然是可能的。然而,这不应该改变应用程序的创建方式。他们可能已经做了很多工作来确保仅从他们的 IDE 中工作,但这将是一项严肃的工作,并没有太大的好处,所以我认为这不太可能。

    至于你的具体问题:

  • 操作系统是 Windows CE,而不是“基于”它。然而,操作系统是组件化的,因此并非所有部件都可用。 SDK 通常提供一种机制来过滤掉不可用的内容。您实际上可以使用针对正确处理器架构的任何 SDK,但是如果您的应用程序调用库以获取操作系统中不存在的内容,那么您至少会收到一个错误。对于托管代码,这一切都无关紧要,因为 CF 没有组件化。如果存在,并且 CF 应用程序可以运行(如果不存在,您通常可以在事后安装它)。这意味着如果平台支持 CF,那么您可以编写一个 CF 应用程序并运行它。然后,该应用程序可以通过 P/Invoke 调用 native 内容(当然,除非操作系统创建者决定添加安全性以防止这种情况发生。这在操作系统中是可能的,尽管我从未见过它实现)。
  • 是的,编译后的代码只是“指令”。对于 native ,是的,它们是处理器指令。对于托管,它们是 MSIL 指令,托管运行时依次在 JIT 时间转换为处理器指令。如果您的目标是 ARM 平台,则不能使用 x86 编译器。一般来说,您需要使用支持 Windows CE 的正确 Microsoft 编译器,并使用适当的开关调用该编译器,不仅告诉它处理器架构,还告诉它目标操作系统,因为需要完成的链接会有所不同操作系统级 API 甚至 C 运行时。简而言之,对于您的平台,您需要使用 Visual Studio 2008 Pro。
  • 对于原生应用程序,您需要一些针对相同操作系统版本(CE 6.0)和处理器架构(例如 ARMv4I)的 SDK。使其与操作系统功能集相匹配也很有用,但不是必需的。对于托管代码,您可以只使用 Studio 附带的 SDK,因为托管代码不依赖于处理器。不过,您必须回到 Studio 2008,因为 2010 没有任何 WinCE 编译器。
  • 如果您找到了现有的库,那么您可以尝试使用它。可能会阻碍您进步的事情是 A)不太可能使用您拥有的 SDK,因此您可能必须创建新的项目文件(痛苦,但可行)和 B)如果它使用您的操作系统中不可用的功能,那么您将拥有解决这些问题。如果您缺少操作系统功能,您可能不走运,但如果它已经有媒体播放器和编解码器,我怀疑您会没事的。
  • 不要在托管代码中实现这一点。说真的,只是不要这样做。您可以...吗?是的。除了避免 GC 卡顿之外,性能可能几乎相同,您基本上必须创建自己的内存管理器。这条路径涉及的工作量非常非常大。
  • 关于visual-studio - 扩展 Win Embedded CE 6.0 的媒体功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238317/

    相关文章:

    c# - 2个项目1个解决方案分享课?

    vb.net - 不同环境下的十进制解析差异

    node.js - 如何将流从 h265 转换为 h264

    embedded - 在 x86 嵌入式设备上安装 Windows CE

    c - recv 阻塞直到发送第二个数据包

    c# - EF5 IQueryable 不包含 ToListAsync 的定义

    c - 使用 Visual Studio 确定堆栈空间

    opencv - 将多个 RTSP 流记录到一个文件中

    php - 如何在 PHP 中获取视频时长、尺寸和大小?

    javascript - ActiveX html 控件不调用代码