Fab*_*zio 5 java audio video android flutter
由于我对这个问题没有答案,也没有太多反馈: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) 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: 我找到了一个可能的替代方案: Kha(http://kha.tech/)。但是再次找不到关于如何将它与 Flutter 一起使用的信息。这可能是一个好主意吗?
我想进一步确认我是否可以使用 Java 或任何其他语言在 Flutter 应用程序中完成我需要的操作。如果是的话,如果它很复杂或不那么复杂。(我是一个初学者排序)。但是一些教程或链接来启动代码也会有帮助!
Flutter 目前非常适合构建 UI,但正如您所提到的,它还没有太多的功能或与库的兼容性。很大一部分原因是它与 C++ 的集成并不容易,但我现在不打算讨论这个问题。
你所要求的很可能是可能的,但要做起来一点也不简单。首先,听起来您想要从视频中提取特定的帧并显示它们 - 这将是一个额外的复杂性。并且不要忘记,在移动设备上,您的处理能力有些有限 - 事情必须非常异步,这实际上可能会导致抖动问题,除非您小心谨慎。
至于你的观点:
这是一个非常普遍的问题。我建议查找 android 音频处理库。我几乎确定这是可能的,但是这样的问题并不是为了询问要使用哪个框架的建议。尝试https://softwarerecs.stackexchange.com/。
再说一次,相当笼统,而且有点不清楚你要问什么......尝试 sofwarerecs。我想您想拍摄几帧并将它们制作成视频?
其中一些效果(即缩放)您绝对可以使用变换通过颤动来实现。但这只是在 flutter 中播放时发生的,而不是添加到视频文件本身。为此,您必须在 android/java 代码中使用视频库。
视频库应该再一次做到这一点。
这也应该是视频库的一部分。
我确实知道一个名为“处理”的音频/视频库可以满足您的需求,但不确定。不过它确实有一个 android sdk。OpenCV是另一个,但仅用于视频/图像处理,我还没有直接将它与 Java 一起使用,所以我不确定它是否容易使用。
对于如何与 flutter 一起实际实现这一点......您将需要使用Platform Channels。我在你的其他答案的评论中提到了它们,但我想你可以自己查一下。该文档确实比我更好地解释了它的工作原理以及如何设置它。但 TLDR 本质上是,它们允许您将序列化数据从本机代码(java/kotlin/swift 等)发送到 flutter 代码(dart),反之亦然,这些数据会被转换为目标中的类似数据结构语言。您可以设置数据流动的各种“通道”,并在这些通道中设置在任一端调用的“方法”,或者只是来回发送事件。
我在开始时提到的复杂性是,在 flutter 和 dart 之间的通道上来回发送图像并不是那么理想。您很可能无法获得从 java 发送到 dart 的平滑 24/30/60fps 图像,并且它可能会显着减慢 flutter ui 的其余部分。因此,您需要在实际视口中使用的是Texture,它只是显示来自 Android 端的数据。您必须自己弄清楚如何从 Android 写入纹理,但有很多可用的信息。控件、音频可视化等可以直接在 flutter 中使用从本机检索的数据来完成。
您将拥有的本质上是一个用 dart/flutter 编写的远程控件,它将各种命令发送到 Java 中的音频/视频处理库和包装器代码。
如果这一切听起来很复杂,那是因为事实确实如此。尽管 flutter 非常适合构建 UI,但我怀疑如果您只针对 Android,是否值得为此付出额外的复杂性。
与答案并不真正相关,而是一些友好的建议:
我要提到的另一件事 - 我不知道您对编程和不同语言的熟练程度,但视频/音频处理等通常不是用 java 完成的,而是用实际的本机代码(即 c/c++ )。因此,实际上您必须在这里处理两个抽象级别(在某种程度上,根据您使用的库,它可能会有所抽象或很多抽象) - c/c++ 到 java和java到dart。
您可能希望消除中间商并更直接地与原生合作 - 在这种情况下,我建议至少看一下Qt或JUCE,因为它们可能比 flutter 更适合您的特定用例。还有Kivy(使用 python),它可能工作得很好,因为 Python 有大量的图像/视频/音频处理库……尽管它们可能并不都在 android 上工作,并且在某种程度上仍然有 c++ => python 翻译。不过,您必须考虑许可等问题 - Qt 对于大多数 Android 应用程序都有足够广泛的操作系统许可,但除非您使用开源软件,否则您必须付费才能使用 JUCE。我不得不比其他人更推荐 Qt,因为它实际上具有视频帧等的本机解码,尽管您可能希望合并 OpenCV 或其他东西来实现您正在谈论的更复杂的效果。但它可能与简单地用 java 代码编写相同的复杂程度,但 UI 风格略有不同并且更容易与 c++ 库集成。