Использовать Java или другие языки в приложении Flutter - PullRequest
0 голосов
/ 27 августа 2018

Так как я не получил ответа и не получил много отзывов по этому вопросу: Android Flutter Analyze Audio Waveform и ничего не нашел в Интернете о том, что я ищу, я просто задам более широкий вопрос, так как комментарий к этому ответу сказал мне использовать нативный код и использовать канал платформы, чтобы соединить его с флаттером, но когда я спросил некоторые пояснения, я ничего не получил.

Итак, мой вопрос: могу ли я выполнять операции в Java (которая существует намного дольше и, следовательно, имеет гораздо большую документацию) , а затем использовать результат во Flutter.

Точнее, могу ли я сделать эти вещи на Java и Flutter:

1) Анализировать звуковую форму волны и находить пиковые точки на определенных частотах и ​​использовать временную метку для отображения их в флаттере;

Редактировать 1: Что такое пиковые точки?

enter image description here

Это форма волны различных частотных диапазонов (оранжевый - бас (80-255 Гц)), а точки, обведенные черным, являются пиковыми точками. Я должен проанализировать звуковой спектр песни и найти пиковые точки на определенных частотах. Затем, когда я найду пики, мне нужно сохранить метки времени, например, 16 секунд и т. Д.

2) Редактировать 2: Мне нужно отредактировать несколько фотографий в видео, например, видео-коллаж, для которого каждый кадр видео 30 или 60 кадров в секунду является изображением.

3) Редактировать 3: Мне нужно добавить к видео базовые эффекты, специфичные для кадра, например размытие, которое изменит кадр за кадром, или блики.

4) Добавление музыки к этому видео и сохранение его в mp4, avi или любом другом формате.

5) Редактировать 4: Самое главное, я не хочу делать все это в режиме реального времени, но больше похоже на процесс After Effect, такой как процесс рендеринга, в котором все кадры отображаются вместе. Единственное, что было бы неплохо, это своего рода индикатор выполнения, который сообщает пользователю, что рендер находится в кадре, например, 200 из 300, но я не хочу отображать ни один из кадров или видео, просто чтобы отобразить его. в фоновом режиме, а затем сохранить его в видео MP4, которое можно просмотреть после.

Как видите, это сложный процесс на языке, на котором вы вряд ли найдете учебник о том, как играть музыку, из-за его раннего состояния. Но Uis и некоторые другие вещи во флаттере гораздо проще сделать, и Флаттер также является мультиплатформенным. Поэтому я предпочитаю придерживаться языка флаттера.

Изменить 5: Я взглянул на Qt и JUCE и обнаружил, что Qt кажется верной альтернативой, но, похоже, для того, что понимается скорее как «закрытая» система, я имею в виду, например, я смотрел мультимедийную библиотеку, но за то, что я понял, Вы можете делать базовые вещи, например, воспроизводить видео, но не создавать коллажи и сохранять их. (Не знаю, хорошо ли я объяснил). JUCE С другой стороны, выглядит лучше, но для ПК аудио VST кажется больше, чем для мобильных приложений, включая видео рендеринг. И еще одна вещь, что эти два не являются бесплатными и с открытым исходным кодом, как Flutter.

Тогда есть Kivy, который мог и не мог быть лучшим, потому что это порт Python для мобильных устройств, и у меня большой опыт работы с Python, и я думаю, что это один из самых простых языков для изучения, но на с другой стороны, он не обладает такой мощью пользовательского интерфейса. и, как вы упомянули, могут быть проблемы с использованием библиотек на Android.

Вы заявили, что я могу использовать C ++ или Java с Flutter, но с C ++ вы сказали, что это сложный процесс. Итак, у меня возник вопрос: могу ли я написать процесс в Java с помощью обычного приложения для Android и затем каким-то образом использовать функции в приложении Flutter?

