gpt4 book ai didi

java - 在 Flutter 应用程序中使用 Java 或其他语言

转载 作者:IT老高 更新时间:2023-10-28 12:41:34 28 4
gpt4 key购买 nike

由于我没有得到答案,也没有对这个问题提供太多反馈:Android Flutter Analyze Audio Waveform
并且在网上找不到关于我正在寻找的内容的任何信息,我只会问一个更广泛的问题,因为对该答案的评论告诉我使用 native 代码并使用平台 channel 将其连接到 flutter ,但是当我提出一些说明时,我一无所获。

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

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

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

编辑1:
什么是峰值点?

enter image description here

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

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

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

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

5) Edit 4: 最重要的事情,我不想这一切都是实时的,而更像是一个 After Effect 像 Render 过程,其中所有帧都一起渲染。唯一会好的是一种进度条,告诉用户渲染在帧上,例如,300 个中的 200 个,但我不想显示任何帧或视频,只是为了渲染它在后台,然后将其保存为 mp4 视频,之后可以查看。

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

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

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

你说我可以在 Flutter 中使用 C++ 或 Java,但你说使用 C++ 是一个困难的过程。 所以我的问题原来是我可以用普通的 Android 应用程序用 Java 编写进程,然后以某种方式使用 Flutter 应用程序中的函数吗?

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

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

最佳答案

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

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

至于你的观点:

  • 这是一个非常笼统的问题。我建议查找 android 音频处理库。我几乎可以肯定这是可能的,但 SO 问题并不意味着就使用哪个框架提出建议。试试 https://softwarerecs.stackexchange.com/ .
  • 再一次,相当笼统,有点不清楚你在问什么......试试sofwarerecs。我假设您想拍摄几帧并将它们制作成视频?
  • 其中一些效果(即缩放)您绝对可以使用 Transform 进行 flutter 。但这只是在 flutter 时播放,而不是添加到视频文件本身。为此,您必须在 android/java 代码中使用视频库。
  • 再一次,视频库应该这样做。
  • 这也应该是视频库的一部分。

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

    对于如何与 flutter 一起实际实现这一点......你将需要使用 Platform Channels .我在你的另一个答案的评论中提到了它们,但我想你可以自己查一下。该文档在解释其工作原理以及如何设置方面做得比我好得多。但 TLDR 本质上是,它们允许您做的是将序列化数据从 native 代码(java/kotlin/swift 等)发送到 flutter 代码(dart),反之亦然,这些数据在目标中被转换为类似的数据结构语。您可以设置数据流动的各种“ channel ”,并在这些 channel 中设置在任一端调用的“方法”,或者简单地来回发送事件。

    我在开头提到的复杂情况是,在 flutter 和 dart 之间的 channel 之间来回发送图像并不是那么理想。您很可能无法获得从 java 发送到 dart 的平滑 24/30/60fps 图像,并且它可能会显着减慢 Flutter ui 的其余部分。所以你想要用于实际视口(viewport)的是 Texture ,它只是显示来自 android 端的数据。您必须自己弄清楚如何从 android 写入纹理,但是有很多可用的信息。控件、音频的可视化等可以直接在 Flutter 中使用从 native 检索的数据来完成。

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

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

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

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

    你可能想去掉中间商,更直接地与本地人合作——在这种情况下,我建议至少看看 QtJUCE因为它们可能比 flutter 更适合您的特定用例。还有 Kivy (使用 python)它可能工作得很好,因为有大量的 Python 图像/视频/音频处理库......尽管它们可能并非都适用于 android 并且在某种程度上仍然具有 c++ => python 翻译。不过,您必须考虑许可等问题 - Qt 为大多数 android 应用程序提供了足够广泛的操作系统许可,但除非您正在做开源,否则您必须支付 JUCE。我不得不比其他人更推荐 Qt,因为它实际上具有视频帧的 native 解码等,尽管您可能想要合并 OpenCV 或其他更复杂的效果。但它可能与简单地用 Java 代码编写相同的复杂程度,但 UI 风格略有不同,并且更容易与 C++ 库集成。

    关于java - 在 Flutter 应用程序中使用 Java 或其他语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52044787/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com