【问题标题】:Use Java or other languages in a Flutter Application在 Flutter 应用程序中使用 Java 或其他语言
【发布时间】:2018-08-27 18:08:38
【问题描述】:

由于我没有得到答案,也没有太多关于这个问题的反馈:Android Flutter Analyze Audio Waveform 并没有在网上找到关于我正在寻找的内容,我只会问一个更广泛的问题,因为对该答案的评论告诉我使用本机代码并使用平台通道将其连接到颤振但是当我问一些澄清时我一无所获。

所以我的问题是我是否可以在 Java 中进行操作(它已经存在了很长时间,因此有更大的文档),然后在 Flutter 中使用结果。

更准确地说,我可以在 Java 和 Flutter 中做这些事情吗:

1) 分析Audio波形,找到特定频率的峰值点,并使用时间戳以flutter显示;

编辑 1: 什么是峰值?

这是不同频率范围的波形(橙色的是低音(80-255Hz)),黑色圈出的点是峰值点。我应该分析一首歌的音频幽灵并找到某些频率的峰值点。然后当我找到峰值时,我需要保存时间戳,例如 16 秒等。

2) 编辑 2: 我需要编辑视频中的一些照片,例如视频拼贴,30 或 60fps 视频的每一帧都是一个图像。

3) 编辑 3: 我需要为视频添加基本的帧特定效果,例如将帧更改为帧的模糊或眩光。

4) 向该视频添加音乐并将其保存为 mp4 或 avi 或任何格式。

5) 编辑 4:最重要的是,我不希望这一切都是实时的,但更像是像渲染过程一样的 After Effects,其中所有帧都一起渲染。唯一会好的是一种进度条告诉用户渲染在帧中,例如,200 of 300,但我不想显示任何帧或视频,只是为了渲染它在后台,然后将其保存为可以观看的 mp4 视频。

正如您所见,使用一种语言很难找到有关如何播放音乐的教程,因为它处于早期状态。但是 Flutter 中的 UI 和其他一些东西更容易做到,而且 Flutter 也是多平台的。所以我更喜欢坚持 Flutter 语言。

编辑 5: 我看了一下 Qt 和 JUCE,发现 Qt 似乎是一个有效的替代方案,但它似乎更像是一个“封闭”系统,我的意思是,例如,我查看了多媒体库,但对于我所理解的,你可以做一些基本的事情,例如播放视频,但不能拼贴帧并保存它。 (不知道我是否解释得很好)。 JUCE 另一方面,它看起来更好,但它似乎更多地用于 PC 音频 VST,而不是用于包括视频渲染在内的移动应用程序。还有一点就是这两个不像 Flutter 那样免费开源。

然后是 Kivy,它可能是最好的,也可能不是最好的,因为它是移动设备的 Python 端口,我对 Python 有很多经验而且我认为它是一种更容易学习的语言,但在另一方面,它没有那么多的用户界面功能。正如您所提到的,在 Android 上使用库可能会出现问题。

您说我可以将 C++ 或 Java 与 Flutter 一起使用,但对于 C++,您说这是一个困难的过程。 所以我的问题是我可以用普通的 Android 应用程序在 java 中编写流程,然后以某种方式使用 Flutter 应用程序中的功能吗?

