Delphi PasLibVLC - 无需安装 VLC 播放器即可使用

Delphi PasLibVLC - use without installing VLC player

在我们的应用程序中,我试图通过 TPasLibVlcPlayer 组件 (http://prog.olsztyn.pl/paslibvlc/) 播放流。我成功地做到了这一点,但只有在安装了 VLC 的情况下。

目标是使用我们的应用程序部署所需的 dll,以便我们可以在未安装 VLC 的 (Windows) 电脑上使用我们的应用程序。

问题是:我需要做什么才能完成这项工作?到目前为止,我试着把

在单独的文件夹中卸载 VLC,然后设置这些 dll 的路径

PasLibVlcPlayer1.VLC.Path := 'C:\Tools';

然而,当尝试播放流时,没有任何反应。我调试并看到 libvlc.dll 已加载(返回句柄)并且可以执行所需的过程(GetProcAddress returns 为所有支持的过程分配的地址), 但是当 libvlc_new 被调用时 (在 TPasLibVlc.GetHandle 中), 这个 returns nil.

该目录中是否应该有其他 dll,或者我需要做什么才能使它工作?

VLC 不是一个单一的程序。

VLC 是一个包含不同 类 插件和这些插件数据库的复杂框架,以及为每个特定任务(如转换或播放给定源)构建这些插件互连网络的调度程序。

VLC 与 GStreamer 或 Direct X(它的 DirectShow/DirectMedia 子部分)属于同一级别。您可以在不安装 Direct X 的情况下使用 Direct X 框架吗?几乎没有。

即使是旨在将 BitTorrent 转变为 p2p 在线视频流平台并且已经编写了几年代码的 AceStreamer 项目,他们仍然没有 "copied few libraries" 来自 VLC,而是修改了它的源并制作了自己的构建VLC 播放器与他们的 P2P 到流媒体代理守护程序一起使用。经过这么多年,有了他们所拥有和获得的所有经验。

当然,Linux 发起的 VLC 不依赖于 Windows 安装方式,因此如果这对您的目标没问题,您可以按照 VLC 的方式安装 VLC,但避免将其安装在Windows 条款。为此,您必须

  1. 获取 VLC 的 zip(不是 exe)发行版(win32 或 win64 - 应与您的程序平台相同)。
  2. 创建一个文件夹,您可以在其中将整个 VLC 解压到
  3. 解压后,您必须 运行 vlc-plugins-cache-generator 以便它枚举所有插件并创建其 类 和实现的数据库
  4. 那么您必须确保所有这些文件都可以由用户读取和执行。您的安装几乎肯定会 运行 在 UAC 提升的管理员权限下。这意味着默认情况下所有解压的 VLC 文件包括插件 DB 将无法被计算机的非提升或非管理员用户访问。您必须明确地修复它,让用户有权访问 read/execute 这些文件。
  5. 然后您就可以从该文件夹中的 DLL 调用 VLC 函数。

但我个人认为蜡烛不值得在这里玩游戏,你最好让你的用户自由地使用他们认为合适的 VLC 并在发布新版本时升级它。否则你的程序很可能会成为他们安全问题的根源。


以上观点纯属技术角度。但还有一个问题——合法。

您甚至打算在办公室外分发您的程序吗?一旦您将程序的任何权利从原始权利持有人转移给被许可人,您就必须尊重 VLC 团队的权利。

http://www.videolan.org/legal.html - 请注意 "most" 这个小词,当 VLC 团队描述他们集成到 VLC 中的较小软件项目的状态时。

只要您重新分发未修改的 VLC 安装包 - 您就干净又安全。 VLC 团队明确允许您这样做。如果有人认为 VLC 捆绑包中包含一些盗版或其他非法代码 - 你在某种程度上受到 "I did not know, I merely trusted them they do play fair" 防线的保护。当您认为 VLC 安装程序是理所当然的时候,您就像消费者一样行事。就像在商店购买汽车的人一样。如果以后发现这家商店是非法的并且在出售被劫持的汽车 - 你会失去那辆车,但至少你自己不会进监狱。

但是,一旦您制作了包含 VLC 选定部分的自己的 VLC 包,您就成为了 VLC 合作开发者。您获得了 FLOSS 的那些 "four freedoms",但任何自由都伴随着责任。现在如果 "intellectual property" 秃鹰来找你,你就不会再说 "VLC did it",不。从这一点来看,是你做的。

并且如果某些 FLOSS 项目声称 VLC 盗版了他们的代码(可能性很小,但假设这也是可能的),复杂的 FLOSS 项目由大量不同的小作品(从库到片段和错误修复补丁)组装而成,具有不同的初始许可,并且维护者(即现在 - 您)有责任检查或协商重新许可的兼容性),在您放弃标准的现成捆绑包后,您将对此负责。

然后是 "virus nature" 严格的 GPL 许可证。当您使用标准安装程序包时,您不会将您的代码与 VLC 代码混合。您只需将几个不同的安装程序放入一个媒体中,并且您只使用明确发布供其他软件使用的 API。但是,如果您将 VLC 重新散列为您自己的精简文件集——从那时起,您就不再是消费者,而是合作开发者。所以有可能有一天你会被要求公开你的应用程序的来源,因为你使用 LGPL/GPL VLC 的来源并且你的程序现在应该在相同的条款下分发,否则你的 VLC 分发可能会成为盗版,也许不会,您可以在 public 试用中自由表达您的观点。

你喜欢吗?

在两种情况下,这些担忧不适用于您:

  • 您不分发您的程序,您只在内部使用它。那么 GPL/LGPL 责任不会影响你,对于 "intellectual properties" 秃鹰来说,你大部分时间都在雷达之下。
  • 您使用标准的未修改 VLC 包,因为它是由 VLC 团队制作的。那么你也不受 GPL/LGPL 的约束,任何秃鹰都必须先与 VLC 团队战斗,然后他们才会来找你声称 VLC 是非法软件。

如果这些情况不适合你,那么你想成为 VLC 的共同开发者,因此你接受它的所有责任。只是为了小 space 的收获。你准备好了吗?蜡烛值得游戏吗?