Files
VideoEncodingTestTask/readme.md

2.7 KiB
Raw Permalink Blame History

Тестовое задание Inspiry для Android Developer


Небольшое описание:

В отдельном модуле я создал Custom View HelloSurface, который унаследовал от SurfaceView.

В нем я написал необходимые методы для движения за 20 фреймов любой фразы.

Изначально я собирался реализовать рендер через MediaRecorder, однако столкнулся с проблемой синхронизации кадров. Было принято решение реализовать запись видеопотока через MediaCodec.

Протестировал на различных устройствах - работает без проблем, генерирует видео в 30 и 60 фпс. Есть пару недостатков, но на выполнение поставленной задачи они не влияют.

Программное управление кодеком и fps я не делал, с ними можно поиграться в Constants.kt.

Файл сохраняется в папку данных приложения (storage/Android/data/su.rst10h.inspiry/files), где создается папка test, а внутри создается TestVideo.mp4

Первое нажатие на кнопку запускает рендер, кнопка становится неактивной и меняет надпись на Rendering. После записи файла с видео, название кнопки меняется на "OPEN MEDIA", нажатие на которую открывает записанный файл через Intent.

Недостатки, о которых я знаю:

  1. В текущем варианте надпись рисуется на Canvas в Surface. При этом рисуется один раз во вьюхе на экране, а второй раз рендерится inputSurface энкодера. Это можно исправить например, рендером в inputSurface, а затем использовать обычный SurfaceView как превью (но я пока не уверен, что так будет быстрее).
  2. Использование Canvas. В плане производительности, думаю, лучше было бы рисовать на GLSurfaceView. Но для такой простой задачи он мне показался избыточным.