c# - ffmpeg 在 Windows Mobile 上使用 C#

标签 c# windows-mobile ffmpeg

我需要与 合作FFmpeg 对于 windows 手机 C# ,实际上我想为 .m4b,.m4a 文件构建播放器。我知道 TCPMP 是存在的,但我想自己做。
所以我想用 .Net ,我有一些问题:

  • 如果我使用一些 C# FFmpeg 包装器 ,例如TaoFramework,它可以在windows mobile上运行吗(如果我使用为windows mobile编译的FFmpeg lib )?
  • 在 FFmpeg wiki 我发现了这个

  • Once you have compiled, or downloaded, the Windows DLLs for FFmpeg, you can use .Net Platform Invoke (PI) to access the functions in the libraries libavformat and libavcodec. Link to source...



    但是不知道怎么用?我尝试使用从 http://ffmpeg.arrozcru.org/autobuilds/ 下载的 dll 来制作它。 .也许我需要为这个选项自己编译 ffmpeg?

    最后一个问题是——什么是 libavcodec?当我下载共享构建时,我得到了 avcodec-52.dll、avfilter-1.dll、ffmpeg.exe,但是我找不到 libavcodec.dll,或者它只是别名?

    最佳答案

    这里有很多问题,还有很多你需要理解的东西。

    首先,实际的播放器核心逻辑本身几乎肯定需要在 native 代码中,以防止垃圾收集 (GC) 的可能性。在 GC 期间,所有托管线程都被挂起,在播放视频或音频时,这是一个问题。

    因此,这意味着如果您希望您的应用程序处于托管代码中(这很好),那么您将需要一个混合解决方案。这意味着您需要了解并且对于此应用程序非常了解 native 代码如何工作以及托管代码如何与 native 代码互操作。

    现在,如果那里有现有的 FFmpeg 库(我会接受你的工作,我对 FFmpeg 一无所知),那么你要做的第一件事就是确定它们是否有专门为 Windows CE 编译的版本。如果他们不这样做,您将必须确定进行该移植的难度,而您提出这个问题的事实使我相信,对于您当前的技能而言,进行这种规模的移植将非常困难放。

    如果他们确实有针对 Windows CE 的构建,那么您需要了解它的编程接口(interface)是什么。如果它碰巧是 C++ 类,那么你不能直接从托管代码中调用它,所以你必须在 native 代码中编写一个“shim”库,它公开直接的 C 入口点,这将使所有 C++ 分配并呼唤你。

    完成所有这些后,您可以查看通过 Platform Invoke 从托管代码调用 shim 或库的 C 接口(interface)的任务。

    基本上你有很多工作要做,没有任何我可以指出的明确的文章可以引导你从一端到另一端。这里有一些链接可以帮助您入门。如果您完全理解其中的每一个,那么您可能会具备适当的知识来编写围绕现有实现的包装器(不一定要编写播放器核心实现本身)。

  • An Introduction to P/Invoke and Marshaling on the Microsoft .NET Compact Framework
  • Advanced P/Invoke on the Microsoft .NET Compact Framework
  • Marshalling Types During Platform Invoke (P/Invoke) on the Microsoft .NET Compact Framework
  • Writing Unmanaged Functions for Microsoft .NET Compact Framework-based Applications
  • Marshaling data in the Compact Framework
  • A simple example of complex marshaling
  • Recording and Playing Sound with the Waveform Audio Interface
  • 关于c# - ffmpeg 在 Windows Mobile 上使用 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3093315/

    相关文章:

    C# 低级键盘钩子(Hook)不工作

    c# - 如何获取列表框中单击按钮的索引

    c# - 在 Windows Mobile 应用程序中存储应用程序设置的首选方法是什么?

    c++ - 什么会导致父窗口不知道它有一个子对话框?

    c# - visual-studio 2013 是否支持 Windows-mobile 或 Windows-CE 编程?

    image-processing - 从通过混合一堆图像创建的视频中提取帧正在改变帧的完整性

    git - Mingw+msys2 : Failed to connect to bitbucket. org : 网络不可达

    c# - 为什么我的平台目标=任何CPU Windows服务项目安装后在WOW64中作为32位进程运行?

    video - FFmpeg。如何将视频合并到多个文件中?

    c# - 用于项目文件编辑的 Visual Studio 插件 (csproj)