FFmpeg autogen 结合 openh264

FFmpeg autogen in combination with openh264

我正在使用 FFmpeg autogen 将从 PC 实时捕获的图像(60 或 30 fps)流式传输到 Android 应用程序。一切正常,因为我使用了 FFmpeg autogen 提供的 h.264 编码示例。

据我所知,FFmpeg autogen 是在 LGPL 许可下的,如果您使用的是在 LGPL 许可下编译的自定义 FFmpeg 库,例如 ffmpeg-win32 您可以动态 link 到 FFmpeg autogen如果您的项目是封闭源代码,则不会违反 LGPL 许可。

所以我认为一切都会好起来的,但后来我发现 h.264 编码在美国获得专利,MPEG LA 代表 AVC/H.264 技术的专利持有人。如果您将它用于免费视频,您可以使用 h.264 编解码器而无需支付版税。尽管如此,我使用编码器的 Windows 程序是免费的,但我的 Android 应用程序不是免费的,所以我想我必须支付版税。

关于这个问题我有几个问题:

  1. FFmpeg autogen 使用哪个编码器,因为据我所知 x264 是在 GPL 许可下。我假设它将使用一些内部 FFmpeg 软件编码器?

  2. 您不能在不需要支付版税的情况下免费提供编码视频流的项目中使用 FFmpeg(x264 等)的任何内置标准编码器,对吗?

  3. 经过一些研究我发现 openh264。该库由 cisco 构建,他们将支付所有版税,但您不得将其与您的应用程序捆绑在一起,必须在安装过程中下载。它也适用于 FFmpeg,但如何让它与 FFmpeg autogen 一起使用?我是否需要使用 cisco 的 openh264 库的自定义 FFmpeg 构建?

我知道这不是律师论坛,但也许有人已经处理过所有这些问题,或者至少可以回答有关 FFmpeg autogen 的问题。我在互联网上搜索了一段时间,但不幸的是,h.264 的许可机制似乎不太容易理解。

我差点忘了这个问题,但我想我现在已经明白了一切,所以我会自己回答。也许对某人有帮助。如果有不正确的地方,请随时纠正我。

As far as I have understood FFmpeg autogen is under the LGPL licence and if you are using custom FFmpeg libs compiled under LGPL licence like for example ffmpeg-win32 you can dynamically link to the FFmpeg autogen library without violating the LGPL licence if your project is for example closed source.

这确实是正确的。 FFmpeg autogen 已获得 LGPL 许可,但如果您只是使用 zeranoe 提供的 FFmpeg 库,那么您就不走运了,因为所有这些构建均已获得 GPL 许可。这意味着即使 FFmpeg autogen 在 LGPL 下,你的项目仍然必须在 GPL 下发布,因为 FFmpeg GPL 库。

幸运的是,您可以在 LGPL 下编译您自己的自定义版本的 FFmpeg,但您会错过一些功能,例如 x264(基本上所有不适合 LGPL 的功能)。编译自定义版本的 FFmpeg 可能非常复杂,但我在 github 上找到了一个名为 media-autobuild_suite. These scripts basically compile FFmpeg for you and offer many customization features for all kind of FFmpeg features like openh264 and many more. I posted some more details here.

的好项目

So I thought everything would be okay but then I figured out the the h.264 coded is patented in the US and MPEG LA represents the patent holders of AVC/H.264 technologies. If you are using it for free videos you can use h.264 codecs without paying royalties. Nevertheless, my Windows program which is using the encoder is free but my Android application is not free so I guess I have to pay royalties.

我联系了 MPEG LA,无论您的程序是否免费都没有关系,如果您想获得许可证的保护,您必须联系 MPEG LA 并为您的产品申请许可证。只要您的程序每年下载次数不超过 100 000 次,您就无需支付任何费用。您必须每年向 MPEG LA 提供一些报告,其中应包含有关下载的所有信息。如果您有任何问题,请联系 MPEG LA,他们通常反应迅速,回复速度非常快。

  1. Which encoder does the FFmpeg autogen use, because as far as I know x264 is under GPL licence. I assume that it will use some internal FFmpeg software encoder?

如果您只使用 zeranoe FFmpeg 构建,FFmpeg autogen 将使用 x264 编码器。但总的来说,这取决于你如何编译 FFmpeg。我用 openh264 编译了 FFmpeg,以便将 openh264 编码器与 FFmpeg autogen 一起使用,只需像这样加载编码器

ffmpeg.avcodec_find_encoder_by_name("libopenh264");
  1. You can't use any built in standard encoder from FFmpeg (x264 etc.) in projects which don't offer their encoded video stream for free without the need of paying royalties, right?

我不知道这对于 FFmpeg 中的任何其他内置编码器是否正确,但您不能在不向 MPEG LA 申请许可的情况下使用 x264。除了openh264因为cisco会为你支付版税。请记住,您不能将 openh264 与您的应用程序捆绑在一起,否则您有责任向 MPEG LA 而不是 cisco 支付版税。您必须在程序安装过程中下载 openh264,或者您可以在程序运行时提供一些下载可能性。

  1. After some researches I found openh264. This library is built by cisco and they will pay all the royalties but you are not allowed to bundle it with your application, it must be downloaded during the installation process. It also works with FFmpeg but how to I get it to work with FFmpeg autogen? Do I need a custom FFmpeg build which are using the openh264 lib from cisco?

是的,您必须在安装过程中或程序运行时下载它,是的,您需要使用 openh264 构建自定义 FFmpeg LGPL。您可以使用 media-autobuild_suite.

轻松编译您自己的 FFmpeg 版本

另外一件事,如果您在 LGPL 下使用 FFmpeg,请记住您必须考虑一些条件,您可以找到它们 here。目前为止就这样了。我希望这些是一些有用的信息。