Flutter API для записи видео

#flutter #user-interface #dart

#flutter #пользовательский интерфейс #dart

Вопрос:

У Flutter нет возможности записывать видео из приложения Flutter.

Я перепробовал все следующее, у всех есть серьезные недостатки, которые заставляют задать этот вопрос

Использование repaintBoundary

Этот метод имеет 2 основных недостатка:

  1. Он рисует пустые белые поля в PlatformViews и WebViews (https://github.com/flutter/flutter/issues/25306 и обновление от 30 июня https://github.com/flutter/flutter/issues/83856 это продолжается в этом квартале)
  2. Растровые изображения необходимо отправить обратно на родную платформу для кодирования в mp4. (С использованием OpenGL)

Использование собственной платформы

Flutter предоставляет API getBitmap, который предназначен для использования на собственной платформе для создания скриншота запущенного размещенного приложения Flutter, но у этого есть 2 основных недостатка

  1. Он должен выполняться в UIThread, чтобы приложение Flutter было заблокировано, поэтому видео записывает заблокированный пользовательский интерфейс
  2. Этот метод очень медленный. Иногда до 100 мс на кадр в зависимости от содержимого экрана.

Запись всего экрана?

С помощью MediaRecorder это возможно, но мы хотим:

  1. Записывайте только приложение, а не весь экран
  2. Запись всего экрана требует специального разрешения от пользователя

Рисование холста FlutterView на родной платформе?

Это рисует черный экран, потому что FlutterView — это SurfaceView, и растровое изображение не может быть получено, поскольку оно было нарисовано в другом потоке.

Использовать пикселькопию?

Этот API доступен только для > = API 24

Предоставляет ли FLutter API для непрерывной записи растровых изображений в фоновом режиме, а не в основном потоке пользовательского интерфейса. (Или API для записи видео, но это слишком много, чтобы спрашивать)

Ключевые слова: getBitmap, скриншот, растровое изображение, uithread, фон, запись, запись, снимок экрана, основной поток, flutterview, surfaceview, видео, mp4, mediarecorder, opengl, mediamuxer, mediaencoder