编辑 6: 我找到了一个可能的替代方案: 卡 (http://kha.tech/)。但再次发现如何将它与 Flutter 一起使用。 这是个好主意吗?

我想进一步确认是否可以使用 Java 或任何其他语言在 Flutter 应用程序中完成我需要的工作。如果是的话,如果它很复杂或没有那么复杂。 (我是初学者)。但是一些启动代码的教程或链接也会有所帮助!

【问题讨论】:

  • 你可以,但那不会是多平台的。它更像是一个原生插件

标签: java android audio video flutter


【解决方案1】:

Flutter 目前非常适合构建 UI,但正如您所提到的,它还没有强大的功能或与库的兼容性。一个很好的原因是它与 c++ 的集成并不容易,但我现在不会进入that

您所问的问题很可能是可能的,但这绝不是一件容易的事。首先,听起来您想从视频中提取特定帧并显示它们 - 这将是一个额外的复杂性。并且不要忘记在移动设备上您的处理能力有些有限 - 事情必须非常异步,除非您小心,否则实际上可能会导致颤动问题。

关于你的观点:

  1. 这是一个非常笼统的问题。我建议查找 android 音频处理库。我几乎可以肯定这是可能的,但 SO 问题并不是要就使用哪个框架提出建议。试试https://softwarerecs.stackexchange.com/

  2. 再一次,相当笼统,有点不清楚你在问什么......试试sofwarerecs。我假设您想要拍摄几帧并将它们制作成视频?

  3. 其中一些效果(即缩放)绝对可以使用 Transform 来处理颤振。但这只是在颤动中播放,而不是添加到视频文件本身。为此,您必须在 android/java 代码中使用视频库。

  4. 再一次,视频库应该这样做。

  5. 这也应该是视频库的一部分。

我确实知道一个名为Processing 的音频/视频库,可以满足您的需求,但不确定。它确实有一个 android sdk。 OpenCV 将是另一个,但仅用于视频/图像处理,我没有直接在 Java 中使用它,所以我不确定它是否易于使用。

关于你实际上如何与颤振一起实现它......你将需要使用Platform Channels。我在对您的其他答案的评论中提到了它们,但认为您可以自己查找。该文档确实比我能更好地解释它是如何工作的以及如何设置它。但是 TLDR 本质上是这样的,它们允许你做的是将序列化数据从本机代码(java/kotlin/swift 等)发送到颤动代码(dart),反之亦然,在目标中被翻译成类似的数据结构语言。您可以设置数据在其上流动的各种“通道”,并在这些通道中设置在任一端调用的“方法”,或简单地来回发送事件。

我在开头提到的复杂情况是,在颤振和飞镖之间的通道之间来回发送图像并不是那么理想。您很可能不会获得从 java 发送到 dart 的流畅 24/30/60fps 的图像,并且它可能会显着减慢 Flutter ui 的其余部分。因此,您要用于实际视口的是Texture,它只是显示来自android 端的数据。您必须自己弄清楚如何从 android 写入纹理,但有很多可用的信息。控制、音频的可视化等可以直接与从原生检索的数据一起完成。

您将拥有的本质上是一个用 dart/flutter 编写的遥控器,它将各种命令发送到一个音频/视频处理库和 Java 包装代码。

如果这一切听起来很复杂,那是因为它很复杂。尽管 Flutter 非常适合构建 UI,但如果您只针对 android,我怀疑是否值得额外的复杂性。


与答案无关,而是一些友好的建议:

我还要提到另一件事 - 我不知道您对编程和不同语言的熟练程度,但视频/音频处理等通常不是在 java 中完成,而是在实际的本机代码中完成(即c/c++)。因此,实际上您必须在这里处理两个抽象级别(在某种程度上,它可能会根据您使用的库而被抽象一些或很多) - c/c++ 到 java和java飞镖。

您可能希望减少中间商并更直接地与原生合作 - 在这种情况下,我建议至少看看 QtJUCE 因为它们可能比颤振更适合您的特定用途案子。还有Kivy(使用python)可能运行良好,因为有大量用于Python的图像/视频/音频处理库......尽管它们可能并不都适用于android并且仍然有c ++ => python翻译到一些程度。不过,您必须考虑许可等问题——Qt 对大多数 Android 应用程序都有足够广泛的操作系统许可,但除非您在做开源,否则您必须为 JUCE 付费。我不得不比其他人稍微推荐 Qt,因为它实际上具有对视频帧等的本机解码,尽管您可能想要结合 OpenCV 或其他东西来获得您正在谈论的更复杂的效果。但它可能与简单地用 java 代码编写一样复杂,但 UI 风格略有不同,并且更容易与 c++ 库集成。

【讨论】:

  • 感谢您的回答!但是有些地方我没有解释清楚,因此我编辑了答案以使其更清晰
  • 您的问题有很多要点,其中大部分都不太适合 Stack Overflow,它实际上更多的是解决特定的编码问题。至于我认为您的主要问题是 (我可以用普通的 Android 应用程序在 java 中编写该过程,然后以某种方式使用 Flutter 应用程序中的函数吗?) 我确实回答了这个问题 - 使用平台通道,因为它们支持 Java 和 Dart 代码之间的通信。
  • 有人知道 Python >> Flutter 是否仍然如此?
  • python 绝对不是 Flutter 原生支持的。在 dart FFI 实现上已经有一些工作,它允许与 c/c++ 库集成,理论上可以用于与 python 通信,但这可能暂时不会发生。理论上你可以集成 python,但是你通常会在 android 或 ios 应用程序中这样做,然后去 flutter -> java/kotlin -> python 或 flutter -> swift/obj-c -> python,但这会很困难.如果你真的需要在移动应用中使用 python,可以看看kivy
猜你喜欢
  • 2013-09-19
  • 2019-07-31
  • 2011-03-09
  • 2010-10-07
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多