如何在.net中使用FFmpeg?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

所以我知道它是一个相当大的挑战,但我想用c#编写一个基本的电影播放器​​/转换器,使用FFmpeg库。然而,我需要克服的第一个障碍是将FFmpeg库封装在c#中。我已经下载了ffmpeg,但无法在Windows上编译它,所以我为我下载了一个预编译版本。好,真棒。然后我开始寻找C#包装器。

我环顾四周,发现了一些包装,如SharpFFmpeg(http://sourceforge.net/projects/sharpffmpeg/)和ffmpeg-sharp(http://code.google.com/p/ffmpeg-sharp/)。首先,我想使用ffmpeg-sharp作为LGPL,SharpFFmpeg是GPL。但是,它有很多编译错误。原来它是为单声道编译器编写的,我尝试用单声道编译它,但不知道如何。然后,我开始自己手动修复编译器错误,但遇到了一些可怕的错误,并认为我最好不要这些。所以我放弃了ffmpeg-sharp。

然后,我看着SharpFFmpeg,它看起来像我想要的,所有的功能P /为我调用。但是它的GPL?AVCodec.cs和AVFormat.cs文件看起来像avcodec.c和avformat.c的端口,我认为我可以将自己移植到端口上?那么不必担心授权。

但我希望在我继续之前开始编码。我是不是该:

  1. 编写我自己的C ++库以便与ffmpeg进行交互,然后让我的C#程序与C ++库进行对话以播放/转换视频等。

要么

  1. 通过使用大量的DllImports并将其完全写入C#中,将avcodec.h和avformat.h(是我需要的全部内容?)传递给c#?

首先,我认为我对C ++并不擅长,因为我很少使用它,但我知道足以解决问题。我认为#1的原因可能是更好的选择是,大多数FFmpeg教程都是用C ++编写的,而且我还可以更好地控制内存管理,而不是在c#中执行。

你怎么看?你也会碰巧有任何有用的链接(也许是一个教程)使用FFmpeg?

提问于
用户回答回答于

还有几个其他的托管包装供您查看

在.NET中编写自己的互操作包装可能是一个耗时且困难的过程。为Interop编写C ++库有一些优点 - 特别是它可以大大简化C#代码的接口。但是,如果只需要库的一个子集,只需在C#中执行interop即可。

用户回答回答于

原来的问题现在已经超过5年了。与此同时,现在有一个来自ffmpeg的WinRT解决方案和一个来自Microsoft的集成示例。

扫码关注云+社区