Изменить 6: Я нашел альтернативу: Кха (http://kha.tech/). Но опять же ничего не нашел о том, как использовать его с Флаттером. Может ли это быть хорошей идеей?

Я прошу больше подтверждения о том, могу ли я использовать Java или любой другой язык, чтобы делать то, что мне нужно в приложении Flutter. И если да, если это сложно или не так много. (Я начинающий Сорта). Но некоторые уроки или ссылки для запуска кода также будут полезны!

1 Ответ

0 голосов
/ 27 августа 2018

Flutter в настоящее время отлично подходит для создания пользовательских интерфейсов, но, как вы упомянули, у него пока нет большой мощности или совместимости с библиотеками. Хорошая причина этого в том, что он не имеет легкой интеграции с c ++, но я не буду сейчас вдаваться в , что .

То, что вы спрашиваете, скорее всего возможно, но сделать это совсем не просто. Во-первых, звучит так, будто вы хотите извлечь отдельные кадры из видео и отобразить их - это будет дополнительным осложнением. И не забывайте, что на мобильном устройстве у вас несколько ограниченная вычислительная мощность - все должно быть очень асинхронным, что может вызвать проблемы при трепетании, если вы не будете осторожны.

Что касается ваших очков:

  1. Это очень общий вопрос. Я бы посоветовал поискать библиотеки обработки аудио для Android. Я почти уверен, что это возможно, но ТАК вопросы не предназначены для того, чтобы спрашивать совет, какую платформу использовать. Попробуйте https://softwarerecs.stackexchange.com/.

  2. Еще раз, довольно общий и немного неясный о том, что вы спрашиваете ... Попробуйте sofwarerecs. Я предполагаю, что вы хотите взять несколько кадров и превратить их в видео?

  3. Некоторые из этих эффектов (например, увеличение) вы определенно можете сделать с флаттером, используя Преобразование. Но это было бы просто во время игры во флаттере, а не при добавлении самих видеофайлов. Для этого вам нужно использовать библиотеку видео в коде Android / Java.

  4. Еще раз, видео библиотека должна сделать это.

  5. Это также должно быть частью библиотеки видео.

Мне действительно известна одна аудио / видео библиотека с именем Обработка , которая может делать то, что вам нужно, но не обязательно. У него есть Android SDK, хотя. OpenCV был бы другим, но только для обработки видео / изображений, и я не использовал его непосредственно с Java, поэтому я не уверен, насколько легко его использовать.

Для того, как вы на самом деле будете реализовывать это вместе с флаттером ... вам нужно будет использовать Каналы платформы . Я упомянул их в комментарии к вашему другому ответу, но решил, что вы сами можете это найти. Документация гораздо лучше объясняет, как это работает и как ее настроить, чем я могу. Но TLDR заключается в том, что, по сути, они позволяют вам отправлять сериализованные данные из нативного кода (java / kotlin / swift и т. Д.) В флаттер-код (dart) и наоборот, который преобразуется в аналогичные структуры данных в целевом объекте. язык. Вы можете установить различные «каналы», по которым передаются данные, а внутри этих каналов настроить «методы», которые вызываются с любого конца, или просто отправлять события туда и обратно.

Сложность, о которой я упомянул в начале, заключается в том, что отправка изображений назад и вперед по каналам между флаттером и дротиком не так уж оптимальна. Скорее всего, вы не получите плавных 24/30 / 60fps изображений, отправляемых из Java в дротик, и это может значительно замедлить остальную часть пользовательского интерфейса. Поэтому вместо реального окна просмотра вы захотите использовать Texture , который просто отображает данные со стороны Android. Вам придется самостоятельно выяснить, как написать текстуру с Android, но для этого есть много информации. Элементы управления, визуализация аудио и т. Д. Могут быть выполнены непосредственно во флаттере с данными, которые извлекаются из нативного.

По сути, у вас будет пульт дистанционного управления, написанный на дротике / флаттере, который отправляет различные команды в библиотеку обработки аудио / видео и код оболочки в Java.

Если все это звучит сложно, то это потому, что это так. И хотя флаттер очень удобен для создания пользовательских интерфейсов, я сомневаюсь, что это будет стоить дополнительных осложнений, если вы нацелены только на Android.


Не совсем относится к ответу, а скорее к дружескому совету:

Есть еще одна вещь, которую я упомяну - я не знаю ваш уровень владения программированием и разными языками, но обработка видео / аудио и тому подобное обычно не выполняется в Java, а скорее в реальном нативном коде (т.е. C / C ++). Таким образом, на самом деле есть два уровня абстракции, с которыми вам придется иметь дело здесь (до некоторой степени, поскольку он, вероятно, будет абстрагирован в той или иной степени в зависимости от используемой вами библиотеки) - c / c ++ to java и ява к дротику.

Вы можете вырезать посредников и работать более напрямую с native - в этом случае я бы рекомендовал хотя бы взглянуть на Qt или JUCE , поскольку они могут быть больше подходит, чем флаттер для вашего конкретного случая использования. Также есть Kivy (использует python), который может хорошо работать, так как есть тонна библиотек обработки изображений / видео / аудио для Python, так или иначе ... хотя они могут не все работать на Android и все еще имеют c ++ => перевод на Python в некоторой степени. Однако вам придется изучить лицензирование и т. Д. - Qt имеет достаточно широкую лицензию на ОС для большинства приложений для Android, но JUCE вам придется заплатить, если вы не пользуетесь открытым исходным кодом. Я бы порекомендовал Qt немного больше, чем другие, поскольку он на самом деле имеет собственное декодирование видеокадров и т. Д., Хотя вы, вероятно, захотите включить OpenCV или что-то еще для более сложных эффектов, о которых вы говорите. Но это, вероятно, будет на том же уровне сложности, что и простое написание в Java-коде, но с немного другим стилем пользовательского интерфейса и более легкой интеграцией с библиотеками c ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...